我想这样做:
i=0
.rept 3
add rcx,[a?(i*2+1)]
i=i+1
.endr
它应输出:
add rcx,[a1]
add rcx,[a3]
add rcx,[a5]
我无法找到解决此问题的方法。我不希望它在宏定义中。
答案 0 :(得分:2)
我不相信你可以在不使用宏或其他类型的预处理的情况下解决这个问题。执行此操作的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
您可以编写'%expr'来计算表达式expr并将结果用作字符串。
您可以使用.rept
并将宏简化为:
.irp
.macro loopmac
.irp i,1,3,5
add rcx, [a\i]
.endr
.endm
最后一个示例不需要.altmacro
处理。