大会中的非法指导

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在你的主要代码结束后把它放在一边,而不是把它粘在中间并跳过它.但你可能已经想到了:)