ARM Assembler Codes - Hilfe nötig

Gast #1083753
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).
OP #1084291
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
Gast #1084322
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.
OP #1084340
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
Angehängte Dateien:
Persönliche Seite #1084863
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

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