Makroer og procedurer er begge måder at skabe genbrugelig kode på i assemblersprog. Der er dog nogle vigtige forskelle mellem de to.
Makroer
* Er tekstbaserede
* Udbygges af montøren før montageprocessen begynder
* Kan bruges til at definere konstanter, etiketter og instruktioner
* Kan ikke bruges til at skabe kontrolstrukturer (såsom sløjfer og grene)
Procedurer
* Er binært-baserede
* Er gemt i den eksekverbare fil
* Kan kaldes fra andre dele af programmet
* Kan bruges til at skabe kontrolstrukturer
Generelt er makroer mere effektive end procedurer, fordi de ikke kræver yderligere maskininstruktioner. Makroer kan dog være svære at fejlfinde, fordi de ikke er synlige i assembly-koden. Procedurer er nemmere at fejlfinde, fordi de kan trædes igennem i debuggeren.
Her er et eksempel på en makro i assemblersprog:
```
.macro inc(r)
addi r, r, 1
.endm
```
Denne makro øger værdien i registeret "r". Det bruges som følger:
```
inc r1; Forøg værdien i r1
```
Her er et eksempel på en procedure i assemblersprog:
```
ink:
tilføj r1, r1, #1; Forøg værdien i r1
bx lr; Retur fra proceduren
```
Denne procedure øger værdien i registret `r1` og vender derefter tilbage til den, der ringer. Det hedder som følger:
```
bl inc; Ring til inc-proceduren
```