从程序集x86中的JMP返回?

时间:2009-10-19 20:22:41

标签: assembly

我正在调用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

我的问题很简单,如何从FOO返回MAIN中调用TESTIT的点。我不想从FOO到MAIN执行JMP,因为这将再次调用TESTIT。 当我尝试将RET放在FOO的末尾时,命令窗口会卡住一个闪烁的光标。

注意:我知道这可以使用伪操作.IF ... .ENDIF而不是JG来实现,但我想尝试在没有伪操作的情况下实现相同的结果,这在后台做了一些魔术我不知道如何手动实现。

1 个答案:

答案 0 :(得分:8)

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
相关问题