汇编语言写的程序运行时出现“divide overflow"

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:23:44
下面的这个程序怎么就运行时出现“divide overflow"?我感觉没错啊!
刚学汇编,让各位见笑了。
code segment
assume cs:code
start:
mov al,10
mov ah,8
mul ah
mov dx,ax
mov ah,9
mov al,3
mul ah
add ax,dx
cwd
mov dl,2
div dx

mov dl,al
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
这个程序的目的是求解“(10*8+9*3)/2”,并把结果中商53用相应的ASCII码值显示出来。
我试了一下,当把程序中的
“cwd
mov dl,2
div dx"
改为
“mov dl,2
div dl"
就好了,不知为何,谢谢指教

CWD的功能是将AX中的字扩展成双字存入DX和AX中
你再将mov dl,2然后div dx,表示用DX和AX中的双字除以DX,这样就存在被除数的DX被除数的DX改变了,所以结果就会出错;
div dl表示用AX的值除以DL,不存在矛盾。
但你显示的结果不是在屏幕上得到53呀,我帮你改了一下,可以在屏幕上显示53.

code segment
assume cs:code
start:
mov al,10
mov ah,8
mul ah
mov dx,ax
mov ah,9
mov al,3
mul ah
add ax,dx
cwd
mov BX,2
div BX
MOV BX,AX
CALL BINIDEC
MOV AH,1
INT 21H
mov ah,4ch
int 21h
binidec proc near
mov cx,10d
call dec_div
mov cx,1d
call dec_div
ret
dec_div proc near
mov ax,bx
mov dx,0
div cx
mov bx,dx
mov dl,al
add dl,30h
mov ah,2
int 21H
ret
dec_div endp
binidec endp
code ends
end start