在令牌上编写循环循环

时间:2018-09-18 17:16:49

标签: assembly x86 nasm

我想基于N个令牌的列表编写一个nasm循环,其中一些变量依次获取每个令牌的值。

类似的东西:

%for reg in {rax, rbx, rcx, rdx, rsi, rdi}
push reg
%endfor

要生成:

push rax
push rbx
...
push rdi

当然,%for实际上并不存在:它只是一个伪造的伪指令,显示了我想要的东西。有什么方法可以相对优雅地做到这一点吗?

1 个答案:

答案 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

语言中的