Gibt es eine gute Referenz zum Schreiben von Code in x86-Assembly. Ich schreibe einen Compiler und ich bin gerade in der Code-Generierungsphase. Die Sprache, die ich implementiere, ist Objektorientiert. Zum Beispiel habe ich jetzt Probleme beim Schreiben von Assemblys für Klassendeklarationen, Objektlayouts etc ... Gibt es ein Buch oder eine Referenz, die dieses Thema behandeln?Codierung in x86 - Compilercode-Generierung
Antwort
Die architecture reference documentation ist Ihre beste Wette.
Erwarten Sie jedoch keine Hilfe für Klassendeklarationen oder vieles für Objektlayouts. Die zu kompilierende Sprachspezifikation würde etwas davon haben, aber der Maschinencode, der für Klassendeklarationen erzeugt wird, ist sehr lose an die Sprache gekoppelt und ist weitgehend eine Wahl des Implementierers, nicht der CPU-Architektur.
Können Sie bitte genauer sein, zum Beispiel gibt es eine Referenz, die erklärt, wie Methoden Verzögerungen in Assembly usw. übersetzt werden ... das wäre toll –
@MikeG: Methodendeklaration Übersetzung zu Code ist keine CPU-Architektur Problem, was ist die Dokumente sind für. Der Job eines Compiler-Schreibers besteht darin, einen Code zu erstellen, der Quellcode in Objektcode kompiliert. Da Sie sich für die Aufgabe entschieden haben, einen Compiler zu schreiben, erwarten wir, dass Sie * bereits * verstehen, wie man Parse-Bäume aus der Quelle generiert und diese in Pseudobefehle (oder echte Anweisungen) umsetzt, die auf eine bestimmte Architektur abzielen. – wallyk
@MikeG: Wie schon gesagt, Sachen wie das Auslegen von Stapelrahmen; Setzen von Argumenten auf den Stapel für Methodenaufrufe; und wie Felder, Dispositionstabellenzeiger usw. in Speicherobjekten angeordnet werden, sind nicht an einen Befehlssatz gebunden. Es gibt nur einen Weg, es zu tun. Du solltest in das Drachenbuch schauen. – blackcompe
Es kann "direkte" und "nützliche" Antworten auf Ihre Frage geben, die wahrscheinlich nicht kompatibel sind.
Die direkte Antwort ist, dass Sie Architekturreferenz (siehe Link in der vorherigen Antwort) mit Details des genauen Assemblers kombinieren sollten, den Sie dafür ausgewählt haben - z. Gas, Nasm, Yasm, Fasm, Masm [32], Tasm usw .; sie haben alle Referenzen auf Befehlssyntax, Pseudoinstruktionen (wie Segmentierung, Speicherzuweisung, etc.), Implementierungsdetails, Objektdateiformat ...
Die nützliche (jIMHO) Antwort ist das Duplizieren von Ergebnissen von Branchenführern, wie GNU Compiler-Sammlung, Microsoft Developer Studio, etc. erfordert Tausende von Mann Jahren, so ist dies ziemlich komisch; Stattdessen sollten Sie bestehende Maßnahmen so weit wie möglich wiederverwenden. Um beispielsweise das Konzept Ihrer Sprache zu überprüfen, können Sie Konverter in C-Code implementieren und dafür eine Bibliothek unterstützen. Oder schreiben Sie für eine bekannte virtuelle Maschine und ihre Sprache als Java oder C#. Auf fortgeschrittener Ebene können Sie das Compiler-Frontend durch Ihr eigenes ersetzen (wie GCC und LLVM erlauben) und ihre Code-erzeugenden Backends wiederverwenden, die gut geschrieben und auf mehrere Ziele abgestimmt sind.
Ich bezweifle ziemlich, dass Sie etwas entwerfen, das nicht in C konvertiert werden kann und Bibliotheksaufrufe unterstützt. Der Zwischencode soll nicht gut aussehen, er soll einfach funktionieren.
Wenn Sie noch Sonnenuntergang wollen manuell tun, bearbeiten Sie bitte die Frage mit mehr Details zu Zielplattform (Windows/Linux/etc., 16- 32- oder 64-Bit ...)
- 1. Gibt es in x86 irgendwelche Anweisungen zur Beschleunigung der SHA (SHA1/2/256/512) Codierung?
- 2. Subtraction in x86-Assembler
- 3. Differenz in positionsunabhängigen Code: x86 vs x86-64
- 4. x86 Montagefehler
- 5. x86 Architekturspezifikationen
- 6. Codierung ADC EAX, ECX - 2 verschiedene Arten zu kodieren? (Bogen x86)
- 7. RTF Template-Codierung, XSLT-Codierung
- 8. Postgresql Datenwiederherstellung Codierung
- 9. Dynamische Labels in x86-Assembler
- 10. Convert int in AVX x86
- 11. Stdout-Codierung in Python
- 12. NSURL-Codierung in ObjC
- 13. Codierung in Emacs-Shell?
- 14. PHP-Codierung in Android
- 15. x86 Assembly-Idiome
- 16. Führende Null in Zeichenerweiterung in x86-Assembly?
- 17. Wiederholung mov Anweisung x86
- 18. Word Tearing auf x86
- 19. x86 inline assembler flag
- 20. Android x86 virtualbox + camera
- 21. Assembly Sprache x86 Irvine32
- 22. x86 Assembly Referenzblatt
- 23. x86 addl vs subl
- 24. Moderne x86 Kostenmodell
- 25. Stapelausrichtung auf x86
- 26. x86 CMP Instruction Difference
- 27. Wie wird ein relativer JMP (x86) in einem Assembler implementiert?
- 28. x86 wo Stapelzeiger zeigt?
- 29. x86 Versammlung - über Verfahren
- 30. i386 anders als x86?
Ihre Frage ist ein groß vage. Es sollte keine Assembly für Klassendeklarationen oder Objektlayouts geben. –
Vielleicht können Sie den [clang/llvm] (http://llvm.org/) Quellcode lesen? Nach meiner Erfahrung war es sehr einfach zu verstehen. –
Was meinst du mit keiner Assembly für Klassendeklarationen? Was passiert, wenn ich eine Klasse mit mehreren Methoden und Feldern habe? Wenn ich nicht die Methoden in Assembly codiere, wo/wann wird das deklariert, wenn sie später benutzt werden? –