mikrocontroller.net

Forum: Compiler & IDEs ARM Assembler Codes - Hilfe nötig


Autor: Erol Sengül (supere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Erol Sengül (supere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Erol Sengül (supere)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> "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

Autor: Erol Sengül (supere)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Noname,

ich habe die Lösung herausgefunden! Endlich.
Bei dem Wert 18 handelt es sich um einen Hex-Wert.
In Dezimal ausgedrückt dann: 24.

Daher die "weitere" Verschiebung.

Gruß

Erol

Autor: Noname (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja klar... war wohl eben für mich auch noch zu früh am morgen... ;-)

Autor: Marcus Harnisch (mharnisch) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.