MOV 32 байта до 8 байтов в регистре сборки

Let's говорит, что значения устанавливаются так:

ESI = 32604F35AF EBX = 0

Теперь мы получили команду mov: mov bl, [esi]

Теперь мой вопрос: что произойдет, потому что я взял 32 байта и поместил его на 8 байтов. какое будет значение "бл" и почему?

1 ответ

mov bl,[esi] не пытается засунуть 32 бита esi в bl, Вместо этого он читает байт памяти с адресом в esi в bl,

Например

Если память выглядит так:

Address   contents
00000000  00 11 22 23 44 65 86 77
00000008  18 29 6A 4B 1C 0D 0E 0F

А также esi содержит 00000007 затем bl будет заполнен байтом по этому адресу. В этом случае 77,

Если вы хотите загрузить ESI в BL, вам придется сделать это косвенно

mov ebx,esi       
and ebx,$000000FF     //discard upper 24 bits

Всякий раз, когда квадратные скобки [] используются в x86, это обозначает доступ к памяти, кроме случаев, когда lea используется. lea просто выполняет расчеты.

Другие вопросы по тегам