在 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 代码。
如果我想生成如下所示的代码:
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 代码。