arm asm nach C ist das korrekt

Gast #3379025
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
heinz schrieb:

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

6 als Byte?

Warum nimmst du dann nicht einfach einen unsigned char Pointer? Dann 
brauchst du da auch nicht groß rumrechnen, basierend auf der sizeof 
eines int?

1
unsigned char* Ptr = (unsigned char*)124;
2

3
  *Ptr = 6;
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
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.