AMD64 Technology 24594—Rev. 3.14—September 2007
Opcode-Syntax Notation
A Far pointer is encoded in the instruction. C Control register specified by the ModRM reg field. D Debug register specified by the ModRM reg field. E General purpose register or memory operand specified by the ModRM byte. Memory addresses can be computed from a segment register, SIB byte, and/or displacement. F rFLAGS register. G General purpose register specified by the ModRM reg field. I Immediate value. J The instruction includes a relative offset that is added to the rIP. M A memory operand specified by the ModRM byte. O The offset of an operand is encoded in the instruction. There is no ModRM byte in the instruction. Complex addressing using the SIB byte cannot be done. P 64-bit MMX register specified by the ModRM reg field. PR 64-bit MMX register specified by the ModRM r/m field. The ModRM mod field must be 11b. Q 64-bit MMX-register or memory operand specified by the ModRM byte. Memory addresses can be computed from a segment register, SIB byte, and/or displacement. R General purpose register specified by the ModRM r/m field. The ModRM mod field must be 11b. S Segment register specified by the ModRM reg field. V 128-bit XMM register specified by the ModRM reg field. VR 128-bit XMM register specified by the ModRM r/m field. The ModRM mod field must be 11b. W A 128-bit XMM register or memory operand specified by the ModRM byte. Memory addresses can be computed from a segment register, SIB byte, and/or displacement. X A memory operand addressed by the DS.rSI registers. Used in string instructions. Y A memory operand addressed by the ES.rDI registers. Used in string instructions. a Two 16-bit or 32-bit memory operands, depending on the effective operand size. Used in the BOUND instruction. b A byte, irrespective of the effective operand size. d A doubleword (32 bits), irrespective of the effective operand size. dq A double-quadword (128 bits), irrespective of the effective operand size. p A 32-bit or 48-bit far pointer, depending on the effective operand size. pd A 128-bit double-precision floating-point vector operand (packed double). pi A 64-bit MMX operand (packed integer). ps A 128-bit single-precision floating-point vector operand (packed single). q A quadword, irrespective of the effective operand size. s A 6-byte or 10-byte pseudo-descriptor. sd A scalar double-precision floating-point operand (scalar double). si A scalar doubleword (32-bit) integer operand (scalar integer). ss A scalar single-precision floating-point operand (scalar single). v A word, doubleword, or quadword, depending on the effective operand size. w A word, irrespective of the effective operand size. z A word if the effective operand size is 16 bits, or a doubleword if the effective operand size is 32 or 64 bits. /n A ModRM-byte reg field or SIB-byte base field that contains a value (n) between zero (binary 000) and 7 (binary 111).
curr_id=0 enum None enum m2z, Ub, Ib, Iz, Ubm, Sb, Uw, _CL enum Iv, Id enum Mb_Rd_q, Mw_Rv, M2ps, Ed_q, Wsd, Yh enum Ed, Wss, Md, Ww, Wq, Mq, Mw_Rd, Gd_q enum vGd_q, Wdq, Vpd, Wb, Wd, Mdq, Mpd, W2ps enum Vps, Vss, Vsd, iVpb, iVpw, iVpd, iVpq enum Yps, Ypd, Yss, Ysd, iYpb, iYpw, iYpd, iYpq enum vVps, vVpd, vVss, vVsd, viVpb, viVpw, viVpd, viVpq enum vYps, vYpd, vYss, vYsd, viYpb, viYpw, viYpd, viYpq enum VRps, VRpd, VRq, VRdq, iWpb, iWpw, iWpd, iWpq enum mYps, mYpd, mYss, mYsd, imYpb, imYpw, imYpd, imYpq enum bVps, bVpd, bVss, bVsd, biVpb, biVpw, biVpd, biVpq enum bYps, bYpd, bYss, bYsd, biYpb, biYpw, biYpd, biYpq enum YRdq, Mh, Mss, Msd, Mps, LMps, YRps, LMpd enum LMdq, YRpd, V2ps, iVRpw, iVpo, mYh, iWpo enum Vq, Vdq, Vd_q, Wps, Wpd, Vd enum iVRpd, iVRpb, iVRpq, iYRpb, iYRpw, iYRpd, iYRpq, iW2pd enum Whps, W4hps, W8pb, W4pb, W2pb, W4pw, W2pw enum Pd, Pq, iPpb, iQpb, iPpw, iQpw, iPpd, iQpd enum iP4pb, iQ4pb, iP2pw, iQ2pw, iPd, iQd enum Eb, Ew, Ev, _Eq, Gb, Gw, Gd, Gv enum Gz, iPRpd, iPRpb, iPRpw, iYpo enum Pd_q, Qd, Qq, PRq, mem80dec, m32real, m64real, mem80real enum m16int, m32int, m64int, m16 enum M, Ma, Mp, Mb enum Mw, Mv, Ms, Mq_Mdq, Mw_Rd_q enum Md_q, Rv, Rd_q, Mb_Rd, Sw enum Td_q enum Cd_q, Dd_q, st0, st1, st2, st3, st4, st5 enum st6, st7, env14_28, env94_108, vmcb, Gzv, UnkModRM enum Ob, Ov, Ap enum _Jb, Yb, Xb, Yz, Xz, Yv, Xv, rAX_r8 enum rCX_r9, rDX_r10, rBX_r11, rSP_r12, rBP_r13, rSI_r14, rDI_r15, AL_r8b enum CL_r9b, DL_r10b, BL_r11b, AH_r12b, CH_r13b, DH_r14b, BH_r15b, _rAX enum _eAX, _eCX, _eDX, _eBX, _eSP, _eBP, _eSI, _eDI enum _AL, _AX, _DX, _ES, _CS, _SS, _DS, _FS enum _GS, One, xb, _Jz, _eax, _ecx
Y
- ymm регистр.
vY - ymm регистр определяемый четырмя
битами VEX.vvvv или XOP.vvvv.
imY - 256-битный вектор с элементами целыми
числами.
bY - ymm регистр определённый битами
[7;4] последнего быйта опкода.
biY - ymm регистр, вектор с элементами целыми
числами.
LM - 32-байта памяти.
pb - вектор с байтами.
pw - вектор слов.
pq - вектор QWORD`ов.
dq - вектор DWORD`ов.
HP FP - число с плавающей точкой половинной
точности размеров с WORD.
SP FP - число с плавающей точкой одинарной
точности размеров с DWORD.
DP FP - число с плавающей точкой двойной
точности размером с QWORD.
MIN_MODRM equ Mb_Rd_q
MAX_MODRM equ UnkModRM
m2z - пятый параметр для инструкций vpermil2ps и vpermil2pd,
представляет 4 бита последнего байта опкода т.е. это число от 0 до 15.
Ib - байт c расширением знака, который может быть заменён
на WORD или DWORD Iz.
Iz - WORD или DWORD с расширением знака.
Uw - WORD без знака.
Ub - знаковый или беззнаковый байт, в зависимости от
инструкции.
Ubm - беззнаковый байт, который может определять мнемонику
инструкций, например для cmppd,cmpps.
Sb - байт в котором по меньшей мере 2 старших бита совсем
не учитываются, для инструкций логического сдвига.
Ub - BYTE без знака.
_CL - регистр cl.
Iv - WORD, DWORD или QWORD для инструкций пересылки mov rEG,Imm
с опкодами от 0B8h до 0BFh.
YRdq - 32 байтный вектор с целыми числами, один из 256-битных медиа
регистров определяемый полем rmem ModRM байта.
Ms - 10 байтная переменная в памяти.
UnkModRM - эквивалентен Ev`у, используется у nop инструкций c опкодами
0F_19..0F_1F.
xb - указатель на таблицу транстляции byte ptr seg:[rBX], для
инструкции xlat.
Td_q - тестовые регистры tr0..tr15, для не документированных
инструкций mov.
Ap - дальний указатель PWORD или FWORD.
Mp - дальний указатель PWORD, FWORD или TBYTE.
_Jz - относительный аддресс для инструкций jcc/jmp/call.
_Jb - однобайтный относительный аддресс.
Sw - сегментный регистр DS,ES,CS,SS,FS или GS.
iPpb - MMX регистр в 8 BYTE`ами как целыми числами.
iPpw - MMX регистр с 4 WORD`ами как целыми числами.
iPpd - MMX регистр с 2 DWORD`ами как целыми числами.
iQpb - MMX регистр или память с 8 BYTE`ами как целыми
числами.
iQpw - MMX регистр или память с 4 WORD`ами как целыми числами.
iQpd - MMX регистр или память с 2 DWORD`ами как целыми числами.
iPRpb - MMX регистр определенный полем MODRM.rm с 8
BYTE`ами как целыми числами.
iPRpw - MMX регистр определенный полем MODRM.rm с 4 WORD`ами
как целыми числами.
iPRpd - MMX регистр определенный полем MODRM.rm с 2
DWORD`ами как целыми числами.
V2ps - SSE регистр с двумя SP FP в
младших 64 битах.
W2ps - SSE регистр или 8 байт памяти с двумя SP
FP.
Whps - SSE регистр или 16-байт памяти с 8-мю HP FP.
W2hps - SSE регистр или 8-байт памяти с 4-мя HP FP.
iYpo - ymm регистр с двумя OWORD`ами как с целыми числами.
mYh - ymm регистр или 32-байта памяти с одним HWORD`ом как с целым
числом.
W2pb - SSE регистр или 2 байта памяти с 2-мя BYTE`ми как с целыми
числами.
Id - целое 32-битное число, непосредственный операнд.