运行EXE文件时,弹出一标题为:16位MS-DOS子系统的对话框,说是:NTVDM CPU 遇到无效的指令 CS:0000 IP:0077 OP:F0 37 05 14 02 选择“关闭”终止应用程序。这个是什么错误呀?源代码如下:
getsum segment
assume cs:getsum
main proc far
push ds
sub ax,ax
push ax
mov ax,100 ;由ax给sum子程序传递的入口参数(100)
call sum ;调用sum子程序,由ax返回出口参数(求和结果)
call btod ;调用btod子程序显示十进制求和结果
main endp
sum proc near ;求和子程序sum
mov cx,ax
mov ax,0
again:
add ax,cx ;100+0-> 1-> 2-> 3- - -99
loop again
ret
sum endp
btod proc near ;十进制显示子程序btod
push si ;保护现场
push cx
push dx
mov dx,0
mov cx,0
mov si,10
next:
div si ;除10取余数,商放在AX,余数放在DX中
add dx,30h ;将余数加上0的ASCII码,转换为ASCII码
push dx ;各余数依次入栈保护,以便用堆栈反序出栈,实现倒取余数
inc cx
mov dx,0 ;清除dx中已入栈保存的余数
cmp ax,0 ;商为0时结束除10取余计算,余数依次为0505.
jnz next
mov ah,02h
disp:
pop dx ;余数反序出栈,实现倒取余数
int 21h ;显示反序余数,实现十进制数的转换
loop disp
pop dx ;恢复现场
pop cx
pop si
ret
btod endp
getsum ends
end main
这个源代码的运行结果为什么出现很多个5050?请高手指教,谢谢!
------解决方案--------------------------------------------------------
main里没有退出指令吧?
mov ah,4ch
int 21h