X86-64 Instruction Encoding: Difference between revisions
Jump to navigation
Jump to search
[unchecked revision] | [unchecked revision] |
Content deleted Content added
→Registers: Added YMM registers |
|||
Line 293: | Line 293: | ||
+---+---+---+---+---+---+---+---+ |
+---+---+---+---+---+---+---+---+ |
||
</pre> |
</pre> |
||
{| {{wikitable}} |
|||
* MODRM.mod (2 bits) |
|||
! Field |
|||
* MODRM.reg (3 bits) |
|||
! Length |
|||
* MODRM.rm (3 bits) |
|||
! Description |
|||
|- |
|||
The ''MODRM.mod'' and ''MODRM.rm'' fields are explained in the table. The ''MODRM.reg'' field can have one of two values: |
|||
| MODRM.mod||2 bits||In general, when this field is b11, then register-direct addressing mode is used; otherwise register-indirect addressing mode is used. |
|||
⚫ | |||
|- |
|||
⚫ | * A 3-bit register reference, which can be used as the source or the destination of an instruction (depending on the instruction). This is the case when ''/r'' is specified at the opcode syntax. Which register is meant depends on the [[#Operand-size and address-size override prefix|operand-size]] of the instruction and the instruction itself. See the |
||
| MODRM.reg||3 bits||This field can have one of two values: |
|||
⚫ | |||
⚫ | * A 3-bit register reference, which can be used as the source or the destination of an instruction (depending on the instruction). This is the case when ''/r'' is specified at the opcode syntax. Which register is meant depends on the [[#Operand-size and address-size override prefix|operand-size]] of the instruction and the instruction itself. See [[#Registers|Registers]] for the values to use for each of the registers. The REX.R, VEX.~R or XOP.~R field extends this field with 1 most-significant bit to 4 bits total. |
||
|- |
|||
| MODRM.rm||3 bits||Specifies a direct or indirect register operand, optionally with a displacement. The REX.B, VEX.~B or XOP.~B field extends this field with 1 most-significant bit to 4 bits total. |
|||
|} |
|||
==== Registers ==== |
==== Registers ==== |