![](https://pdfstore-manualsonline.prod.a.ki/pdfasset/2/21/2217ba13-0206-4cb5-9366-a7efb136eaab/2217ba13-0206-4cb5-9366-a7efb136eaab-bg28b.png)
Vol. 2A 3-605
INSTRUCTION SET REFERENCE, A-M
MOV—Move to/from Control Registers
MOV—Move to/from Control Registers
Description
Moves the contents of a control register (CR0, CR2, CR3, CR4, or CR8) to a general-
purpose register or the contents of a general purpose register to a control register.
The operand size for these instructions is always 32 bits in non-64-bit modes,
regardless of the operand-size attribute. (See “Control Registers” in Chapter 2 of the
Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 3A, for a
detailed description of the flags and fields in the control registers.) This instruction
can be executed only when the current privilege level is 0.
When loading control registers, programs should not attempt to change the reserved
bits; that is, always set reserved bits to the value previously read. An attempt to
change CR4's reserved bits will cause a general protection fault. Reserved bits in CR0
Opcode Instruction 64-Bit
Mode
Compat/
Leg Mode
Description
0F 20 /0 MOV r32,CR0 N.E. Valid Move CR0 to r32.
0F 20 /0 MOV r64,CR0 Valid N.E. Move extended CR0 to r64.
0F 20 /2 MOV r32,CR2 N.E. Valid Move CR2 to r32.
0F 20 /2 MOV r64,CR2 Valid N.E. Move extended CR2 to r64.
0F 20 /3 MOV r32,CR3 N.E. Valid Move CR3 to r32.
0F 20 /3 MOV r64,CR3 Valid N.E. Move extended CR3 to r64.
0F 20 /4 MOV r32,CR4 N.E. Valid Move CR4 to r32.
0F 20 /4 MOV r64,CR4 Valid N.E. Move extended CR4 to r64.
REX.R + 0F 20 /0 MOV r64,CR8 Valid N.E. Move extended CR8 to r64.
1
0F 22 /0 MOV CR0,r32 N.E. Valid Move r32 to CR0.
0F 22 /0 MOV CR0,r64 Valid N.E. Move r64 to extended CR0.
0F 22 /2 MOV CR2,r32 N.E. Valid Move r32 to CR2.
0F 22 /2 MOV CR2,r64 Valid N.E. Move r64 to extended CR2.
0F 22 /3 MOV CR3,r32 N.E. Valid Move r32 to CR3.
0F 22 /3 MOV CR3,r64 Valid N.E. Move r64 to extended CR3.
0F 22 /4 MOV CR4,r32 N.E. Valid Move r32 to CR4.
0F 22 /4 MOV CR4,r64 Valid N.E. Move r64 to extended CR4.
REX.R + 0F 22 /0 MOV CR8,r64 Valid N.E. Move r64 to extended CR8.
NOTE:
1. MOV CR* instructions, except for MOV CR8, are serializing instructions. MOV CR8 is not
architecturally defined as a serializing instruction. For more information, see Chapter 7 in Intel®
64 and IA-32 Architectures Software Developer’s Manual, Volume 3A.