Ist es theoretisch möglich jedes Programm in Assembler zu schreiben?



  • Maschinencode lässt sich (nahezu?) 1:1 in Assembler übersetzen. Das heißt, dass du von jeder beliebigen Sprache über Maschinencode zu Assembler kommen kannst.



  • Das war nicht ganz die Antwort auf meine Frage. Ich kenne den Unterschied zwischen Maschinencode und Assembler, ich meinte eigentlich ob es Libraries in Assembler gibt und man z.B. int main(){return 0;} in Assembler umschreiben kann, so dass der Compiler sofort meine Änderungen compiled?



  • ps und wo sind diese Libraries?



  • sj schrieb:

    Das war nicht ganz die Antwort auf meine Frage. Ich kenne den Unterschied zwischen Maschinencode und Assembler, ich meinte eigentlich ob es Libraries in Assembler gibt und man z.B. int main(){return 0;} in Assembler umschreiben kann, so dass der Compiler sofort meine Änderungen compiled?

    Ich verstehe die Frage nicht. Dein Compiler kann C++-Code in Maschinencode oder auch direkt in Assembler übersetzen.



  • Ich meine hat nicht irgendwer die ganzen Befehle die es in C++ oder Pascal oder sonst was, irgendwann einmal in Assembler geschrieben?



  • sj schrieb:

    Ich meine hat nicht irgendwer die ganzen Befehle die es in C++ oder Pascal oder sonst was, irgendwann einmal in Assembler geschrieben?

    Was denkst du was ein Compiler macht?

    1. Annahme: Bytecode = Assembler.
    2. Annahme: Compiler bauen Bytecode.

    Was gibt es daran nicht zu verstehen? 😕

    Edit:
    Oder noch allgemeiner:

    1. Bytecode = Assembler.
    2. Prozessoren verstehen nur Bytecode.
    3. Programme laufen über Prozessoren!



  • Der wandelt z.B. int main(){return 0;} in
    00000000 <_main>:
    0: 55 push ebp
    1: 89 e5 mov ebp,esp
    3: 83 e4 f0 and esp,0xfffffff0
    6: e8 00 00 00 00 call b <_main+0xb>
    b: b8 00 00 00 00 mov eax,0x0
    10: c9 leave
    11: c3 ret
    12: 90 nop
    13: 90 nop
    um. Aber wer hat dem das denn beigebracht? Kann der Compiler zaubern? Und wo sind die Libs dafür? In welchen Dateien steht der original Assemblercode? Den will ich haben. Kann doch nicht so schwer zu verstehen sein.


  • Mod

    sj schrieb:

    Kann der Compiler zaubern?

    Um die Frage ein für allemal zu klären: Ja.

    Was dachtest du sonst, wie der allererste Computer programmiert wurde?



  • sj schrieb:

    Aber wer hat dem das denn beigebracht? Kann der Compiler zaubern? Und wo sind die Libs dafür? In welchen Dateien steht der original Assemblercode? Den will ich haben. Kann doch nicht so schwer zu verstehen sein.

    Der Compiler ist in der Lage, C++ Code zu verstehen - und im Compiler ist auch hinterlegt, was er aus den C++ Anweisungen machen soll. Sowas kann man nicht zwischen Tür und Angel erklären, dafür empfehle ich mal ein Buch zum Thema Compilerbau.

    (oder du schaust dir den Compiler auch mal in Assember an :D)



  • SeppJ schrieb:

    Ja.

    😃

    @TE
    Der erste Assembler (Compiler für Assembler) wurde in Bytecode geschrieben. Der erste Compiler einer Sprache entweder in Assembler oder in einer Sprache, für die bereits ein Compiler existierte. So baut man von unten nach oben Funktionalität aus. Verstanden?



  • sj schrieb:

    Aber wer hat dem das denn beigebracht?

    Die Programmierer des Compilers.

    Und wo sind die Libs dafür? In welchen Dateien steht der original Assemblercode?

    Der Compiler ist die "Lib".



  • Mal andersrum, wenn ich also alle Funktionen von C++ in Assembler haben möchte, muss ich alle Funktionen compilieren und diese dann von Hand speichern, so daß ich alle Funktionen als Assembler-Source-Code habe?
    Ansonsten geb ich's auf, danke.



  • Einmal noch, habt ihr schon mal ein Disassemblat gesehen ohne Debuginfos? Na toll, schein ja ein Militärgeheimnis zu sein 🙂



  • Darf man fragen, was du überhaupt vorhast?
    (praktisch gesehen: Der Compiler arbeitet nicht mit "Funktionen", sondern mit Sprach-Bestandteilen - für jedes Konstrukt, das in der Sprache vorgesehen ist, gibt es Möglichkeiten, es in Maschinencode darzustellen. Und genau das macht der Compiler, wenn du ihm einen Quellcode vorsetzt (natürlich muß er zunächst die verwendeten Sprachmittel identifizieren))


  • Mod

    Alle Standardfunktionen (das heißt "richtige" Funktionen, also alles, was zum Beispiel hier erwähnt wird) sind in der C(++) Laufzeitbibliothek. Die kannst du dir einfach angucken oder disassemblieren, davon ist (in der Regel) sogar der (in C(++) geschriebene) Quelltext verfügbar. Da stehen aber nicht so Sachen drin, wie zum Beispiel zwei Zahlen addiert werden, so ein triviales Zeugs ist im Compiler selber eingebaut.



  • Man programmiert doch nur noch z.B.
    int main () {

    ifstream infile;

    infile.open ("test.txt", ifstream::in);
    ...
    und keiner weiß, was eigentlich passiert, und keinen interessierts, funktioniert doch prima. Ich will aber gerade wissen was der Rechner, z.b. bei infile.open(... eigentlich macht, und wenn ich will, programmiere/optimiere(haha) ich einfach den Assembler-Code. Der Thread war mir einfach nicht ausreichend beantwortet.
    Ich werde ins Assembler-Forum wechseln...
    Aber Danke für die Hilfe.



  • Wie ich schon gesagt habe, wenn dich die Innereien des Compilers interessieren, solltest du dir mal etwas Literatur zum Thema Compilerbau suchen. Sowas haben kluge Leute sehr ausführlich durchdacht, damit wir als 08/15-Programmierer uns nicht mehr um die Details kümmern müssen.

    PS: bei ifstream::open() kannst du sogar das Glück haben, daß du die Funktion in Reinform in den System-Headern vorfindest - einfach mal umschauen 😉



  • sj schrieb:

    Ich will aber gerade wissen was der Rechner, z.b. bei infile.open(... eigentlich macht

    Ich würde fast vermuten, dass der C Code aufruft. 🤡

    Wenn dich solche Funktionen interessieren, dann lerne halt Assembler. Wenn du schon etwas kannst, könnte das ganz interessant sein.



  • Wo ist bitte dein Problem?

    Am Anfang gab es nur Maschinencode und man musste mühselig aus Zuständen (Aus, An; 0, 1) Programme schreiben. Eine bestimmte Folge dieser Zustände war dann ein Befehl, den der Prozessor verstanden hat. Daraufhin hat er z.B. in ein Register geschrieben, etc.

    Das war zu mühselig also hat man angefangen aus diesen Codes ein Assembler zu bauen, der anstatt der Zahlen lesbare Befehle verstand...

    Das ging einige Zeit ganz gut, aber irgendwann war auch das zu langwierig und zu fehleranfällig.

    Es kamen die Hochsprachen, wie z.B. die Programmiersprache C.

    Diese Sprachen machen nichts anderes als wieder den Maschinencode zu generieren, den es schon seit Anfang an gibt.

    Deine Sachen mit Dateien öffnen, etc. sind allerdings Betriebssystemspezifisch. Hier wird einfach ein Befehl abgesetzt, der dem Betriebssystem sagt, das man das möchte



  • cooky451 : Vielen Dank, das ist ein Link der mir wirklich sehr gefällt, da werd ich erst mal Stunden lang lesen. Ich komme halt noch von Old-School-Dos, muss ne Menge nachholen.
    Ihr könnt ja mal hier reinschauen oder lasst es...
    http://www.file-upload.net/download-3592694/spacy.rar.html
    sind Sachen von mir. Vielleicht Schrott, vielleicht gut(e Ideen), was solls interessiert eh keinen...


Anmelden zum Antworten