Frage zu AVR Assembler

OP #7592775
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?

#7592891
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

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

OP #7593561
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.

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