【发布时间】:2009-10-19 20:22:41
【问题描述】:
我正在调用一个 PROC 来测试汇编 x86 16 位中的两个值,然后如果该值大于零则跳转,所以我正在做这样的事情:
TESTIT PROC
CMP AX,1
JG FOO
RET
TESTIT ENDP
FOO:
;do something
END FOO
MAIN:
CALL TESTIT
.EXIT
END MAIN
END
我的问题很简单,我如何从 FOO 返回到 MAIN 中称为 TESTIT 的点。我不想执行从 FOO 到 MAIN 的 JMP,因为这将再次调用 TESTIT。 当我尝试将 RET 放在 FOO 的末尾时,命令窗口卡在闪烁的光标上。
注意:我知道这可以使用伪操作 .IF ... .ENDIF 而不是 JG 来实现,但我想尝试在不使用伪操作的情况下实现相同的结果,它在后台有一些魔力我不知道如何实现手动。
【问题讨论】:
-
相关:What if there is no return statement in a CALLed block of code in assembly programs 是相反的问题,但答案说明标签并不特殊,
ret只是pop eip,因此它需要指向返回地址的堆栈。 (jcc不会推送)。