2

我被这个问题困扰了一天,没有找到任何相关信息..

我的代码中有这一部分需要一个数字(例如 259)并将其数字分隔到数组槽中。

SEPERATE_DIGITS:
    mov ax,RESULT               ; result is the number im working on. RESULT dw 259h
    mov si,0
    SEPERATE_DIGITS_LOOP:
        div TEN                 ; TEN dw 10h
        add dl,30h              ; fix-up to print later on
        mov SEPERATED[si],dl    ; store separated digit in my array.
        inc si
        cmp ax,0
    jne SEPERATE_DIGITS_LOOP

我一直在 turbo 调试器上调试它。第一个分区工作正常。(25 到 ax,9 到 dx).. 下一个部门,IP 变成猿,只是跳转到命令“db FE”,然后一次又一次地循环。

我到底做错了什么?问:

4

1 回答 1

6

这里 DIV 的被除数是取自 DX(前 16 位)和 AX(低 16 位)的 32 位值。
您需要在每个 DIV 之前将 DX 清零,以避免将余数作为股息的一部分重复使用。

另外,开始使用调试器。它有助于。

于 2011-11-23T02:57:20.383 回答