Набор инструкций - Код операции декодирования

Я пытаюсь понять, как / d влияет на код операции.

Пример: FF / 6 PUSH r / m16 M Допустимое значение Допустимое нажатие r / m16.

Как выражается смысл?

Кто-нибудь может привести мне пример разницы?

Спасибо!


person user2622189    schedule 26.07.2013    source источник
comment
Предоставленной вами информации недостаточно. Где здесь задействован этот код операции? Это в реальном оборудовании или в симуляторе?   -  person shazin    schedule 26.07.2013
comment
в реальном оборудовании, процессор x86.   -  person user2622189    schedule 26.07.2013


Ответы (1)


На самом деле существует множество инструкций, использующих FF в качестве кода операции:

INC     rm16                                    FF /0
INC     rm32                                    FF /0
INC     rm64                                    FF /0
DEC     rm16                                    FF /1
DEC     rm32                                    FF /1
DEC     rm64                                    FF /1
CALL    rm16                                    FF /2
CALL    rm32                                    FF /2
CALL    rm64                                    FF /2
CALL FAR        mem16:16                        FF /3
CALL FAR        mem16:32                        FF /3
JMP     rm16                                    FF /4
JMP     rm32                                    FF /4
JMP     rm64                                    FF /4
JMP FAR mem16:16                                FF /5
JMP FAR mem16:32                                FF /5
PUSH    rm16                                    FF /6
PUSH    rm32                                    FF /6
PUSH    rm64                                    FF /6

Как вы можете видеть, часть / d представляет собой 3-битную последовательность, содержащуюся в байте, следующем за кодом операции (так называемый байт ModR / M), который помогает отличить правильную инструкцию.

Из справочной документации Intel:

Многие инструкции, которые относятся к операнду в памяти, имеют байт спецификатора формы адресации (называемый байтом ModR / M), следующий за основным кодом операции. Байт ModR / M содержит три поля информации:

• Поле mod объединяется с полем r / m, чтобы сформировать 32 возможных значения: восемь регистров и 24 режима адресации.

• Поле reg / opcode указывает либо номер регистра, либо еще три бита информации о коде операции. Назначение поля reg / opcode указано в основном коде операции.

• Поле r / m может указывать регистр как операнд или его можно комбинировать с полем mod для кодирования режима адресации. Иногда определенные комбинации поля mod и поля r / m используются для выражения информации кода операции для некоторых инструкций.

Таким образом, значение / d фактически извлекается из поля reg / opcode. Когда ЦП загружает первый код операции, он знает, что он должен прочитать дополнительный байт, следующий за ним, и прочитать это поле, чтобы завершить инструкцию.

person didierc    schedule 21.05.2014