【问题标题】:Calling a table of function using repeat blocks or macros in GNU assembly在 GNU 汇编中使用重复块或宏调用函数表
【发布时间】:2015-06-10 18:16:04
【问题描述】:

如果我想生成如下所示的代码:

CALL FUNC0
CALL FUNC1
CALL FUNC2
CALL FUNC3
CALL FUNC4
CALL FUNC5
...
CALL FUNC19

如何使用重复块生成这样的代码,使用类似于下面的代码:

.equ SYMBOL, 0
.rept 20
   CALL FUNC(SMYBOL)
   .equ SYMBOL, (SYMBOL+1)
.endr

宏也不错。

我也想知道如何在 C 中做到这一点。

【问题讨论】:

    标签: c assembly macros gnu-assembler


    【解决方案1】:

    您可以使用宏来执行此操作:

    .altmacro
    .macro call_funcs count
        .if \count
            call_funcs %(count-1)
        .endif
        CALL    FUNC\count
    .endm
    
    call_funcs 20
    

    .altmacro 指令允许使用% 在作为宏参数递归传递之前评估count - 1。否则你会得到 CALL FUNC20-1-1-1-1 这不是你想要的。

    据我所知,在 C 中没有你想要的方法。为此,我会编写一个程序来生成你需要的 C 代码。

    【讨论】:

    • 谢谢。我发现另一种方法是使用.irp,尽管我必须像这样实际编写我想要生成的每个值:.irp 0, 1, 2, ...。这对我正在做的事情来说已经足够好了。
    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2013-11-14
    • 2022-10-15
    • 2017-01-04
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多