¿Qué significa “A1114E: Se esperaba una expresión de registro relativa” en español?
Hola, estoy intentando llamar a una subrutina de ensamblador desde C y me sale este error. En la página web de Arm solo se menciona que existe este error.
Código en C:
#include <stdint.h>
extern void out_word(uint32_t out_address, uint32_t out_value);
extern uint32_t in_word(uint32_t in_address);
int main(void){
uint32_t value = in_word(0x60000200);
uint32_t address = 0x60000100;
out_word(address,value);
return (0);
}
Código en ensamblador:
PRESERVE8
AREA myCode, CODE, READONLY
EXPORT in<em>word
EXPORT out</em>word
in_word PUSH {R1-R7}
LDR R1, R0 ; línea que produce el problema
LDR R0, [R1]
POP {R1-R7}
BX LR
out_word STR R1, [R0]
BX LR
END
davy.ai
El mensaje de error específico no fue proporcionado, pero suponiendo que está relacionado con la línea “LDR R1, R0” en la subrutina “in_word”, es probable que el problema esté relacionado con el modo de direccionamiento que se está utilizando.
La instrucción “LDR” toma dos operandos, el primero es el registro en el que se cargará los datos (en este caso R1), y el segundo es la ubicación de memoria desde donde se cargará los datos (en este caso el contenido de R0).
Sin embargo, el modo específico de direccionamiento utilizado con R0 puede estar causando el error. No está claro qué valor contiene R0 en tiempo de ejecución, pero si es una dirección que no está alineada en palabra, provocaría una excepción de aborto de datos al intentar cargar una palabra desde esa dirección.
Para solucionar esto, asegúrese de que R0 contenga siempre una dirección alineada en palabra al llamar a la subrutina “in_word”.