Subrotinas

Propaganda
Arquitetura ARM
Subrotinas
Subrotinas
 Implementar uma sub-rotina requer dois passos:
1.
2.
Armazenar o endereço de retorno.
Desviar a execução para o endereço da sub-rotina.
 Quem executa esses dois passos: instrução BL label
• Armazena endereço de retorno em LR (R14).
• A execução é desviada para a posição de memória identificada por
“label”.
 O retorno da sub-rotina se dá pela instrução BX LR, a qual carrega
no registrador PC o conteúdo de LR.
Problema!
Onde?
Subrotinas
ENDEREÇO DE RETORNO DA
SUBROTINA!
11
MOV R1,R2
20
SUB1: ...
40
SUB2: ...
12
BL SUB1
21
BL SUB2
41
...
13
...
22
...
42
BX LR
23
BX LR
43
14
Como
solucionar?
R14(LR)
13
22
Por exemplo,
uso da Pilha!
Subrotinas
Por Registradores
Não altera
o conteúdo
da memória
Por valor
Passagem de
Parâmetros
Como os dados são
enviados para a
subrotina?
Por Referência
Por Pilha
Altera o
conteúdo da
memória
Subrotinas
Para que a passagem de parâmetros efetivamente ocorra, é
possível recorrer a pseudo-instruções.
Pseudoinstruções
São instruções simbólicas, não executáveis, que auxiliam o
montador a determinar o conteúdo da memória ao instalar
o programa Assembly.
x: .word 5000
LDR R2, =x
LDR R1,[R2]
Cria uma palavra na memória
cujo conteúdo é 5000
Armazena o endereço
palavra “x” em R2
da
Armazena o valor de x em R1
Subrotinas
Passagem de Parâmetros
Por Referência
Por valor
- É passado o endereço de
memória que contém o dado.
- É passado o dado da
memória.
x: .word 5000
LDR R2, =x
x: .word 5000
LDR R2, =x
LDR R3, [R2]
Subrotinas
Passagem de Parâmetros
Por Registrador
Exemplo: Subrotina que faz uma soma
x: .word 5000
y: .word 0
LDR R0, =x
LDR R1, =y
LDR R0, [R0]
BL SOMA
STR R0, [R1]
SOMA: ADD R0, R0, #1
BX LR
Subrotinas
Passagem de Parâmetros
Por Pilha
Dados são passados do programa para sub-rotina e
vice-versa através da pilha
Mas como é a pilha no ARM?
Desafio
Download