debug中单步执行一切正常 cmd中直接执行提示divide overflow
assume cs:code
data segment
db 8 dup (0)
data ends
code segment
start: mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc: push ax
push bx
push si
mov di,0
dtoc_1: mov bx,10
div bx
push dx
mov dx,0
mov cx,ax
inc di
jcxz s
jmp dtoc_1
s: mov cx,di
s1: pop ax
add ax,30H
mov [si],al
inc si
loop s1
pop si
pop bx
pop ax
ret
code ends
end start
------解决方案--------------------
由于上面的代码缺少个 show_str 子程定义,所以无法具体测试。一般来说,这样的问题是由于没有对寄存器进行适当的初始置 0 造成的;除法的话,就是没有在 div 指令前将 AH 或 DX 置 0 了;debug 是这么做了的,所以往往可以,而 dos 的加载程序没有,所以自己的代码若是不做,可能会出错。