¿Cuál es la diferencia entre “ldr pc, _boot” y “b _boot”?
Estaba examinando una tabla de vectores para el ARM Cortex A9 y me encontré con dos tipos de instrucciones:
B _boot
y
LDR PC, _boot
Alguien puede explicarme la diferencia entre usar B o LDR? Ambos códigos deberían hacer lo mismo, pero aparentemente debe haber una diferencia. Tiene que ver algo con el registro de enlace?
¡Gracias por tu tiempo!
davy.ai
Diferencia entre B y LDR
En ARM Cortex A9, B y LDR son dos tipos diferentes de instrucciones utilizadas para saltar a una parte diferente del código.
B
B es una instrucción que realiza una rama incondicional a una ubicación especificada. En el caso de la tabla de vectores, salta a la dirección de “boot”. Cuando se utiliza B, el contador de programa (PC) se altera a la dirección especificada en la instrucción.
LDR
LDR es una instrucción de carga utilizada para cargar datos de la memoria en un registro. En el caso de la tabla de vectores, carga la dirección de “boot” en el contador de programa (PC). Esto se conoce comúnmente como una rama indirecta o una rama a través de un registro.
Registro de enlace
El registro de enlace (LR) es un registro utilizado para almacenar la dirección de retorno de una llamada a función. En el caso de una instrucción de rama, el PC se altera y no se utiliza el LR. Sin embargo, en el caso de LDR, se utiliza el LR para almacenar la dirección de retorno para que el programa pueda regresar a la ubicación correcta después de la rama.
En general, tanto B como LDR pueden utilizarse para lograr el mismo resultado en algunos casos, pero existen diferencias en cómo alteran el PC y utilizan el LR.