Please enable JavaScript.
Coggle requires JavaScript to display documents.
Subrutina - Coggle Diagram
Subrutina
pila
Añadir datos (push)
PUSH r4
Sub SP,SP, #4
STR r4, [SP]
Extraer datos (pop)
POP r4
LDR r4,[SP]
ADD SP,SP,r4
Dirección del ultipo elemento (SP)
Uso de la pila
Almacena y recupera las direcciones de los registros
Almacena y recupera las direcciones de retorno para permitir anidamiento de la subrutina
Valores pasados como argumentos
Llamada de una subrutina
Entrar de la subrutina
BL etiqueta:
Almacena la dirección de la siguiente instrucción(PC+4)
LR
Salto condicional a la subrutina
Pon el PC al valor de la dirección de la primera instrucción de la subrutina
El valor en LR es la dirección de retorno
Salida de la subrutina
MOV PC,LR
Mete en el PC el valor de la dirección de retorno(guardado en LR)
Podría usarse BX LR
El valor de LR podría estar en la pila en este caso POP PC
Preservación del retorno de ejecución
Los registros r4-r11(se preservan )
Los registros r0-r3(se modifican)
Meter en la pila para preservar
Paso de variables
Por valor
Por referencia
Protocolo ARM para subrutinas
entradas
Hasta 2 argumentos de 64 bits(r0-r3) msb
Hasta 4 argumentos de 32 bits(r0-r3)
1 argumento de 128bits(r0-r3) msb
Cuando son mas de 4 argumentos de 32 bits se meten el resto en la pila
Funcionan como las funciones en C
La subrutina tiene que guardar el contenido de los registros que va a usar la pila
Al final de la subrutina, esta debe volver a meter el contenido a la pila
Se sigue el procedimiento estándar para recibir las entradas y devolver los resultados