簡體   English   中英

匯編語言-部門溢出(4位數字)

[英]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/m32DIV r/m64 我將其作為練習讓您在英特爾指令集參考中查找它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM