background image

Vol. 2A 2-11

INSTRUCTION FORMAT

2.2.1.3  

Displacement 

Addressing in 64-bit mode uses existing 32-bit ModR/M and SIB encodings. The ModR/M and SIB displacement 
sizes do not change. They remain 8 bits or 32 bits and are sign-extended to 64 bits.

2.2.1.4  

Direct Memory-Offset MOVs

In 64-bit mode, direct memory-offset forms of the MOV instruction are extended to specify a 64-bit immediate 
absolute address. This address is called a moffset. No prefix is needed to specify this 64-bit memory offset. For 
these MOV instructions, the size of the memory offset follows the address-size default (64 bits in 64-bit mode). See 
Table 2-6.

2.2.1.5  

Immediates 

In 64-bit mode, the typical size of immediate operands remains 32 bits. When the operand size is 64 bits, the 
processor sign-extends all immediates to 64 bits prior to their use. 
Support for 64-bit immediate operands is accomplished by expanding the semantics of the existing move (MOV 
reg, imm16/32) instructions. These instructions (opcodes B8H – BFH) move 16-bits or 32-bits of immediate data 
(depending on the effective operand size) into a GPR. When the effective operand size is 64 bits, these instructions 
can be used to load an immediate into a GPR. A REX prefix is needed to override the 32-bit default operand size to 
a 64-bit operand size. 
For example:

48 B8 8877665544332211 MOV RAX,1122334455667788H

Table 2-5.  Special Cases of REX Encodings 

ModR/M or 

SIB 

Sub-field

Encodings

Compatibility Mode 

Operation

Compatibility Mode 

Implications

Additional Implications

ModR/M Byte mod 

 11

SIB byte present.

SIB byte required for 

ESP-based addressing.

REX prefix adds a fourth bit (b) which is not decoded 

(don't care).
SIB byte also required for R12-based addressing.

r/m = 

b*100(ESP)

ModR/M Byte mod = 0

Base register not 

used.

EBP without a 

displacement must be 

done using 
mod = 01 with 

displacement of 0.

REX prefix adds a fourth bit (b) which is not decoded 

(don't care).
Using RBP or R13 without displacement must be done 

using mod = 01 with a displacement of 0.

r/m = 

b*101(EBP)

SIB Byte

index = 

0100(ESP)

Index register not 

used.

ESP cannot be used as 

an index register.

REX prefix adds a fourth bit (b) which is decoded.
There are no additional implications. The expanded 

index field allows distinguishing RSP from R12, 

therefore R12 can be used as an index.

SIB Byte

base = 

0101(EBP)

Base register is 

unused if mod = 0.

Base register depends 

on mod encoding.

REX prefix adds a fourth bit (b) which is not decoded.
This requires explicit displacement to be used with 

EBP/RBP or R13.

NOTES:

* Don’t care about value of REX.B

Table 2-6.  Direct Memory Offset Form of MOV

Opcode

Instruction

A0

MOV AL, moffset

A1

MOV EAX, moffset

A2

MOV moffset, AL

A3

MOV moffset, EAX