Написание петли носа над жетонами - PullRequest
0 голосов
/ 18 сентября 2018

Я хотел бы написать петлю назма, основанную на списке из N токенов, где некоторая переменная принимает значение каждого токена по очереди.

Что-то вроде:

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

Togenerate:

push rax
push rbx
...
push rdi

Конечно, %for на самом деле не существует: это просто выдуманная псевдо-директива, показывающая, что я хочу.Есть ли способ сделать это относительно элегантно?

1 Ответ

0 голосов
/ 19 сентября 2018

Я столкнулся с подобной задачей в 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

...