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
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).
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
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.
> "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
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
Ja klar... war wohl eben für mich auch noch zu früh am morgen... ;-)
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.