Я пытаюсь понять, как / d влияет на код операции.
Пример: FF / 6 PUSH r / m16 M Допустимое значение Допустимое нажатие r / m16.
Как выражается смысл?
Кто-нибудь может привести мне пример разницы?
Спасибо!
Я пытаюсь понять, как / d влияет на код операции.
Пример: FF / 6 PUSH r / m16 M Допустимое значение Допустимое нажатие r / m16.
Как выражается смысл?
Кто-нибудь может привести мне пример разницы?
Спасибо!
На самом деле существует множество инструкций, использующих 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. Когда ЦП загружает первый код операции, он знает, что он должен прочитать дополнительный байт, следующий за ним, и прочитать это поле, чтобы завершить инструкцию.