Forum: Mikrocontroller und Digitale Elektronik MSP430GCC inline Assembler


von Benjamin Schrödl (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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