Makroer og prosedyrer er begge måter å lage gjenbrukbar kode på i assemblerspråk. Det er imidlertid noen viktige forskjeller mellom de to.
Makroer
* Er tekstbasert
* Utvides av montøren før monteringsprosessen starter
* Kan brukes til å definere konstanter, etiketter og instruksjoner
* Kan ikke brukes til å lage kontrollstrukturer (som løkker og grener)
Prosedyrer
* Er binærbasert
* Lagres i den kjørbare filen
* Kan ringes fra andre deler av programmet
* Kan brukes til å lage kontrollstrukturer
Generelt er makroer mer effektive enn prosedyrer fordi de ikke krever noen ekstra maskininstruksjoner. Makroer kan imidlertid være vanskelige å feilsøke fordi de ikke er synlige i monteringskoden. Prosedyrer er lettere å feilsøke fordi de kan gås gjennom i feilsøkeren.
Her er et eksempel på en makro i assemblerspråk:
```
.macro inc(r)
addi r, r, 1
.endm
```
Denne makroen øker verdien i registeret `r`. Den brukes som følger:
```
ink r1; Øk verdien i r1
```
Her er et eksempel på en prosedyre på assemblerspråk:
```
ink:
legg til r1, r1, #1; Øk verdien i r1
bx lr; Gå tilbake fra prosedyren
```
Denne prosedyren øker verdien i registeret `r1` og går deretter tilbake til den som ringer. Det heter som følger:
```
bl ink; Ring inc-prosedyren
```