¿Cómo puedo usar definiciones externas como LONG_MIN y LONG_MAX en el código ensamblador ARM?Cómo usar C define en el ensamblador ARM
Digamos my_arm.h se parece a esto:
int my_arm(int foo);
Digamos que tengo un my_main.c de la siguiente manera:
...
#include <limits.h>
#include "my_arm.h"
...
int main (int argc, char *argv[])
{
int foo=0;
...
printf("My arm assembler function returns (%d)\n", my_arm(foo));
...
}
Y my_arm.s se parece a esto:
.text
.align 2
.global my_arm
.type my_arm, %function
my_arm:
...
ADDS r1, r1, r2
BVS overflow
...
overflow:
LDR r0, LONG_MAX @ this is probably wrong, how to do it correctly?
BX lr @ return with max value
La penúltima línea, no estoy seguro de cómo cargar correctamente, recuerdo vagamente haber leído en alguna parte, que tenía que definir LONG_MAX en .global, pero ya no puede encontrar el enlace a un ejemplo de trabajo.
Estoy compilando con la actualización del brazo-linux-gcc-gnueabi versión 4.3.2
==================
: Apreciar las sugerencias ! Lamentablemente, sigo teniendo problemas con la sintaxis.
En primer lugar, me hizo un poco mylimits.h archivo de cabecera (por ahora en el mismo directorio que .S)
#define MY_LONG_MIN 0x80000000
en my_arm.S i añade lo siguiente:
...
.include "mylimits.h"
...
ldr r7, =MY_LONG_MIN @ when it was working it was ldr r7, =0x80000000
...
dos problemas con este enfoque.
En primer lugar, el mayor problema: la MY_LONG_MIN símbolo no es reconocida ... así que algo no está bien es todavía
Segundo: sintaxis para .include no me deja incluir <limits.h>
, tendría que añadir que en mylimits. h, parece un poco kludgy, pero supongo que está bien :)
¿Alguna sugerencia?
Tengo acceso a la Guía del Desarrollador del Sistema ARM Diseño y Optimización del Software del Sistema [2004] y Arquitectura ARM Manual de referencia [2000], mi objetivo es XScale-IXP42x Familia rev 2 (v5l) embargo.
No sé sobre ARM, pero si en MIPS, cambiando el nombre a la extensión a .S hace C procesar previamente el archivo. – Tom
use #include not .include, and .S not .s, como se dice en la respuesta. De esta manera explotarás una característica de gcc, y todo debe ir como para mis pruebas en x86, aparte de ensamblar que es diferente – ShinTakezou