我想基于N个令牌的列表编写一个nasm循环,其中一些变量依次获取每个令牌的值。
类似的东西:
%for reg in {rax, rbx, rcx, rdx, rsi, rdi}
push reg
%endfor
要生成:
push rax
push rbx
...
push rdi
当然,%for
实际上并不存在:它只是一个伪造的伪指令,显示了我想要的东西。有什么方法可以相对优雅地做到这一点吗?
答案 0 :(得分:1)
我在NASM中也遇到过类似的任务,现在我在19岁的宏库中找到了它:
; PUSH multiple operands
%MACRO PUSH 1-*
%REP %0
PUSH %1
%ROTATE 1
%ENDREP
%ENDMACRO
€ASM可以实现您上面引用的几乎相同的语法:
reg %for rax, rbx, rcx, rdx, rsi, rdi
push %reg
%endfor
但是在PUSH / POP的情况下,使用宏实现多个操作数不是必需的 因为它是内置于https://euroassembler.eu/eadoc/#InsEnhMultipleOperands
语言中的