如何连接不在宏定义中的标签? (在 GAS 汇编程序中)
How can I concatenate a label not in a macro definition? (in GAS assembler)
我想这样做:
i=0
.rept 3
add rcx,[a?(i*2+1)]
i=i+1
.endr
它应该输出这个:
add rcx,[a1]
add rcx,[a3]
add rcx,[a5]
我找不到解决这个问题的方法。我不希望它在宏定义中。
我认为不使用宏或其他类型的预处理就无法解决此问题。执行此操作的 GNU 汇编器方法可能类似于:
.altmacro
.macro addmac val
add rcx, [a\val]
.endm
.macro loopmac
i=0
.rept 3
addmac %(i*2+1)
i=i+1
.endr
.endm
然后您可以像这样使用 loopmac
宏:
loopmac
您需要 .altmacro 指令才能正确处理 %(i*2+1)
:
7.4 .altmacro
You can write ‘%expr’ to evaluate the expression expr and use the result as a string.
而不是使用 .rept
you could use .irp
并将宏简化为:
.macro loopmac
.irp i,1,3,5
add rcx, [a\i]
.endr
.endm
最后一个例子不需要.altmacro
处理。
我想这样做:
i=0
.rept 3
add rcx,[a?(i*2+1)]
i=i+1
.endr
它应该输出这个:
add rcx,[a1]
add rcx,[a3]
add rcx,[a5]
我找不到解决这个问题的方法。我不希望它在宏定义中。
我认为不使用宏或其他类型的预处理就无法解决此问题。执行此操作的 GNU 汇编器方法可能类似于:
.altmacro
.macro addmac val
add rcx, [a\val]
.endm
.macro loopmac
i=0
.rept 3
addmac %(i*2+1)
i=i+1
.endr
.endm
然后您可以像这样使用 loopmac
宏:
loopmac
您需要 .altmacro 指令才能正确处理 %(i*2+1)
:
7.4 .altmacro
You can write ‘%expr’ to evaluate the expression expr and use the result as a string.
而不是使用 .rept
you could use .irp
并将宏简化为:
.macro loopmac
.irp i,1,3,5
add rcx, [a\i]
.endr
.endm
最后一个例子不需要.altmacro
处理。