3-407
INSTRUCTION SET REFERENCE
MOVMove to/from Control Registers
Description
This instruction moves the contents of a control register (CR0, CR2, CR3, or CR4) to a general-
purpose register or vice versa. The operand size for these instructions is always 32 bits, regard-
less of the operand-size attribute. Refer to Section 2.5., Control Registers in Chapter 2, System
Architecture Overview of the Intel Architecture Software Developers Manual, Volume 3, for a
detailed description of the flags and fields in the control registers.
When loading a control register, a program should not attempt to change any of the reserved bits;
that is, always set reserved bits to the value previously read.
At the opcode level, the reg field within the ModR/M byte specifies which of the control regis-
ters is loaded or read. The two bits in the mod field are always 11B. The r/m field specifies the
general-purpose register loaded or read.
These instructions have the following side effects:
When writing to control register CR3, all non-global TLB entries are flushed. Refer to
Section 3.7., Translation Lookaside Buffers (TLBs) in Chapter 3, Protected-Mode Memory
Management of the Intel Architecture Software Developers Manual, Volume 3, for a
detailed description of the flags and fields in the control registers.
OpcodeInstruction
Description
0F 22 /rMOV CR0,r32
Move r32 to CR0
0F 22 /rMOV CR2,r32
Move r32 to CR2
0F 22 /rMOV CR3,r32
Move r32 to CR3
0F 22 /rMOV CR4,r32
Move r32 to CR4
0F 20 /rMOV r32,CR0
Move CR0 to r32
0F 20 /rMOV r32,CR2
Move CR2 to r32
0F 20 /rMOV r32,CR3
Move CR3 to r32
0F 20 /rMOV r32,CR4
Move CR4 to r32