【问题标题】:return from a JMP in assembly x86?从汇编 x86 中的 JMP 返回?
【发布时间】: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 来实现,但我想尝试在不使用伪操作的情况下实现相同的结果,它在后台有一些魔力我不知道如何实现手动。

【问题讨论】:

标签: assembly x86


【解决方案1】:

FOO 需要作为子程序调用。为此,请反转跳转的逻辑,并使用 CALL 指令调用 FOO。将 RET 指令放在 FOO 例程的末尾。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多