Forum: Mikrocontroller und Digitale Elektronik Übersetzer für asm zu c


von Willi L. (wilials)


Lesenswert?

Hallo,

gibt es einen "Assembler zu C"-Übersetzer (aus asm C machen) für PICs?

Gruß
Willi

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wozu?

von Falk B. (falk)


Lesenswert?

@  Willi Lich (wilials)

>gibt es einen "Assembler zu C"-Übersetzer (aus asm C machen) für PICs?

Ja, nennt sich Programmierer mit C + ASM Kenntnissen ;-)

Als automatische Software, nein.

von ziza (Gast)


Lesenswert?

1
while ( ! eof(File)) {
2
  String s = getLine(File);
3
  putLine(File, " __asm(\"" + s + "\");");
4
}

von Willi L. (wilials)


Lesenswert?

um in Assembler geschriebene Programme besser zu verstehen, da ich ASM 
nicht kann.

Willi

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Willi Lich schrieb:
> um in Assembler geschriebene Programme besser zu verstehen, da ich ASM
> nicht kann.

Nein.

Du musst Dir das vorstellen wie Hackfleisch (das Assemblerprogramm) und 
eine Kuh (das C-Programm).

Die Transformation Kuh -> Hackfleisch ist recht unkompliziert, aber die 
Rekonstruktion Hackfleisch -> Kuh ist bislang noch keinem geglückt.

von MaWin (Gast)


Lesenswert?

Solche Programme heissen Decompiler (in dem Fall von einem Maschinencode 
eines bestimmten Prozessors in C),
aber die Qualität ihrer Ausgabe ist sehr mies,
sie werden nicht dazu geschaffen einem, der Assembler nicht versteht, 
das in übersichtliches C umzuwandeln,
sondern dazu daß es nach dem kompilieren wieder den Originalcode ergibt.
Die helfen dir also nicht weiter, zudem kosten die besseren davon Geld, 
schliesslich erlauben sie es "Geheimnisse zu stehlen" weil sie nicht nur 
auf den Assemblercode, sondern auf den Maschinencode angesetzt werden 
können.
Lern den Assembler des entsprechenden Prozessors.

von Willi L. (wilials)


Lesenswert?

Einerseits schade, dass es solche erschwinglichen Übersetzer nicht gibt, 
andererseits verständlich, dass der Maschinencode nicht für Jeden 
entschlüsselbar ist. Ich hatte etwas über "Relogix" als ASM to C 
Translator gelesen und dachte, dass das nur ein Stückchen vom großen 
Kuchen ist.

Sicher wäre es die Lösung, Assembler zu lernen. Aber irgendwo muß man 
mal einen Strich ziehen. Es gibt auch noch andere Dinge außer 
Programmiersprachen für die man seine grauen Zellen aktivieren muß.

Vielleicht gibt es doch in absehbarer Zukunft "Softwaretranslator", die 
den Maschinencode schützen.

Danke für Eure Hilfe.

Willi

von Thomas (Gast)


Lesenswert?

Schreibe doch ein einfaches C-Programm und schau dir den assembler code 
an. dazu noch die instruction set vom microcontroller kennen, und schon 
hat man den zusammenhang verstanden.
meine meinung nach ist das programmieren in assembler einfach nur 
ätzend, insbesondere die wartbarkeit matrix-feeling. im allgemeinen 
reicht es, wenn du das unstruction set sowie die dazugehörigen cycles 
kennst (code begutachten->Effizienz schlecht?->codedesign bzw. 
algorithmus ändern)...

was sind eure gründe in asm zu proggen?

von Sepp (Gast)


Lesenswert?

Ich möchte nicht wissen was so ein "Hackfleisch zu Kuh-Konverter",
der Vergleich von Rufus ist Spitze, macht, wenn im Assemblerprogramm
(willkürlich) Tabellen mitten im Code stehen. Selbst ein normaler
Disassembler kommt da schon ins Schleudern.
Ich würde halt das Programm händisch in C umsetzen, sollte
machbar sein, wenn es gut kommentiert ist wird es noch einfacher.

von spess53 (Gast)


Lesenswert?

Hi

>meine meinung nach ist das programmieren in assembler einfach nur
>ätzend, insbesondere die wartbarkeit matrix-feeling.

Nur wenn man keine Ahnung davon hat.

MfG Spess

P.S. Deine Shift-Taste klemmt.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Das Problem bei diesem Translator ist halt, dass es nicht "ein" C gibt, 
sondern dass jeder Compiler (und dabei auch jede Version und jede 
Konfiguration) einen anderen Assembler-Code erzeugt. Oft wird danach 
noch optimiert, so dass aus dem Assembler-Code nicht direkt ein C-Code 
erstellt werden kann. Auch werden dabei alle Funktions- und 
Variablennamen durch automatische Konstrukte ersetzt (zB 
"f002002009378784(v77367367,v7727272)" nicht wirklich einfacher zu 
lesen).

Wenn schon ein Mensch Probleme dabei hat einen Assembler-Code in C 
umzusetzen, wie soll es denn eine Maschine schaffen?

von Pieter (Gast)


Lesenswert?

moin moin,

mit etwas Übung hilft das weiter:

http://www.hex-rays.com/idapro/


Mit Gruß
Pieter

von Thomas (Gast)


Lesenswert?

@spess53

Ahnung schon...
Die Flexibilität (Funktion in C in Kombination mit Makros) und 
Übersichtlichkeit, insbesondere die Wiederverwertbarkeit des Codes 
(Bibliothek) sind wesentliche Vorteile von C gegenüber ASM...

MfG
Thomas

von Peter (Gast)


Lesenswert?

Thomas schrieb:
> insbesondere die Wiederverwertbarkeit des Codes
> (Bibliothek) sind wesentliche Vorteile von C gegenüber ASM.

