mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430GCC inline Assembler


Autor: Benjamin Schrödl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
");
}

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.