我正在调用PROC来测试程序集x86 16bits中的两个值,然后如果值大于零则跳转,所以我做的是这样的:
TESTIT PROC
CMP AX,1
JG FOO
RET
TESTIT ENDP
FOO:
;do something
END FOO
MAIN:
CALL TESTIT
.EXIT
END MAIN
END
Run Code Online (Sandbox Code Playgroud)
我的问题很简单,我如何从FOO返回到MAIN中调用TESTIT的点.我不想从FOO到MAIN执行JMP,因为这将再次调用TESTIT.当我尝试将RET放在FOO的末尾时,命令窗口会被闪烁的光标卡住.
注意:我知道这可以使用伪操作.IF ... .ENDIF而不是JG来实现,但是我想尝试在没有伪操作的情况下实现相同的结果,这在后台做了一些魔术,我不知道如何手动实现.
需要将FOO称为子例程.为此,反转跳转的逻辑,并使用CALL指令调用FOO.在FOO例程的末尾放置RET指令.
TESTIT PROC
CMP AX,1
JLE BAR
CALL FOO
BAR:
RET
TESTIT ENDP
FOO:
;do something
RET
END FOO
MAIN:
CALL TESTIT
.EXIT
END MAIN
END
Run Code Online (Sandbox Code Playgroud)