当前位置: 代码迷 >> 汇编语言 >> 运行时提示CPU遇到无效指令,什么原因呢?解决思路
  详细解决方案

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

热度:1273   发布时间:2013-02-26 00:00:00.0
运行时提示CPU遇到无效指令,什么原因呢?
运行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
  相关解决方案