mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Übersetzen in Inline Assembler


Autor: Alexander Klinkan (chessat2002)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Meine Ausgangslage ist die folgende:

Ich habe ein fertiges C - Programm vorliegen und möchte nun in einem 
abschließenden Schritt noch einige Funktionen als Inline - Assembler - 
Code einbinden (Warum? Da das Projekt eine Aufgabenstellung ist und 
diese Funktionen aus Übungszwecken eben in Inline - Assembler 
eingebunden werden sollen, "um das auch einmal gemacht zu haben").
Wie ich dies grundsätzlich bewerkstellige, weiß ich (aufgrund der 
Tutorials) mitlerweile. Meine Assembler - Kenntnisse sind jedoch 
(leider) sehr beschränkt.
Meine Idee wäre jetzt an dieser Stelle, die Befehle einfach aus dem List 
- File der Reihe nach abzuschreiben, also mittels "asm volatile ( ... ); 
" und dann noch die jeweiligen Funktionen als "inline" deklarieren.
Führt mich das ans Ziel ober habe ich da einen gewaltigen Dnekfehler 
drinnen?

Besten Danke,

Alex

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Klinkan schrieb:
> Führt mich das ans Ziel ober habe ich da einen gewaltigen Dnekfehler
> drinnen?

Ja, das führt zum Ziel, ist aber nicht Sinn der Sache.
Und dein Lehrer/Prof wird das auch gleich erkennen.

Du musst auch berücksichtigen, dass der Compiler ggf Optimierungen 
fährt: also auch Codes miteinander verschmilzt, den du nicht einfach so 
heraustrennen kannst.

Wenn Du aber das Listfile ansiehst, den Code verstehst und ihn dann 
(idealerweise in eigenen Worten übernimmst) wäre das schon OK. Aber dann 
auch wirklich verstehen!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktionen mit inline Kennzeichnung sind was anderes als 
Inlineassemblercode.

Ja, du kannst ASM-Code aus dem Listfile nehmen und als Inlineassembler 
verpacken. Das ist halt Cheaten. Cheaten kann auffallen, wenn du 
hochnotpeinlich nach dem Sinn des ASM-Teils befragt wirst. Normalerweise 
erkennt ein erfahrener ASM-Progger händisch erstellten ASM-Code.

Technisch gesehen musst du aufpassen, dass die richtigen Daten in den 
richtigen Registern landen und dass der Compiler mitbekommt, welche 
Register ausserhalb seiner Kontrolle manipuliert wurden. Wenn eine 
Funktion nicht mehr als C-Code vorhanden ist, könnte der Compiler ja auf 
die Idee kommen Register anderwärtig zu benutzen. Ich denke eine 1:1 
Übernahme scheitert in den meisten Fällen.

Autor: Alexander Klinkan (chessat2002)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die schnellen antworten!

ich sehe schon, ich werde mich noch etwas genauer mit der thematik 
beschäftigen müssen, die ausgaben im list file werde ich trotzdem als 
anhaltepunkte verwenden.

grüße von alex

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.