beautypg.com

Mov-move to/from control registers, Mov—move to/from control registers – Intel 253666-024US User Manual

Page 651

background image

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.