warum sollen funktionen die in ASM geschrieben sind nicht 
Wiederverwendet werden könnn? Da jede Funktion in ASM umgewandlet werden 
kann, ist sie genau so verwendbar wie die C funktion. auch gibt es 
ausreichend Makro assembler die einem viel arbeit abnehmen.

von spess53 (Gast)


Lesenswert?

Hi

>warum sollen funktionen die in ASM geschrieben sind nicht
>Wiederverwendet werden könnn? ....

Manche können das nicht verstehen.

MfG Spess

von Loonix (Gast)


Lesenswert?

spess53 schrieb:
>>meine meinung nach ist das programmieren in assembler einfach nur
>>ätzend, insbesondere die wartbarkeit matrix-feeling.
>
> Nur wenn man keine Ahnung davon hat.

99% ACK

Auch wenn ich es (aus Vernunft- und Zeitgründen) immer öfter sein lasse, 
ich liebe es auch in Assembler zu programmieren. Vor allem seit ich 
Kenntnisse höherer Programmiersprachen erlangen konnte macht es mir noch 
mehr Spaß. Muß natürlich nicht jeder so sehen, keine Frage.

von Mark B. (markbrandis)


Lesenswert?

Peter schrieb:
> warum sollen funktionen die in ASM geschrieben sind nicht
> Wiederverwendet werden könnn?

Schon mal x86-Assembler auf einem AVR wiederverwendet? :)

von Peter (Gast)


Lesenswert?

Mark Brandis schrieb:
> Schon mal x86-Assembler auf einem AVR wiederverwendet? :)

nein, aber meine C quellen mit threads  liefen auf dem AVR auch nicht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:

> nein, aber meine C quellen mit threads  liefen auf dem AVR auch nicht.

Auf einem ARM9 mit einem posixartigen Betriebssystem würden sie
aber durchaus laufen ...

von Peter (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Auf einem ARM9 mit einem posixartigen Betriebssystem würden sie
> aber durchaus laufen ...

nur mit aufwand, es sind windows threads ...

von Mark B. (markbrandis)


Lesenswert?

Peter schrieb:
> nein, aber meine C quellen mit threads  liefen auf dem AVR auch nicht.

Na sag bloß. Wieso kennt die Hardware keine Threads :)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> Jörg Wunsch schrieb:
>> Auf einem ARM9 mit einem posixartigen Betriebssystem würden sie
>> aber durchaus laufen ...
>
> nur mit aufwand, es sind windows threads ...

Dann isses natürlich egal, in welcher Programmiersprache du nicht
portable Programme geschrieben hast. :-)

SCNR ...

von Frank P. (mauz)


Lesenswert?

Mark Brandis schrieb:
> Schon mal x86-Assembler auf einem AVR wiederverwendet? :)

Das spricht aber eher die Portierbarkeit, als die Wiederverwendbarkeit 
an.
Außerdem war nicht die Frage asm oder c, um hier mal den (gefühlt) 
einemillionundersten c vs. asm thread einzubremsen ;-)
frank

von bitte löschen (Gast)


Lesenswert?

@Willi:
Seh' es einfach so:
Man kann auf 2 Weisen ein bestimmtes Formteil aus Eisen herstellen.
1. Auf der einen Seite mit verschiedenen Feilen, Schraubstock, 
Bohrständer mit Koordinatentisch, Schieblehre und Mikrometerschraube, 
Winkel und Lineal, Gewindeschneider, etc..
2. Auf der anderen Seite kann man die Form des Objektes in einem 
CAD-Programm erfassen und eine CNC-Maschine damit füttern.

Was denkst Du, muss ein Schlosser/Metallbauer zuerst lernen?

Ich will nicht sagen, dass Du irgendetwas musst, aber Du kannst Dir 
überlegen, wie ernsthaft Du Dich mit der Materie beschäftigen willst, 
und ob ein C-Compiler, der für größere Projekte sicher gute Chancen hat, 
für den größeren Code-Anteil das Mittel der Wahl zu sein, das richtige 
Lernmittel ist, um zu verstehen, was tatsächlich in den Tiefen deines 
Controllers passiert.

von Thomas (Gast)


Lesenswert?

>warum sollen funktionen die in ASM geschrieben sind nicht
>Wiederverwendet werden könnn? Da jede Funktion in ASM umgewandlet werden
>kann, ist sie genau so verwendbar wie die C funktion. auch gibt es
>ausreichend Makro assembler die einem viel arbeit abnehmen.

In diesem Fall haben wir uns missverstanden. Klar können ASM-Funktionen 
wieder verwendet werden. Ich meine Funktionen, die Strukturen oder Enums 
(führt zu besserem Verständnis des Codes) in Kombination von Makros 
(Zeigeränderungen) beinhalten, so dass einem eine möglichst große 
Flexibilität sowie die Möglichkeit eröffnet, Änderungen ohne großen 
Aufwand zu betreiben. Hierzu ist die Intuivität der Sprache C - was ja 
nicht umsonst als Hochsprache bezeichnet wird - von großer Bedeutung, da 
man sein ganzes Hirn für die Problemösung einsetzen kann.
Meine Erfahrungen mit ASM-Progs waren, dass man nach einigen 
Programmierstunden (ab 6Std. Nonstopp) das Nachvollziehen und Abspielen 
des Codes im Kopf im Vergleich zu C erheblich schwerer war.

Btw. ich will niemanden zu C bekehren. Früher oder später wird die 
Person die Sprache C lieben.
Ein Rat für die Umsteiger von ASM zu C:
Bitte, verwendet C nicht als Assmelberersatz (im Assembler-Denken 
verhaftet->Assembler Codestyle im C-Gewand).

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.