运行时提示CPU遇到无效指令,什么原因呢?

cyy219 2007-06-20 02:00:20
运行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?请高手指教,谢谢!
...全文
1331 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2007-06-20
  • 打赏
  • 举报
回复
因为没有退出指令,指令流就会继续往下走,直到走到无法解释成指令的数据段中去,
所以会出现无效指令。
cyy219 2007-06-20
  • 打赏
  • 举报
回复
谢谢mydo(侯佩|hopy|ks),但为什么没有退出指令就会弹出一标题为:16位MS-DOS子系统的对话框,说是:NTVDM CPU 遇到无效的指令 CS:0000 IP:0077 OP:F0 37 05 14 02 选择“关闭”终止应用程序。这个是为什么呀?
大熊猫侯佩 2007-06-20
  • 打赏
  • 举报
回复
main里没有退出指令吧?

mov ah,4ch
int 21h

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