Hallo zusammen, ich benutze einen MSP430F2274, welcher über keinen Hardware-Multiplier verfügt. Die Software programmiere ich mit IAR in C. Nun zu meiner Frage: Die Multiplikation in C ist simpel, auch der Assembler-Code erscheint mir logisch. Dort wird nämlich ein eine Subroutine zur 16 Bit Multiplikation aufgerufen. Kann mir jemand sagen, warum die angesprochene Operation nur ca. 20 Zyklen (mit einem Oszilloskop gemessen) dauert? Gemäss Debugging-Vorgang sollten weit mehr Zyklen für die Berechnung benötigt werden... Wo liegt mein (Überlegungs-) Fehler? Danke für eure Hilfe!! Gruss Fabian
Die 16*16 Bit Software Multiplikation geht abhängig von der Operanden verschieden schnell. 0000h * 0000h = 00000000h geht in 11 Takten FFFFh * FFFFh = FFFE0001h braucht 123 Takte
An jens: Danke für deine Information. Kannst du mir noch sagen, wie du die Anzahl Takte berechnet bzw. woher du die Angaben hast?
is hier gut erklärt, und nen quellcode gibbet auch noch dazu: http://focus.ti.com/general/docs/techdocsabstract.tsp?abstractName=slaa329
Hallo Fabian,
hier mein Quellcode. Die Taktzyklenanzahl hab ich vom Simulator.
#define OP1 R4
#define OP2 R5
#define OP2H R6
#define ACL R7
#define ACH R8
ASEG 0F000h
RESET mov.w #300h,SP ; Initialize stackpointer
Main mov #13,OP1
mov #12345,OP2
call #MPYU
jmp Main
;-----------------------------------------------------------------------
--
; MSP430 16*16 Bit Multiplikation
; Zyklen abhängig von OP1: (ohne call und ret)
; MPY 17..133
; MAC 15..131
; MPYU 11..123
; MACU 9..121
MPY clr ACL ; ACH,ACL = OP1 * OP2 mit Vorzeichen
clr ACH
MAC tst OP1 ; ACH,ACL += OP1 * OP2 mit Vorzeichen
jge mpy_m1
sub OP2,ACH
mpy_m1 tst OP2
jge MACU
sub OP1,ACH
jmp MACU
MPYU clr ACL ; ACH,ACL = OP1 * OP2 ohne Vorzeichen
clr ACH
MACU clr OP2H ; ACH,ACL += OP1 * OP2 ohne
Vorzeichen
clrc
jmp mpy_m4
mpy_m2 add OP2,ACL
addc OP2H,ACH
mpy_m3 rla OP2
rlc OP2H
mpy_m4 rrc OP1
jc mpy_m2
jnz mpy_m3
ret
;-----------------------------------------------------------------------
--
ASEG 0FFFEh
DW RESET
END
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.