Это - веб-сайт сотрудничества. Все участники в команде могут обновить единственный календарь и загрузить совместно использованные документы единому репозиторию.
Я думаю, что исходный код не делает то, что вы думаете. Согласно msdev, дизассемблирование выглядит следующим образом:
003AFCFC FF 35 D0 07 00 00 push dword ptr ds:[7D0h]
Что эквивалентно нажатию:
*((DWORD*)2000)
НЕ помещает значение 2000 в стек. Однако - если это действительно то, что вам нужно, тогда инструкция:
push dword ptr ds:[2000]
ds:
указывает на использование сегментного регистра ds
. Сегментные регистры - это пережиток неприятных 16-битных дней. Основными из них являются cs
- сегмент кода, ds
- сегмент данных и ss
- сегмент стека (и fs
, где локальные потоки хранятся). Думайте о них как о базовых смещениях в памяти. По умолчанию доступ к данным отключен от сегмента ds
.
Я предполагаю, почему push dword ptr [2000]
didn ' Работа заключается в том, что компилятор понял, что это было глупо для вас, и «исправил это». Принудительное использование префикса ds
означает, что вы действительно имеете в виду доступ к памяти.
для меня в ассемблере GNU 2.18 для 32-битной цели
.intel_syntax
push dword [2000]
генерирует:
0: ff 35 d0 07 00 00 pushl 0x7d0
и для nasm:
push dword [dword 2000]