Makron och procedurer är båda sätten att skapa återanvändbar kod i assemblerspråk. Det finns dock några viktiga skillnader mellan de två.
Makron
* Är textbaserade
* Utvidgas av montören innan monteringsprocessen börjar
* Kan användas för att definiera konstanter, etiketter och instruktioner
* Kan inte användas för att skapa kontrollstrukturer (som slingor och grenar)
Procedurer
* Är binärbaserade
* Lagras i den körbara filen
* Kan ringas från andra delar av programmet
* Kan användas för att skapa kontrollstrukturer
I allmänhet är makron mer effektiva än procedurer eftersom de inte kräver några ytterligare maskininstruktioner. Makron kan dock vara svåra att felsöka eftersom de inte syns i assemblerkoden. Procedurerna är lättare att felsöka eftersom de kan stegas igenom i felsökaren.
Här är ett exempel på ett makro i assemblerspråk:
```
.macro inc(r)
addi r, r, 1
.endm
```
Detta makro ökar värdet i registret `r`. Den används enligt följande:
```
ink r1; Öka värdet i r1
```
Här är ett exempel på en procedur på assemblerspråk:
```
inkl:
lägg till r1, r1, #1; Öka värdet i r1
bx lr; Återgå från proceduren
```
Denna procedur ökar värdet i registret `r1` och återgår sedan till den som ringer. Den heter så här:
```
bl ink; Ring inc-proceduren
```