Macros e procedimentos são maneiras de criar código reutilizável em linguagem assembly. No entanto, existem algumas diferenças importantes entre os dois.
Macros * São baseados em texto
* São ampliados pela montadora antes do início do processo de montagem
* Pode ser usado para definir constantes, rótulos e instruções
* Não pode ser usado para criar estruturas de controle (como loops e ramificações)
Procedimentos * São baseados em binário
* São armazenados no arquivo executável
*Pode ser chamado de outras partes do programa
* Pode ser usado para criar estruturas de controle
Em geral, as macros são mais eficientes que os procedimentos porque não requerem instruções de máquina adicionais. No entanto, as macros podem ser difíceis de depurar porque não são visíveis no código assembly. Os procedimentos são mais fáceis de depurar porque podem ser executados no depurador.
Aqui está um exemplo de macro em linguagem assembly:
```
.macro inc(r)
adicionar r, r, 1
.endm
```
Esta macro incrementa o valor no registro `r`. É usado da seguinte forma:
```
inc r1; Aumente o valor em r1
```
Aqui está um exemplo de procedimento em linguagem assembly:
```
inc:
adicione r1, r1, #1; Aumente o valor em r1
bxlr; Retorno do procedimento
```
Este procedimento incrementa o valor no registro `r1` e então retorna ao chamador. É chamado da seguinte forma:
```
bl inc; Chame o procedimento inc
```