首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

高分求大神帮忙!NTVDM CPU遇到无效指令关闭解决方法

2012-04-09 
高分求大神帮忙!NTVDM CPU遇到无效指令关闭输入小写,逆向输出大写,下面是程序data segmentxiao db 100db 0

高分求大神帮忙!NTVDM CPU遇到无效指令关闭
输入小写,逆向输出大写,下面是程序
data segment
xiao db 100
  db 0
  db 100 dup('$')
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
  mov ds,ax
  mov di,offset xiao
   
  mov ah,0ah
  mov dx,di
  int 21h
xor ax,ax
  mov al,[di+1]
  mov al, bh;标志下次区变大写的循环
  mov bp,ax
  lea si,[di+2]
  mov bl,2
  div bl
  xor cx,cx
  mov cl,al
  min:
  mov al,[si]
  mov bl,[si+bp-1]
  mov [si+bp-1],al
  mov [si],bl
  inc si
  dec bp
  dec bp
  loop min
  xor cx,cx
  mov cl,bh
  lea si,[di+2]
  ni:
  cmp byte ptr[si],'a'
  jb hao
  cmp byte ptr[si],'z'
  ja hao
  sub byte ptr[si],20h
  hao:
  inc si
  loop ni
   
  mov dl,0ah
  mov ah,02h
  int 21h

  lea dx,[di+2]
  mov ah,09h
  int 21h

  mov ah,0
  int 16h
  mov ax,4c00h
  int 21h
code ends
end start
编译连接没有错误,可是当运行输入,字母也能显示,可是当按回车键的时候出现 NTVDM CPU 遇到无效的指令
cs:0000 ip:0077 op:fo 37 05 10 02
选择关闭终止应用程序
在多台电脑上面实验都是这个结果

[解决办法]
>> mov al, bh ;标志下次区变大写的循环
上面这指令什么意思?它清除了了 al 里的输入的字符的个数,导致后面的 loop 循环溢出,将代码乱改了,最后程序崩溃。
[解决办法]
指令流跑偏,导致遇到无效指令,建议监控一下指令流

热点排行