Wie man C definiert, in ARM-assembler

Wie kann ich externe definiert, wie LONG_MIN und LONG_MAX in ARM-assembler-code?

Sagen wir mal my_arm.h sieht wie folgt aus:

int my_arm(int foo);

Sagen wir, ich habe eine my_main.c wie folgt:

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

Und my_arm.s sieht wie folgt aus:

  .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

Der zweiten bis letzten Zeile bin ich nicht sicher, wie Sie Sie richtig geladen, ich erinnere mich vage, irgendwo gelesen, dass ich hatte, um zu definieren, LONG_MAX in .global, aber nicht finden können, den link zu einem funktionierenden Beispiel mehr.

Ich bin die Kompilierung mit der arm-linux-gnueabi-gcc version 4.3.2

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

UPDATE: Schätzen die Anregungen! Leider bin ich noch Probleme mit dem syntax.

Erste, ich machte einen kleinen header-Datei mylimits.h (für jetzt im selben dir wie .S)

#define MY_LONG_MIN 0x80000000

in my_arm.S habe ich noch folgende:

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

Zwei Probleme mit diesem Ansatz.

Ersten das größte problem: das symbol MY_LONG_MIN wird nicht erkannt...so etwas ist noch nicht richtig

Zweitens: die syntax für .gehören nicht mir gehören <limits.h> hätte ich noch hinzufügen, dass in mylimits.h scheint ein wenig notdürftigem, aber ich nehme an, dass ist ok 🙂

Irgendwelche Hinweise?

Habe ich Zugriff auf die ARM System Developer ' s Guide-Designing and Optimizing System Software[2004] und ARM-Architektur
Referenz-Handbuch[2000], mein Ziel ist es, XScale-IXP42x Familie rev 2 (v5l) obwohl.

  • Weiß nicht, über ARM, aber wenn Sie in mips, durch umbenennen der Erweiterung .S macht C Vorverarbeiten der Datei.
  • verwenden Sie #include nicht .gehören, und .S nicht .s, wie gesagt, in der Antwort. Diese Möglichkeit auszuschöpfen, in dem man eine gcc-feature, und alles sollte gehen wie bei meinen tests in x86-assembly abgesehen, die ist natürlich anders
InformationsquelleAutor Sint | 2010-06-19
Schreibe einen Kommentar