操作碼 |
指令 |
說明 |
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 段限制。
#DE - 如果源運算元(除數)為 0。如果商對於指定的暫存器而言太大。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS - 如果記憶體運算元有效地址超出 SS 段限制。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。