В Intel® 64 and IA-32 Software Developer's Manual, Volume 2A, Section 3.1.1.1
упоминается нотация ct
для обозначения 10-байтового значения, следующего за кодом операции. Однако я не могу найти никаких инструкций, снабженных этим комментарием. Я что-то упустил или нет инструкций, принимающих 10-байтовое немедленное значение?
Какая инструкция x86 имеет 10-байтовое немедленное выполнение?
Ответы (1)
Насколько я знаю, такой инструкции нет.
Нет инструкций, которые немедленно принимают значения с плавающей запятой, особенно 10-байтовых x87 long double
, так что это определенно не операнд TBYTE FP.
32-разрядная версия имеет jmp ptr16:32
и call
, абсолютный прямой дальний переход с 6-байтовое непосредственное назначение (cp). Но x86-64 не имеет кодировки для call
или jmp ptr16:64
. (Только косвенная память с 10-байтовым сегментом: смещение, загруженное из памяти).
@Harold говорит, что коды операций EA и 9A (прямой дальний jmp / call) в 64-битном режиме неисправны как недопустимая инструкция, даже если они находятся за 7 байтов до недоступной страницы, вместо того, чтобы пытаться немедленно прочитать 10-байтовый сбой с нарушение доступа)
@Matteo отмечает, что обычные немедленные действия используют ib
/ iw
/ id
/ io
. (Например, mov r64, imm64
REX.W + B8 + rd io em>.) В руководстве Intel для moffs
форм MOV перечислен только код операции, а не 8-байтовый формат непосредственного абсолютного адреса.
В любом случае cp
- это 6-байтовая пара seg: ptr32, используемая для кодирования jmp / call. cd
- это 4-байтовый seg:ptr16
. x86 не имеет абсолютного прямого ближнего прыжка, поэтому мы не можем увидеть, будет ли co
использоваться для этого.
Кажется вероятным, что ct
был просто добавлен в руководство кем-то, кто забыл, что jmp ptr16:64
не существует, или на тот случай, если они когда-либо захотели описать что-то подобное вне формата инструкции. IDK, если он используется в описании данных в памяти в каком-либо другом разделе руководства Intel, но я не знаю инструкций, которые содержат 10 байтов непосредственных данных.
Максимальное значение - 8 для mov r64, imm64
или movabs [mem], al/ax/eax/rax
(или формы загрузки). Также многие инструкции могут иметь imm32 и disp32, но это два разных значения.
jmp ptr16:64
для 64-битного режима или что-то еще, когда они реализовывали x86-64. Но, вероятно, он не получит никакого применения по сравнению с чем-то, что работает на всех процессорах x86-64, включая AMD.
- person Peter Cordes; 26.10.2018
jmp ptr16:64
кодировки x86-64, только для 16- и 32-битного режима, напримерjmp ptr16:32
. x86-64 имеет только косвенный дальний jmp с seg: offset из памяти. - person Peter Cordes   schedule 24.07.2018cp
, который 6-байтовое значение; немедленно использовать другую нотацию (ib
,iw
,id
,io
). Кстати, даже значениеco
(8-байтовая последовательность) кажется неиспользованным. Я согласен, однако, что это, вероятно, просто для полноты картины. - person Matteo Italia   schedule 24.07.2018mov r,i64
, т.е. таких инструкций, как48 b8 ef cd ab 89 67 45 23 01
. - person fuz   schedule 24.07.2018io
, а неco
, дляmov r64, imm64
. - person Peter Cordes   schedule 24.07.2018co
тоже не используется. Это делает более вероятным, что обозначения существуют только для полноты картины. - person Trillian   schedule 25.07.2018