Forum: Mikrocontroller und Digitale Elektronik Frage zu AVR Assembler


von Christian (dragony)


Lesenswert?

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?

von Oliver S. (oliverso)


Lesenswert?

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

von S. L. (sldt)


Lesenswert?

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
von Christian (dragony)


Lesenswert?

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 ;)

von S. L. (sldt)


Lesenswert?

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" ...

von Oliver S. (oliverso)


Lesenswert?

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
von Christian (dragony)


Lesenswert?

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.

von Sebastian W. (wangnick)


Lesenswert?

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