Al comienzo del programa, la pseudo-instrucción ADR R14, cnt1
de ARM carga una dirección ( cnt1
- final de esta parte del programa) en un registro ( R14
). En la práctica, ADR
se reemplaza por una instrucción ADD
o SUB
que involucra el contenido de la PC ( R15
). El cálculo se basa en el desplazamiento entre la PC y la dirección en cuestión, teniendo en cuenta que el desplazamiento de la PC se debe a la operación de la tubería ARM. Es más fácil dejar que el ensamblador calcule las direcciones por ti. Si se cambia el código, las direcciones también, pero ADR
se encargarán de esto cuando se vuelvan a ensamblar.
La instrucción B sumi
es solo un salto incondicional a la dirección dada por sumi
(inicio de la subrutina).
Al final del ciclo, se ejecuta la instrucción MOV PC,R14
, lo que hace que la PC se cargue con el contenido (una dirección) del registro R14
. Recuerde que esta última fue modificada previamente por la instrucción ADR
. Entonces el programa continúa saltando a la dirección dada por la etiqueta cnt1
.
Cuando se programan las subrutinas en ensamblaje, generalmente se emplea una combinación de las instrucciones de salto B
y BL
; esta última (rama y enlace) ya almacena la dirección de retorno en R14
(LR - registro de enlace).