De ARM® Developer Suite Assembler Guide
Guardando desde r15
En general, evite guardar desde r15 si es posible.
Si guarda desde r15, el valor guardado es la dirección del actual instrucción, más una constante definida por la implementación. La constante es Siempre lo mismo para un procesador en particular.
Si su código ensamblado podría usarse en diferentes procesadores, puede averigüe cuál es la constante en el tiempo de ejecución utilizando código como el siguiente:
SUB R1, PC, # 4; R1 = dirección de la siguiente instrucción STR
STR PC, [R0]; Dirección de la tienda de la instrucción STR + offset,
LDR R0, [R0]; luego recárgalo
SUB R0, R0, R1; Calcula el offset como la diferencia
Si su código se va a ensamblar para un procesador particular, el valor de la constante está disponible en armasm como {PCSTOREOFFSET}.