Forum: Offtopic ARM Assembler feat. Geocaching


von Max B. (bellaou)


Lesenswert?

Hallo lieber Gemeinde,

langsam bin ich etwas ratlos. Ich hänge an einem Assemblercode welcher 
laut des Erstellers doch recht einfach sein soll 
(Grundschulrechenoperationen).

movs r0, #5
movs r1, #3
mov r2, r1
lsls r2, r2, #1
mov r4, r2
mul r3, r4, r2
mul r6, r1, r0
add r6, r6, r3
asrs r4, r3, #1
subs r8, r4, r0
subs r4, r8, r1
mul r5, r4, r6
movs r1, #1
movs r0, #65 ; 0x41
movs r0, #82 ; 0x52
movs r0, #77 ; 0x4d
subs r7, r5, r2
subs r7, r7, r1
mul r4, r4, r2
add r4, r4, r8
mul r9, r4, r5
add r9, r9, r3
lsls r1, r1, #1
add r9, r9, r1

Vielleicht könnt ihr mir ja etwas weiterhelfen. Würde mich über eure 
Unterstützung freuen, bis zum Befehl (mov r2, r1) komme ich aber danach 
ist Schluss, hab ich schon Google bemüht aber irgendwie finde ich 
nichts, oder überlese es.

Vielen Dank

von Carl D. (jcw2)


Lesenswert?

Was spricht gegen r0..r9 als Spalten hinter die Befehle zu schreiben und 
dann ihren Inhalt zu tracen? Muß ja nicht in Nano-Sekunden passieren.
ARM-Assembler ist nicht wirklich unlesbar!

von Max B. (bellaou)


Lesenswert?

Danke für deine Antwort, ich verstehe nur den Befehl lsls r2, r2 #1 
nicht ganz. Bis dort wäre ja r0=5, r1=3, r2=3 oder sehe ich das 
verkehrt?!

von Carl D. (jcw2)


Lesenswert?

"Logical Shift Left ans Set flags"

R2 ist Quelle und Ziel, Shift um konstante eine Stelle

Das "S" gibt es übrigens am Ende einiger Befehle in diesem Code. Es hat 
immer die gleich Bedeutung (siehe oben)

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Was soll denn am Ende in r9 stehen? Eine Koordinate?

Das set flags sieht aus wie ne Nebelkerze, es werden später nie die 
Flags herangezogen.
Genau wie die ersten beiden movs r0 im mittleren 3er Pack Unsinn sind.

von Max B. (bellaou)


Lesenswert?

Als Hinweis, gibt es nur Ergebnis in 6-9.

Diese 3 Zeilen

movs r0, #65 ; 0x41 A
movs r0, #82 ; 0x52 R
movs r0, #77 ; 0x4d M

haben dabei geholfen auf ARM zu kommen.
Der ganze Code stammt aus einem Maschinencode welche man in 
assemblercode umwandeln musst:

0500 b0e3 0310 b0e3 0120 a0e1 8220 b0e1
0240 a0e1 9402 03e0 9100 06e0 0360 86e0
c340 b0e1 0080 54e0 0140 58e0 9406 05e0
0110 b0e3 4100 b0e3 5200 b0e3 4d00 b0e3
0270 55e0 0170 57e0 9402 04e0 0840 84e0
9405 09e0 0390 89e0 8110 b0e1 0190 89e0

von (prx) A. K. (prx)


Lesenswert?

Mw E. schrieb:
> Das set flags sieht aus wie ne Nebelkerze, es werden später nie die
> Flags herangezogen.

Das könnte damit zusammenhängen, dass bei Thumb-1 Befehlen keine freie 
Wahl zwischen mit und ohne S besteht. Zwar kann das kein Thumb-1 Code 
sein, aber bei Thumb-2 ist der Befehl in der Variante mit S kürzer, 
sofern als Thumb-1 Befehl codierbar.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Da haste ja schon richtig Arbeit reingesteckt und den arm-objdump 
gefunden ;)

Also ich hab das mal per Hand durchsimuliert und in r6-r9 kommt doch 
tatsächlich sowas wie ein Breitengrad raus mit viel Nachkommastellen bei 
den Sekunden, sonst findet mans wohl nicht.
Der Breitengrad geht auch durch Deutschkland, so als Nebenprobe.

asrs ist übrigens "arithmetic shift right", aber nimms als normalen 
Rechtsschieber, die Zahl hat kein Vorzeichen.

Wenne soweit bist kann das ja mal verglichen werden.

@prx:
Ja, da war ja was beim Thumb.

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
Noch kein Account? Hier anmelden.