[Назад] [Далее]

Приложение 2. Команды INTEL 80x86

В этом приложении приведены скорости выполнения всех команд процессоров Intel от 8086 до Pentium II и машинные коды, которые им соответствуют.

1. Общая информация о кодах команд

1.1. Общий формат команды процессора Intel

Команда может содержать до шести полей:

  1. Префиксы — от нуля до четырех однобайтных префиксов.
  2. Код — один или два байта, определяющие команду.
  3. ModR/M — 1 байт (если он требуется), описывающий операнды:
  4. SIB — 1 байт, если он требуется (расширение ModR/M для 32-битной адресации):
  5. Смещение — 0, 1, 2 или 4 байта.
  6. Непосредственный операнд — 0, 1, 2 или 4 байта — будем использовать /ib и /iw для указания этих операндов.

1.2. Значения полей кода команды

В кодах некоторых команд мы будем встречать специальные биты и группы бит, которые обозначим w, s, d, reg, sreg и cond:

Запись 10dw будет означать, что код команды — 000100dw.

Поле reg определяет используемый регистр и имеет длину 3 бита:

Запись C8r будет означать 11001reg.


Поле sreg определяет используемый сегментный регистр:

Поле cond определяет условие для команд Jcc, CMOVcc, SETcc, FCMOVcc.

Его значения для разных команд:

Запись типа 4сс будет означать 0100cond.

1.3. Значения поля ModRM

Поле R/O (биты 5 – 3) содержит либо дополнительные три бита кода команды, либо код операнда, который может быть только регистром. Будем обозначать второй случай reg, а в первом записывать используемые биты.

Поля MOD (биты 7 – 6) и R/M (биты 3 – 0) определяют операнд, который может быть как регистром, так и переменной в памяти:

Значение поля R/M различно в 16- и 32-битных режимах.

1.4. Значения поля SIB

Поля ModR/M и SIB будут записываться как /r, если поле R/O содержит код регистра, или /0 – /7, если поле R/O содержит дополнительные три бита кода команды. В других случаях поля ModR/M и SIB отсутствуют только у команд без операндов, так что они не будут обозначаться дополнительно.


п»ї
"target=_blank><\/a>") //-->