Makros in Assembler: Unterschied zwischen den Versionen
Aus C und Assembler mit Raspberry
Die Seite wurde neu angelegt: „== Makros == .macro Name übergabe1,übergabe2,... Beispiel: .macro speicher wert1,wert2 ldr x0,=\wert1 ldr x1,=\wert2 .endm .global _start _start: speicher buffer1,buffer2 ... .data buffer1: .fill 255,1,0 buffer2: .fill 255,1,0 Beim Aufruf "speicher" wird an dieser Stelle des Codes einfach das Makro eingesetzt. Das definieren des Makros erzeugt keinen Code!“ |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 16: | Zeile 16: | ||
Beim Aufruf "speicher" wird an dieser Stelle des Codes einfach das Makro eingesetzt. Das definieren des Makros erzeugt keinen Code! | Beim Aufruf "speicher" wird an dieser Stelle des Codes einfach das Makro eingesetzt. Das definieren des Makros erzeugt keinen Code! | ||
== Labels in Makros == | |||
Problematisch wird es, wenn in einem Makro Labels definiert wurden. Wird das Makro zweimal verwendet, so wird der Assembler melden, dass die Labels doppelt vergeben wurden. Dies ist nicht erlaubt. Alternativ, was der Assembler erlaubt, sind Zahlen als Label, die auch mehrfach verwendet werden können. Um auf die richtigen Labels zu zeigen, wird bei der Sprunganweisung einfach der Zahl "f" angehängt, wenn das Label nach diesem Sprung angesprochen werden soll. Ein "b", wenn das Label zuvor angesprochen werden soll. | |||
== Praktische Makros == | |||
.macro push1 register | |||
str \register,[sp,#-16]! | |||
.endm | |||
.macro push2 register1,register2 | |||
stp \register1,\register2,[sp,#-16]! | |||
.endm | |||
.macro pop1 register | |||
ldr \register,[sp],#16 | |||
.endm | |||
.macro pop2 register1,register2 | |||
ldp \register1,\register2,[sp],#16 | |||
.endm | |||
Version vom 8. April 2025, 08:50 Uhr
Makros
.macro Name übergabe1,übergabe2,...
Beispiel:
.macro speicher wert1,wert2 ldr x0,=\wert1 ldr x1,=\wert2 .endm
.global _start _start: speicher buffer1,buffer2 ... .data buffer1: .fill 255,1,0 buffer2: .fill 255,1,0
Beim Aufruf "speicher" wird an dieser Stelle des Codes einfach das Makro eingesetzt. Das definieren des Makros erzeugt keinen Code!
Labels in Makros
Problematisch wird es, wenn in einem Makro Labels definiert wurden. Wird das Makro zweimal verwendet, so wird der Assembler melden, dass die Labels doppelt vergeben wurden. Dies ist nicht erlaubt. Alternativ, was der Assembler erlaubt, sind Zahlen als Label, die auch mehrfach verwendet werden können. Um auf die richtigen Labels zu zeigen, wird bei der Sprunganweisung einfach der Zahl "f" angehängt, wenn das Label nach diesem Sprung angesprochen werden soll. Ein "b", wenn das Label zuvor angesprochen werden soll.
Praktische Makros
.macro push1 register str \register,[sp,#-16]! .endm .macro push2 register1,register2 stp \register1,\register2,[sp,#-16]! .endm .macro pop1 register ldr \register,[sp],#16 .endm .macro pop2 register1,register2 ldp \register1,\register2,[sp],#16 .endm