Inline assembler bei m68hc12

OP #1210333
Hi!

Ich versuche gerade m68hc12-Code, der ursprünglich für den CodeWarrior 
Compiler geschrieben ist auf gcc zu portieren. Beim Code hat auch alles 
ganz gut geklappt, aber ich scheitere am inline assembler. Ich würde 
gerne folgendes auf den GNU assembler umschreiben:
1
asm {
2

3
           ldy  tmp1
4

5
           ldd  #1000
6

7
           EMULS
8

9
           ldx  tmp2
10

11
           EDIVS
12

13
           sty tmp1
14

15
}

Der Code macht meiner Meinung nach:
* tmp1 mal 1000
* tmp1 = tmp1 / tmp2 (32 Bit signed / 16 bit signed)
* Ergebnis nach tmp1

Hab das dann mal mit GNU probiert:
1
   asm ("ldy %0" : "p"(tmp1));
2
   asm ("ldd #1000");
3
   asm ("EMULS");
4
   asm ("ldx %0" : "p"(tmp2));
5
   asm ("EDIVS");
6
   asm ("sty %0" : "=p"(tmp1));

Aber ich komme mit dem "Constraits" irgendwie nicht klar.

Danke,
Johannes
Persönliche Seite
Eins vorweg: von m68 hab ich keinen Plan :-)

Das inline asm muss in einem Stück sein, ansonsten kann gcc was 
wegoptimieren oder dem tmp1 im ersten asm ein anderes Register zuordnen 
als dem tmp1 im 5ten asm (Falls "p" eine Registerklasse ist).

Wenn das irgendeine Wirkung hat, die über das Setzten von tmp1 
hinausgeht, genügt "asm" nicht. Es muss dann "asm volatile" sein.

Dann: Wenn das in blankem C/C++ geht, texte es einfach mal aus und 
schau, was gcc draus macht. Vielleicht ist es je schon das, was du 
willst.

Für weitere Anmerkungen wär hilfreich zu wissen, welche Klasse von 
Operanden zB ldy/sty braucht und was für Dinger tmp1 und tmp2 sind. 
Momentan ist das nicht ersichtlich, weil "p" keine Standard-Constraint 
ist, sondern maschinenspezifisch.

Johann
OP
Hi!

Hab die ganze inline asms jetzt mal in C Code umgeschrieben. Sieht so 
aus als erzeugt gcc etwas clevereren Code (Merke: Assembler ist nicht 
unbedingt schneller), aber ich konnte es noch nicht testen, weil mein 
Flash-Tool gerade versagt.

Trotzdem danke für den Tipp,
Johannes

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.