DIV - 無符號除法

操作碼

指令

說明

F6 /6

DIV r/m8

將無符號 AX 除以無符號 r/m8;AL 商,

AH 餘數

F7 /6

DIV r/m16

將無符號 DX:AX 除以無符號 r/m16;AX 商,

DX 餘數

F7 /6

DIV r/m32

將無符號 EDX:EAX 無符號除以 r/m32 雙字;

EAX 商,EDX 餘數

說明

將 AX 暫存器、DX:AX 暫存器對或 EDX:EAX 暫存器對中的值(被除數)除以(無符號)源運算元(除數),結果儲存到 AX (AH:AL)、DX:AX 或 EDX:EAX 暫存器。源運算元可以是通用暫存器或記憶體位置。此指令的操作取決於運算元大小,具體如下表所示:

運算元大小

被除數

 

除數

 

 

餘數

商的最大值

字/位元組

AX

r/m8

AL

AH

255

雙字/字

DX:AX

r/m16

AX

DX

65,535

四字/雙字

EDX:EAX

r/m32

EAX

EDX

232 - 1

非整型結果會向 0 截斷(去尾)。餘數在數值上總是小於除數。上溢使用 #DE(除法錯誤)異常而不是 CF 標誌指出。

操作

IF SRC 0
THEN #DE; (* divide error *)
FI;
IF OpernadSize 8 (* word/byte operation *)
THEN
temp AX / SRC;
IF temp > FFH
THEN #DE; (* divide error *) ;
ELSE
AL temp;
AH AX MOD SRC;
FI;
ELSE
IF OperandSize 16 (* doubleword/word operation *)
THEN
temp DX:AX / SRC;

IF temp > FFFFH
THEN #DE; (* divide error *) ;
ELSE
AX temp;
DX DX:AX MOD SRC;
FI;
ELSE (* quadword/doubleword operation *)
temp EDX:EAX / SRC;
IF temp > FFFFFFFFH
THEN #DE; (* divide error *) ;
ELSE
EAX temp;
EDX EDX:EAX MOD SRC;
FI;
FI;
FI;

影響的標誌

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

保護模式異常

#DE - 如果源運算元(除數)為 0。如果商對於指定的暫存器而言太大。

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS 或 GS 暫存器包含空的段選擇器。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在目前特權級別為 3 且啟用對齊檢查的情況下進行未對齊的記憶體引用。

實地址模式異常

#DE - 如果源運算元(除數)為 0。如果商對於指定的暫存器而言太大。

#GP - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。如果 DS、ES、FS 或 GS 暫存器包含空的段選擇器。

#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。

虛 8086 模式異常

#DE - 如果源運算元(除數)為 0。如果商對於指定的暫存器而言太大。

#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。

#SS - 如果記憶體運算元有效地址超出 SS 段限制。

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。