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
просто выполняет расчеты.