ARM Assembler Codes - Hilfe nötig

OP #1083717
Hallo,

könnte mir einer von euch "Assembler-Gurus" folgende Zeilen kurz 
übersetzen?
Ich benötige nur eine kurze Beschreibung, was genau wie passiert.

push {,lr}
add sp,-#0008
add r3,sp,#0004
lsl r3,r3,#18
ldr r1,[r3,#08]

Vielen Dank schon mal im voraus!

Erol
Gast #1083753
push {,lr}      Link Register auf den Stack legen
add sp,-#0008    sp = sp - 8
add r3,sp,#0004  r3 = sp + 4
lsl r3,r3,#18    r3 = r3 << 18
ldr r1,[r3,#08]  r1 = *(r3 + 8)

Was die Zeilen genau machen kann man natürlich so aus dem Zusammenhang 
herraus gerissen nicht sagen. Sieht für mich wie der Anfang einer 
Funktion aus (wegen dem push lr).
OP #1084291
Vielen Dank Noname,

eine Frage habe ich noch: lsl r3,r3,#18    r3 = r3 << 18
da gehts doch um einen links-shift. wie ist 18 gemeint (Bit, Byte)?

Wenn ich mir meine Register anschaue, dann wird mein Wert um genau
6 Stellen nach links verschoben. (1 Stelle = 4 Bit)

Danke noch einmal.

Erol
Gast #1084322
lsl = logical shift left

Die 18 gibt die Stellen an, um die geshiftet wird.

"Wenn ich mir meine Register anschaue, dann wird mein Wert um genau
6 Stellen nach links verschoben. (1 Stelle = 4 Bit)"


Sicher? kann eigentlich so nicht sein. Mit einer Stelle meinst du wohl 
eine Ziffer der hexadezimalen Darstellung. 18 Bit wären aber 4 1/2 
Stellen quasi.

Wenn in deinem 32 Bit Register ne 0x00000001 stand, steht halt nach dem 
lsl eine 0x00040000 drin. Das lsl kannst du dir auch vorstellen als 
Multiplikation mit 2^18.
OP #1084340
> "Wenn ich mir meine Register anschaue, dann wird mein Wert um genau
> 6 Stellen nach links verschoben. (1 Stelle = 4 Bit)"
>
>
> Sicher? kann eigentlich so nicht sein. Mit einer Stelle meinst du wohl
> eine Ziffer der hexadezimalen Darstellung. 18 Bit wären aber 4 1/2
> Stellen quasi.
>
Sicher bin ich mir nicht, aber ich denke, dass das so ist.

> Wenn in deinem 32 Bit Register ne 0x00000001 stand, steht halt nach dem
> lsl eine 0x00040000 drin. Das lsl kannst du dir auch vorstellen als
> Multiplikation mit 2^18.

Ich habe dir zwei Bilder mitgeschickt. Da kannst du dann sehen, was ich 
meine. Ich hoffe, dass das dich weier bringt.

Erol
Angehängte Dateien:
Persönliche Seite #1084863
Noname wrote:
> push {,lr}      Link Register auf den Stack legen
> add sp,-#0008    sp = sp - 8
> add r3,sp,#0004  r3 = sp + 4
> lsl r3,r3,#18    r3 = r3 << 18
> ldr r1,[r3,#08]  r1 = *(r3 + 8)
>
> Was die Zeilen genau machen kann man natürlich so aus dem Zusammenhang
> herraus gerissen nicht sagen.

Ein bisschen mehr Kontext wäre schön. Das sieht ja sehr bizarr aus. In 
Worte gefasst:

1. Link Register auf den Stack legen
2. Zwei leere Plätze auf dem Stack belegen (allokieren ;)
3. r3 auf den ersten der beiden leeren Plätze zeigen lassen.
4. Das LSB von r3 verwenden, um eine 32MB page zu adressieren.
5. Das dritte Wort aus der gewählten page in r1 laden.

Gruß
Marcus
http://www.doulos.com/arm

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.