es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Operaciones con R14 (LR) en ARM Keil

Tengo un problema al usar el ensamblador en Keil uVision ARM.
Intento establecer el valor del registro R14 con este código en ensamblador en línea:

__asm {
MOV R14, #Loop;
}

Pero el compilador dice que el símbolo “R14” está indefinido. Cuando escribo el mismo código en un archivo .s, el compilador dice que solo puedo utilizar los registros R0-R7 en la instrucción MOV.
¿Por qué sucede esto? Hay 4 bits en la instrucción MOV para seleccionar un registro, lo que significa que puedo seleccionar cualquiera de los 16 registros para MOV, ADD, SUB, etc. ¿Por qué el compilador prohíbe R14?

Gracias, disculpa por mi inglés.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en ensamblador, ARM, ensamblado en línea y Keil, puedo proporcionar una solución al problema al que te enfrentas.

    En la arquitectura ARM, R14 es el registro de enlace, lo que significa que se utiliza para almacenar la dirección de retorno cuando se llama a una subrutina. Por lo tanto, utilizar R14 directamente en tu código puede causar un comportamiento inesperado y potencialmente corromper tu programa.

    En su lugar, debes utilizar las macros incorporadas proporcionadas por el compilador ARM para manipular el registro de enlace. Por ejemplo, puedes guardar el valor actual de R14 en la pila con la instrucción “PUSH {LR}” y restaurarlo más tarde con “POP {PC}”.

    Alternativamente, si realmente necesitas establecer R14 en un valor específico, puedes utilizar un registro diferente para almacenar la dirección de retorno y manipular manualmente el puntero de pila (R13) para simular una llamada a subrutina. Sin embargo, este proceso puede ser complejo y propenso a errores, y solo debe hacerse como último recurso.

    En cuanto a la limitación de la instrucción MOV en el archivo .s, esto depende del ensamblador específico y el procesador al que apuntes. Algunos procesadores pueden permitirte utilizar los 16 registros en MOV y otras instrucciones, mientras que otros pueden tener un soporte más limitado. Es importante consultar la documentación de tu entorno específico para comprender las capacidades y limitaciones del ensamblador y el procesador.

Comments are closed.