У меня есть функция в MASM x86 без пролога. Я хочу сравнить аргумент в стеке, который был передан функции.Как сравнить esp в masm x86?
.MODEL flat
extern x:dword
foo proc
cmp esp+4, x
...
foo endp
Я попытался DWORD PTR [esp+4],x
как хорошо, но это не работает. Я не хочу вмешиваться в высказывание из стека или что-то еще, потому что это просто функция пересылки. Мой вопрос в основном почему я не могу сделать сравнение напрямую с arg в стек против глобальной переменной? Если это невозможно, сообщите мне другой способ решить эту проблему.
Я не уверен, если он хочет, чтобы сравнить [ESP + 4] на слово хранится по адресу х или по адресу x. Последняя инструкция будет «cmpl $ x, 4 (% esp)» в синтаксисе AT & T. Это была бы одна инструкция (кодированная как 81 7c 24 04 xx xx xx xx) и не нуждающаяся в дополнительном регистре - к сожалению, я не знаю синтаксиса NTASM. MAYBE это будет "cmp dword ptr [esp + 4], offset x" ... –
@MartinRosenau Yup, если он захочет сравнить с адресом 'x', он наверняка написал бы« offset x »или что-то с инструкция 'lea'. – Downvoter
@MichaelPetch Я действительно не понимаю, что вы имеете в виду. 'DWORD PTR [esp + 4]' получает 'DWORD' в' esp + 4', т. Е. Указывается ** **. Или вы имеете в виду еще один уровень косвенности? – Downvoter