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

[求助]将AX中的数以十进制输出到显示器上,运行时出现Divide overflow错误

story 发布于 2006-11-25 02:11, 1473 次点击

data segment
x db 10 dup(?)
data ends

code segment
main proc far
assume cs:code, ds:data
push ds
mov ax, 0
push ax
mov ax, data
mov ds, ax
mov ax, 12
mov si, 0
mov bx, 10
lp: div bx
mov offset[x][si], ah
inc si
cmp al, 0
jz output
cbw
jmp lp
output: mov dl, [x][si]
mov ah, 2
int 21h
dec si
cmp si, 0
jae output
ret
code ends
end main
*************************************************
编译和连接都通过了,但是运行时出现Divide overflow错误,请予以指正

7 回复
#2
story2006-11-25 15:21
都一天了,怎么就没人管啊
#3
菜鸟上路2006-11-25 15:46

这里的除数bx是字操作数,除出来的商超过16位就会益处。
一般10,12这种比较小的数一般除数是字节操作数就够了。
这里改成bl应该就可以了

#4
story2006-11-25 20:25

多谢楼上的建议,我已经改了.但是现在的运行结果是无数行的乱码,仿佛是死循环似的,都快晕了~~

#5
菜鸟上路2006-11-25 23:01
LZ给的程序好象不能运行啊
#6
story2006-11-26 01:13
我是用命令行运行的,能运行
#7
wchx2152006-11-26 05:27

x db 10 dup(?)
data ends

code segment
main proc far
assume cs:code, ds:data
push ds
mov ax, 0
push ax
mov ax, data
mov ds, ax
mov ax, 12
mov si, 0
mov bl, 10
lp: idiv bl
mov [x][si], ah
inc si
cmp al, 0
jz output
cbw
jmp lp
output: dec si
output1: mov dl,[x][si]
add dl,30h
mov ah, 2
int 21h
dec si
cmp si,0
jge output1
ret
main endp
code ends
end main

#8
story2006-11-26 17:55
多谢楼上的,已经可以了
1