MOV - 移入/移出除錯暫存器

操作碼

指令

說明

0F 21/r

MOV r32,DR0-DR7

將除錯暫存器移到 r32

0F 23 /r

MOV DR0-DR7,r32

r32 移到除錯暫存器

說明

將除錯暫存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6 或 DR7)的內容移到通用暫存器,或者相反。不論運算元大小屬性如何,這些指令的運算元大小總是 32 位。(如需有關除錯暫存器的標誌與欄位的詳細說明,請參閱“IA-32 英特爾(R) 體系結構軟件開發人員手冊”第 3 卷第 14 章“除錯與效能監視”)。

這些指令必須在特權級別為 0 時執行,或是在實地址模式中執行。

清除暫存器 CR4 中的除錯擴充套件 (DE) 標誌時,這些指令按照同 Intel386™ 與 Intel486™ 處理器相容的方式操作除錯暫存器。在這個模式中,引用 DR4 與 DR5 將分別引用 DR6 與 DR7。CR4 中的 DE 設定為 1 時,試圖引用 DR4 與 DR5 會導致操作碼未定義 (#UD) 異常。(CR4 暫存器是從奔騰(R) 處理器開始新增到“英特爾(R) 體系結構”中的)。

在操作碼級別,ModR/M 位元組中的 reg 欄位指定載入或讀取的除錯暫存器。mod 欄位中的兩個位總是 11。r/m 欄位指定載入或讀取的通用暫存器。

操作

IF ((DE 1) and (SRC or DEST DR4 or DR5))
THEN
#UD;
ELSE
DEST SRC;

影響的標誌

OF、SF、ZF、AF、PF 及 CF 標誌未定義。

保護模式異常

#GP(0) - 如果目前特權級別不是 0。

#UD - 如果 CR4 中的 DE(除錯擴充套件)位設定為 1,且執行涉及 DR4 或 DR5 的 MOV 指令。

#DB - 如果在除錯暫存器 DR7 中的 GD 標誌設定為 1 時訪問任何除錯暫存器。

實地址模式異常

#UD - 如果 CR4 中的 DE(除錯擴充套件)位設定為 1,且執行涉及 DR4 或 DR5 的 MOV 指令。

#DB - 如果在除錯暫存器 DR7 中的 GD 標誌設定為 1 時訪問任何除錯暫存器。

虛 8086 模式異常

#GP(0) - 除錯暫存器在虛 8086 模式中無法載入或讀取。