Comment utiliser C définit dans les BRAS de l'assembleur

Comment puis-je utiliser externe définit comme LONG_MIN et LONG_MAX dans les BRAS du code assembleur?

Disons my_arm.h ressemble à ceci:

int my_arm(int foo);

Disons que j'ai un my_main.c comme suit:

...
#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));
...
}

Et my_arm.s ressemble à ceci:

  .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 seconde à la dernière ligne, je ne suis pas sûr de savoir comment charger correctement, je me souviens vaguement avoir lu quelque part, que je devais définir LONG_MAX .au niveau mondial, mais ne peut pas trouver le lien pour un exemple plus.

Je compile avec arm-linux-gnueabi-gcc version 4.3.2

==================

Mise à JOUR: Apprécier les suggestions! Malheureusement, je suis toujours avoir des problèmes avec la syntaxe.

Tout d'abord, j'ai fait un petit fichier d'en-tête mylimits.h (pour l'instant en même dir .S)

#define MY_LONG_MIN 0x80000000

dans my_arm.S j'ai ajouté ce qui suit:

...
.include "mylimits.h"
...
ldr r7, =MY_LONG_MIN @ when it was working it was ldr r7, =0x80000000
...

Deux problèmes avec cette approche.

D'abord le plus gros problème: le symbole MY_LONG_MIN n'est pas reconnu...donc, quelque chose est pas encore le droit

Deuxième: de la syntaxe .inclure ne me laisse pas inclure <limits.h>, je dois ajouter que dans mylimits.h, semble un peu encombrants, mais je suppose que c'est ok 🙂

Les pointeurs?

J'ai accès à Système de BRAS Guide du Développeur de la Conception et de l'Optimisation de Système Logiciel[2004] et de l'Architecture ARM
Manuel de référence[2000], mon objectif est XScale-IXP42x Famille rev 2 (v5l).

Ne sais pas sur les BRAS, mais si vous en mips, en renommant l'extension du .S fait C prétraiter le fichier.
utiliser #include pas .comprendre, et .S pas .s, comme il est dit dans la réponse. De cette façon, vous exploiter un gcc fonctionnalité, et tout devrait aller comme pour mes tests en x86, en dehors de l'assemblée qui est évidemment différent

OriginalL'auteur Sint | 2010-06-19