Forum: Mikrocontroller und Digitale Elektronik Übersetzen in Inline Assembler


von Alexander K. (chessat2002)


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

von Christian H. (netzwanze) Benutzerseite


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!

von Stefan B. (stefan) Benutzerseite


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.

von Alexander K. (chessat2002)


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

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.