Что не так с этим простым фрагментом кода? - PullRequest
4 голосов
/ 11 сентября 2009

У меня есть следующий фрагмент кода, который в точке останова должен показывать 123 в eax и 321 в ecx. По какой-то причине этого не происходит. Кто-нибудь хочет объяснить, почему?

    push ebp;
    mov ebp, esp;
    sub esp, 8;
    mov [ebp-4], 123;
    mov [ebp-8], 321;
    mov eax, [ebp-4];
    mov ecx, [ebp-8];
    pop ebp; <------------- breakpoint here
    retn;

Я думаю, что должно быть не так, что я не могу сделать

mov [ebp-4], 123

Все остальное мне кажется нормальным.

Спасибо

редактировать: значения: eax 1505915; ecx 1720129;

Ответы [ 2 ]

8 голосов
/ 11 сентября 2009

Вы храните байтовые значения в памяти.

Изменить на

mov dword ptr [ebp - 4], 123
mov dword ptr [ebp - 8], 321

eax = 1505915 - это 0x16FA7B. Последний байт равен 7B в шестнадцатеричном формате, что составляет 123 в десятичном виде. ecx = 1720129 - это 0x1A3F41. 41 в шестнадцатеричном формате - последний байт 321 (141).

1 голос
/ 11 сентября 2009

У меня сложилось впечатление (и я могу ошибаться), что вы не можете вставлять значения в адреса памяти подобным образом. Вы должны пройти через регистры:

MOV EAX, 123
MOV [EBP-4], EAX

Как я уже сказал, я могу ошибаться. Но попробуйте. Ознакомьтесь с руководством по набору инструкций. Он покажет вам, какие операции вы можете выполнять с какими режимами адресации.

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