Если в команде используется двухбайтовый регистр, например, AX, то перед командой добавляется префикс изменения длины операнда (66h).
Различают два вида команд, обрабатывающих операнд в памяти:
· команды без байта sib (масштаб–индекс–база);
· команды, содержащие байт sib.
Тип команды определяется по содержимому поля m байта адресации (r/m): если m¹100, то байт sib в команде отсутствует и используется таблица 1. В противном случае используется таблица 2, определяющая схемы адресации, которые формируются байтом sib.
Таблица 1 – Схемы адресации памяти в отсутствии байта Sib
Поле
r/m
Эффективный адрес второго операнда
mod = 00B
mod = 01B
mod = 10B
000B
EAX
EAX+Disp8
EAX+Disp32
001B
ECX
ECX+Disp8
ECX+Disp32
010B
EDX
EDX+Disp8
EDX+Disp32
011B
EBX
EBX+Disp8
EBX+Disp32
100B
Определяется Sib
Определяется Sib
Определяется Sib
101B
Disp321
SS:[EBP+Disp8]
SS:[EBP+Disp32]
110B
ESI
ESI+Disp8
ESI+Disp32
111B
EDI
EDI+Disp8
EDI+Disp32
Таблица 2 – Схемы адресации памяти при наличии байта Sib
Поле
base
Эффективный адрес второго операнда
mod = 00B
mod = 01B
mod = 10B
000B
EAX+ss*index
EAX+ss*index +Disp8
EAX+ss*index +Disp32
001B
ECX+ss*index
ECX+ss*index +Disp8
ECX+ss*index +Disp32
010B
EDX+ss*index
EDX+ss*index +Disp8
EDX+ss*index +Disp32
011B
EBX+ss*index
EBX+ss*index +Disp8
EBX+ss*index +Disp32
100B
SS:[ESP+ss*index]
SS:[ESP+ ss*index]+Disp8
SS:[ESP+ ss*index] +Disp32
101B
Disp321+ss*index
SS:[EBP+ss*index +Disp8]
SS:[EBP+ss*index +Disp32]
110B
ESI+ss*index
ESI+ss*index +Disp8
ESI+ss*index +Disp32
111B
EDI+ss*index
EDI+ss*index +Disp8
EDI+ss*index +Disp32
В таблице:
ss – масштаб; index – содержимое индексного регистра; base – содержимое базового регистра;
1 – особый случай – адрес операнда не зависит от содержимого регистра EBP, а определяется только смещением в команде (прямая адресация).
Кроме того, при анализе кодов машинных команд следует иметь в виду, что команды, в качестве одного из операндов использующие регистры AL/AX/EAX, имеют специальный формат, который унаследован от еще более раннего предка – процессора i8080 (Z80). В этом процессоре регистр AX использовался как сумматор.