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

[求助] 我编了个程,要输出200*150的结果,可是运行却出现divide overflow.

sandho 发布于 2007-01-06 17:03, 941 次点击

我编了个程,要输出200*150的结果,可是运行却出现divide overflow.
请问哪里错了。data segment
a dw 200
b dw 150
string db '200*150='
db '$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset string
mov ah,09h
int 21h
mov bx,a
mov cx,b
mov ax,0
lop1:add ax,bx
loop lop1
s:mov bx,0 ;不断将ax除于0,判断余数属否为零
mov cl,10
div cl
mov bl,ah
add bx,30h
mov dx,bx
mov ah,02h
int 21h
cmp al,0
jnz s
mov ah,4ch
int 21h

code ends
end start

5 回复
#2
菜鸟上路2007-01-06 18:48
在s循环体里面有mov ah,02h ,所以影响了ax中原有的值,可以push ax,pop ax试下
#3
sandho2007-01-06 20:31

我现在将程序改成这样,可还是不行。不知为什么?
data segment
a dw 200
b dw 150
string db '200*150='
db '$'
data ends
stack1 segment
dw 100 dup(?)
stack1 ends
code segment
assume cs:code,ds:data,ss:stack1
start:
mov ax,stack1
mov ss,ax
mov ax,data
mov ds,ax
mov ax,0
mov dx,offset string
mov ah,09h
int 21h
mov bx,a
mov cx,b
mov ax,0
lop1:add ax,bx
loop lop1
s:mov bl,10
div bl
mov bl,ah
mov bh,0
push bx ;将余数入栈
mov ah,0
cmp al,0 ;判断商是否为0
jnz s
mov cx,5
l1:pop bx ;将各余数依次出栈
mov dl,bh
add dl,30h
mov ah,02h
int 21h
loop l1
hlt

code ends
end start

[此贴子已经被作者于2007-1-6 21:25:05编辑过]

#4
sandho2007-01-06 21:20
我解决了。谢谢各位
#5
曾小2007-01-07 20:44
不是说是计算200*150吗?红色部分不就足够了吗?为什么还加下面的代码啊!????
lop1:add ax,bx
loop lop1
s:mov bl,10
div bl
mov bl,ah
mov bh,0
push bx ;将余数入栈
mov ah,0
cmp al,0 ;判断商是否为0
jnz s
mov cx,5
l1:pop bx ;将各余数依次出栈
mov dl,bh
add dl,30h
mov ah,02h
int 21h
loop l1
#6
菜鸟上路2007-01-07 22:30
分析下输出的是什么就知道了
1