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.