我实在分析不出这个dtoc程序是怎么回事,请大家帮忙。
这个是我写的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错误。