设为首页 - 加入收藏 PHP编程网 - 黄冈站长网 (http://www.0713zz.com)-创业,推广,IT,移动互联,VR,5G,小程序,站长网!
热搜: vivo 网站 什么 1
当前位置: 首页 > 服务器 > 系统 > 正文

windows – 汇编中的非法指令

发布时间:2021-03-08 17:04 所属栏目:[系统] 来源:网络整理
导读:我真的不明白为什么这个简单的代码在第一次尝试时工作正常但是什么时候 把它放在一个程序中,错误显示: NTVDM CPU遇到了非法指令 CS:db22 IP:4de4 OP:f0 ff ff ff ff 第一个代码段工作得很好: .model small.stack 100h.codestart: mov ax,@data mov ds

我真的不明白为什么这个简单的代码在第一次尝试时工作正常但是什么时候
把它放在一个程序中,错误显示:

NTVDM CPU遇到了非法指令
CS:db22 IP:4de4 OP:f0 ff ff ff ff

第一个代码段工作得很好:

.model small
.stack 100h
.code

start:
  mov ax,@data
  mov ds,ax
  mov es,ax

   MOV AH,02H    ;sets cursor up            
   MOV BH,00H
   MOV DH,02
   MOV DL,00
   INT 10H

EXIT:

MOV AH,4CH
INT 21H
END

但是这会产生错误:

.model small
.stack 100h
.code

start:
  mov ax,ax

  call set_cursor

  PROC set_cursor near

  MOV AH,02H    ;sets cursor up             
  MOV BH,00H
  MOV DH,02
  MOV DL,00
  INT 10H
 RET
 set_cursor ENDP

EXIT:

  MOV AH,4CH
  INT 21H
  END

注意:Windows配置没有任何问题.我尝试过很多样本代码,但效果很好

谢谢

解决方法

你遗漏了一个JMP:

call set_cursor
jmp EXIT ; <== you forgot this part

PROC set_cursor near

发生了什么事情,在调用set_cursor之后,你会直接进入proc并再次执行它,然后当你点击ret时它弹出堆栈然后你跳到了,嗯,谁知道呢?

编辑:正如其他人指出的那样,你最好在主代码结束后放置你的PROC,而不是将它粘在中间并跳过它.但你可能已经想到了:)

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章
热点阅读
随机内容