arm asm nach C ist das korrekt

Gast #3379025
Lesenswert?

Hallo,
ich habe da ein Problem in C

was ich will in x86
mov ebx,124
mov eax,6
mov [ebx],eax

in Arm asm ?
ldr r0,#124
ldr r1,6
str r1,[r0]

jetzt in C
volatile unsigned int *base; // beide global
volatile  unsigned int c;

Codefragment
base = (unsigned int*) 0;
c = 6;
base[31] = c;

Compiler ist Arm gcc
Meine Frage ist ob das C Stück das macht was ich will
schreibe 6 in Adresse 124?

Gruss
Heinz
#3379073
Lesenswert?

Markus Weber schrieb:
> Karl Heinz schrieb:
>> 6 als Byte?
>
> Ich vermute, er will tatsächlich ein int32_t abspeichern, weil er bei
> x86 die Extended-Register verwendet.

Kann sein. Da kenn ich die x86 zu wenig

>
>
1
> *(int32_t*)31= 6;
2
>

Selbst dann würde ich das so schreiben
1
  unsigned char* Ptr = (unsigned char*)124;
2

3
  *(int32_t*)Ptr = 6;

die 124 als tatsächliche Adresse wären mir zu wichtig, als dass ich sie 
der implizten Division durch 4, durch Angabe von 31, opfern würde. Da 
sehe ich im Cast das kleinere Übel, zumal man den ja auch mittels Makro 
noch verstecken kann.
Gast #3379087
Lesenswert?

Die 6 war nur irgendwas, abspeichern möchte ich 32Bit.

Frage ist ob C und asm äquivalent sind.
Ich bin auf ARM absoluter Anfänger. Jetzt versuch ich ein Beispiel 
nachzuvollziehen mit einem Aufruf von einer Routine in asm

asm
PUT32:
    str r1,[r0]
    bx lr

C
PUT32(124,6);

ersetzt durch
base[31] = 6;

der Dump sieht für mich (wie gesagt Anfänger) korrekt aus.
Aber die Programmfunktion ist hinüber

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren