windows – 汇编中的非法指令
发布时间:2021-03-09 12:37:26 所属栏目:系统 来源:网络整理
导读:我真的不明白为什么这个简单的代码在第一次尝试时工作正常但是什么时候 把它放在一个程序中,错误显示: NTVDM CPU遇到了非法指令 CS:db22 IP:4de4 OP:f0 ff ff ff ff 第一个代码段工作得很好: .model small.stack 100h.codestart: mov ax,@data mov ds,a
我真的不明白为什么这个简单的代码在第一次尝试时工作正常但是什么时候
NTVDM CPU遇到了非法指令 第一个代码段工作得很好: .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,而不是将它粘在中间并跳过它.但你可能已经想到了:) (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |