Nat*_*sha 3 windows x86 assembly dos
我真的不明白为什么这个简单的代码在第一次尝试中工作正常但是当把它放在一个过程中时,错误显示:
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
Run Code Online (Sandbox Code Playgroud)
但是这会产生错误:
.model small
.stack 100h
.code
start:
mov ax,@data
mov ds,ax
mov es,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
Run Code Online (Sandbox Code Playgroud)
注意:Windows配置没有任何问题.我尝试过很多样本代码,但效果很好
谢谢
egr*_*nin 10
你遗漏了一个JMP:
call set_cursor
jmp EXIT ; <== you forgot this part
PROC set_cursor near
Run Code Online (Sandbox Code Playgroud)
发生了什么事情,之后call set_cursor,你然后进入proc并再次执行它,然后当你点击ret它时弹出堆栈然后你跳到,嗯,谁知道?
编辑:正如其他人所指出的那样,你最好PROC在你的主要代码结束后把它放在一边,而不是把它粘在中间并跳过它.但你可能已经想到了:)
| 归档时间: |
|
| 查看次数: |
3913 次 |
| 最近记录: |