Ich beziehe mich auf https://www.mikrocontroller.net/articles/Multiplikation_in_Assembler#muls_24x8_32_2 Ich verstehe einfach nicht, warum dort beim letzten mul "mul R21,R16" steht. Müsste es nicht mulsu R16,R21 heissen? Wo kommen diese Funktionen eigentlich her? Wenn die aus einer C-Lib kommen, sollte da ja eigentlich kein so schwerwiegender Bug drin sein. Blickt da jemand durch?
Christian schrieb: > Ich verstehe einfach nicht, warum dort beim letzten mul "mul R21,R16" > steht. Müsste es nicht mulsu R16,R21 heissen? Wenn du auch noch schreibst, warum das deiner Meinung nach so sein müsste, kommst du vielleicht alleine auf die Antwort. Oliver
Es stimmt wohl beides nicht, wenn z.B. 6000000 * -11 gerechnet wird. Ich hätte es so gelöst, in Anlehnung an Atmel-Routinen (auch wenn (sehr wahrscheinlich) nicht optimal):
1 | ;* A2 A1 A0 B0 E3 E2 E1 E0 |
2 | ;* R22:R21:R20 x R16 -> R15:R14:R13:R12 |
3 | |
4 | muls_24x8: |
5 | |
6 | push null |
7 | clr null |
8 | muls B0,A2 |
9 | movw E3:E2,r1:r0 |
10 | mulsu B0,A0 |
11 | sbc E2,null |
12 | sbc E3,null |
13 | movw E1:E0,r1:r0 |
14 | mulsu B0,A1 |
15 | sbc E3,null |
16 | add E1,r0 |
17 | adc E2,r1 |
18 | adc E3,null |
19 | pop null |
20 | ret |
Nachtrag: Bezeichner vereinheitlicht
:
Bearbeitet durch User
Ging mir darum, dass der Code stark aussieht als wäre es disassembliert worden. Wäre jetzt interessant, aus welcher Lib das kommt und wo diese Lib ggf. kommerziell eingesetzt wird. Könnte ja die libc sein ;)
Ich denke eher, dass sich der Autor, vielleicht sogar erst beim Einstellen ins Forum, bei dieser einen Routine vertan hat; das hier fehlende 'sbc' ist in den anderen ja vorhanden. Und zum Thema Sorgfalt, auch auffällig: durchgängig "Scrached" und "Mutiply" ...
Christian schrieb: > Ging mir darum, dass der Code stark aussieht als wäre es disassembliert > worden. Woran machst du das fest? Der Code sieht einfach danach aus, daß da jemand straightforward m x n-Byte Integermultiplikationen in Assembler programmiert hat. Oliver
:
Bearbeitet durch User
Naja, also eigentlich schreibt man alleine schon wegen der Leserlichkeit nicht sub r10,r10 sondern clr r10. Ausserdem schreibt man im Code selber keine Registernamen, sondern setzt Aliase. So wie er da steht ist der Code für mich zwar Zeile für Zeile lesbar, aber über mehrere Zeilen hinweg nicht erfassbar. Ich glaube, es ist disassemblierter Code und die Kommentare sind händisch hinzugefügt worden.
S. L. schrieb: > Und zum Thema Sorgfalt, auch auffällig: durchgängig "Scrached" und > "Mutiply" ... Hey, immerhin keine cicels ... LG, Sebastian
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.