如何连接不在宏定义中的标签? (在GAS汇编程序中)

时间:2017-11-08 17:12:24

标签: assembly 64-bit gas

我想这样做:

i=0
.rept 3
    add rcx,[a?(i*2+1)]
    i=i+1
.endr

它应输出:

add rcx,[a1]
add rcx,[a3]
add rcx,[a5]

我无法找到解决此问题的方法。我不希望它在宏定义中。

1 个答案:

答案 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处理。