Ich glaube nicht, dass Sie dies ohne Makros oder eine andere Art der Vorverarbeitung lösen können. Der GNU Assembler Methode, dies zu tun könnte ungefähr so aussehen:
.altmacro
.macro addmac val
add rcx, [a\val]
.endm
.macro loopmac
i=0
.rept 3
addmac %(i*2+1)
i=i+1
.endr
.endm
Sie dann die loopmac
Makro wie folgt verwenden:
loopmac
Sie finden die .altmacro Richtlinie müssen in der Lage sein %(i*2+1)
richtig zu verarbeiten:
7,4 .altmacro
Sie können schreiben '% Expr', um den Ausdruck ausdruck auszuwerten und das Ergebnis als String zu verwenden.
Anstatt .rept
verwenden könnten Sie .irp
verwenden und das Makro vereinfachen:
.macro loopmac
.irp i,1,3,5
add rcx, [a\i]
.endr
.endm
Das letzte Beispiel benötigt keine .altmacro
Verarbeitung.
Bauen Sie Ihre ASM mit gcc? Wenn dies der Fall ist, können Sie auch den C-Präprozessor mit einem CPP-Makro verwenden, um zwei Argumente zusammenzufügen. Außer das funktioniert nicht, wenn es passiert, bevor 'gas' das' .rept' sieht. Hmm. –
Ich glaube nicht, dass es möglich ist, ohne Makros zu arbeiten. –
Ich wäre neugierig, warum Sie keine Makros verwenden können? –