注册 登录
编程论坛 汇编论坛

我实在分析不出这个dtoc程序是怎么回事,请大家帮忙。

hino 发布于 2008-09-09 16:07, 1149 次点击
这个是我写的dtoc程序,我已经debug过多次了,实在找不出问题所在。debug时,程序能正常走完。但一到DOS下面,就会出现divide overflow错误。在debug时,能正常实现功能(12666字串以$结尾,我自己改的)。
里面只有一个div bx关联到除法命令。但是12666<65535,一个AX足以存放被除数和商,想不出理由会导致divide overflow的。


assume cs:code

data segment
        db 64 dup (0)
data ends

code segment
start:  mov ax,12666
        mov bx,data
        mov ds,bx
        mov si,0
        call dtoc

        mov ax,4c00h
        int 21h

  dtoc:
        push dx
        push di
        push cx

        mov bx,10
        mov di,0
     s:
        div bx
        add dx,30h
        push dx
        mov dx,0
        inc di
        mov cx,ax
        jcxz ok
        jmp short s

    ok:
        mov cx,di
     t:
        pop ax
        mov ds:[si],al
        inc si
        loop t

        mov byte ptr ds:[si],'$'

        pop cx
        pop di
        pop dx
        ret


code ends
end start



商ax是每次除以10,只会越变越小。
除数bx一直是10。
余数dx加了30h压栈后被清零。

然后循环,直到ax=0为止。

实在想不出为何会出现divide overflow错误。
1 回复
1