[英]Assembly Language - Division Overflow (4 digits)
我的匯編代碼有問題。 每當我調試此代碼時,Division Overflow始終是錯誤。 當AX的值只有兩位數字時,代碼可以平穩運行。
我需要進行哪些更改以使除法器使用4位數字值? 謝謝。
ASSUME DS:DATA, CS:CODE
DATA SEGMENT
X DW 0
Y DW ?
s DB "The aswer is", 0
Z DW 4
DATA ENDS
CODE SEGMENT
MAIN PROC
MOV DS:[Y],23
MOV AX,[Y]
ADD AX,4556
MOV [X],AX
PUSH[X]
CALL WRITE
POP[X]
MOV AH,4CH
INT 21H
MAIN ENDP
WRITE PROC
PUSH BP
MOV BP,SP
MOV AX,0B800H
MOV ES,AX
MOV ES,AX
MOV DI,5*160
MOV AX,[BP+4]
MOV BL,10
DIV BL
ADD AL,'0'
STOSB
XCHG AH,AL
ADD AL,'0'
STOSB
MOV AL, 00001111B
STOSB
POP BP
RET
WRITE ENDP
CODE ENDS
END MAIN
當您執行DIV r/m8
(例如DIV BL
)時,商將存儲在AL
,因此,如果商大於255,則會導致除法溢出。
如果您希望能夠處理最多(但不包括)65536的商,請使用DIV r/m16
:
XOR DX, DX ; DIV r/m16 divides the 32-bit value DX:AX by the divisor, so we need to clear DX
MOV BX, 10
DIV BX
; The quotient is now in AX, and the remainder in DX
為了能夠處理更大的商,請使用DIV r/m32
或DIV r/m64
。 我將其作為練習讓您在英特爾指令集參考中查找它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.