Hi!
ich haben folgenden Code, der mit dem MSPGCC auch kompiliert, allerdings
finde ich nicht ganz sauber was er macht (das ret am Ende ohne return()
im C-Code). Am liebsten wäre es mir, wenn ich eine saubere return()
Funktion mit Variable haben würde und er dann zurückkehrt.
Ein weiterer Fehler ist, dass der GCC meckert wegen multiline-Assembler.
Leider habe ich noch nicht gefunden, wie man sowas umschreibt? Vor jede
Zeile ein asm?
Danke für Eure Antworten
Benjamin
CODE:
____________________________________________________
/*********************************************
* function mul16: *
-------------------------------------------
* return: int32_t *
-------------------------------------------
16bit Multiplikation
* 16x16=>32 *
* Hinweis: der Compiler legt das Ergebnis in *
* Register R9 und R10 ab. danach wird *
* zurückgesprungen. Der Rücksprungcode vom *
* gcc wird nicht erreicht, aber es gibt eine *
Compilerwarnung
*********************************************/
int32_t mul16(register int16_t x, register int16_t y)
{
__asm("mul16:
push r9
clr r13
mov r13,r15
mov r13,r9
tst r12
jge xbooth_2
mov #-1,r9
jmp xbooth_2
xbooth_6:
add r12,r15
addc r9,r13
xbooth_1:
rla r12
rlc r9
xbooth_2:
rra r14
jc xbooth_5
jne xbooth_1
jmp xbooth_4
xbooth_5:
sub r12,r15
subc r9,r13
xbooth_3:
rla r12
rlc r9
rra r14
jnc xbooth_6
cmp #0xFFFF,r14
jne xbooth_3
xbooth_4:
mov r15,r12
pop r9
ret
");
}
Dann musst du dich mehr mit dem inline Assembler befassen. Es gibt am Ende des asm-Statements drei Bereiche, in denen Zuordnungen zu Input, Output gemacht werden und wo bekannt gegeben wird, welche Register, Speicherbereiche etc. durch den Assemblerteil verschmutzt werden. Tutorials gibt es auch etliche, allgemein in der GCC Beschreibung und speziell für MSP430 z.B. http://mspgcc.sourceforge.net/manual/c1308.html
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.