在 GNU 汇编中使用重复块或宏调用 table 个函数

Calling a table of function using repeat blocks or macros in GNU assembly

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

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 中执行此操作。

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

.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 代码。