Для восстановления местонахождения операндов данной машинной команды следует найти это значение в одной из таблиц (какой таблицей воспользоваться, зависит от текущего режима адресации) и по первому столбцу строки, содержащей код 87 h, определить местонахождение первого операнда. В нашем случае адрес операнда формируется из содержимого регистра ВХ и 16-разрядного смещения, значение которого следует искать в следующих за байтом mod r/m двух байтах. Второй столбец той же строки содержит значение поля mod. Третье поле байта mod r/m можно найти, переместившись вверх по столбцу, содержащему значение 87h, до пересечения со строкой reg или /цифра. При этом будет выбрано значение, идентифицирующее один из регистров или продолжение кода операции. Что именно — определяется либо самим кодом операции, либо значением бита w в сочетаний с текущей разрядностью адреса (см. ранее).
При использовании 32-разрядной адресации содержимое байта mod r/m трак-туется несколько иначе из-за наличия в формате машинной команды байта sib I (см. подраздел «Байт масштаба, индекса и базы»).
Некоторые машинные команды могут работать с сегментными регистрами. Далее приведены соглашения по кодированию сегментных регистров. В дальнейшем изложении будем различать два набора регистров:
- sreg 86 — сегментные регистры, существовавшие в архитектуре процессоров
18086/88 и i80286;
- sreg 386 — сегментные регистры архитектуры процессоров i80386 и выше.
Различие наборов состоит в том, что кодируются они различным количеством битов: sreg86 — двумя битами (табл. 3.7), a sreg386 — тремя (табл. 3.8).
Таблица 3.7.Кодировка сегментных регистров в наборе sreg 86
Код в поле sreg86
Сегментный регистр
ES
CS
SS
DS
Таблица3.8. Кодировка сегментных регистров в наборе sreg386
Код в поле sreg386
Сегментный регистр
ES
CS
SS
DS
FS
101 GS
Одна из целочисленных команд — команда M0V — может оперировать системными регистрами. Кодировка этих регистров приведена в табл. 3.9.
таблица 3.9.Кодировка системных регистров в команде MOV