Что означает CMP dword ptr [EBP + local_c], 0xdeadbeef? - PullRequest
0 голосов
/ 13 июля 2020

Может кто-нибудь объяснить, что означает

CMP        dword ptr [EBP + local_c], 0xdeadbeef

. Насколько я понимаю, сравните значение местоположения EBP+local_c с 0xdeadbeef, но я не уверен, правда ли это.

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 13 июля 2020

EBP + local_c здесь рассматривается как адрес памяти, указывая на значение dword. Поэтому инструкция

CMP  dword ptr [EBP + local_c], 0xdeadbeef

сравнивает значение в этой позиции памяти с 0xdeadbeef.

4 голосов
/ 13 июля 2020

[EBP + local_c] - это адрес в режиме косвенной адресации. EBP плюс некоторое смещение. Для этого языка ассемблера (определенного ассемблером, а не целевым объектом), чтобы указать, с каким размером должна работать эта команда, основанная на косвенном адресе, имеет dword ptr, означающее, что первый операнд представляет собой 32-битное значение по указанному адресу. Второй операнд - это непосредственное значение, константа 0xdeadbeef.

Эта инструкция говорит, что прочтите 32-битное значение с адреса EBP + local_ c и выполните инструкцию CMP со значением 0xdeadbeef. CMP означает выполнение операции вычитания, сохранение флагов, но не сохранение результата. Таким образом, нулевой флаг и другие будут изменены на основе вычитания между этими двумя операндами.

Следующие инструкции в идеале будут принимать решения на основе флагов, вычисленных во время этой инструкции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...