2010-08-05 9 views
8

Ich schreibe einen 8086 Assembler für ein College-Projekt. Ich habe Material über Compilerdesign im Internet gelesen und lese das "Drachenbuch" von Compilern. Aber das Problem ist, dass ich hier nicht viel über den zusammensetzenden (generierenden Objektcode) Teil finden konnte. Gibt es gute Bücher oder Links für Assembler Design? Wo fange ich an? Ich habe lexikalische Analyse, Parsing und Zwischencode-Generierung durchlaufen.Einen Assembler schreiben, brauche Hilfe

Antwort

7

Können Sie einfach eine .COM-Datei kicken und generieren? Es wird in ein Code-Segment bei: 0100 geladen und mit CS, DS, ES und SS ausgeführt, die alle auf dieses Segment zeigen.

Wenn Sie das tun könnten, dann wird das Generieren von Code viel einfacher.

Ihr Testprogramm wäre einfach

mov dx, 110 
mov ah,9 
int 21h 
mov ax,4c00 
int 21 

at address 110: 
"Hello, World!" 0d 0a 24 
+4

Hmm. Erinnerungen aus der Vergangenheit sind mir beim Lesen deines Codes in Erinnerung geblieben. Es war eine lange Zeit ... –

+0

@Yves: Same hier, schrieb das gleiche Programm in 80886, Z80, 6301, 6502 und 1802 im Laufe der Jahre, aber keine in den letzten zehn Jahren. –

+3

große Antwort, aber Sie sollten vielleicht darauf hinweisen, dass das obige Beispiel entweder MS-DOS oder eine MS-DOS-Shell unter Windows erfordert. Gott weiß nur, wo int 21 Sie in anderen OS's –

1

Sie müssen eine Zuordnung zwischen mnemonic Anweisungen wie MOV und Opcodes sehen OpcodeMap. Außerdem benötigen Sie die Information, wie viele Argumente (und Breite der Operatoren) eine Anweisung benötigt (codiert in Bitfeldern, das spart Ihnen viel Zeit, wenn Sie das richtig machen).

Ich bezweifle, dass das Drachenbuch Ihnen viel helfen wird.

The Art of ASSEMBLY LANGUAGE PROGRAMMING ist eine gute Referenz.

+0

Der Link scheint kaputt zu sein. Ist das das gleiche: http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html –

3

Das Drachenbuch ist völlig falsch, da ein Assembler kein Compiler ist. Die "Grammer" einer Assembler-Zeile ist extrem einfach (reguläre Grammatik - nicht kontextsensitiv).

Der Codegenerierungsteil für einen Assembler ist fast nicht vorhanden. Holen Sie sich ein gutes Nachschlagewerk über die Opcodes Ihrer Ziel-CPU und generieren Sie nur die Bytes wie erklärt.

Da sind ein paar nette einfache Assembler da draußen und Sie sollten sie betrachten. Lernen durch Lesen von Code ist eine sehr effektive Möglichkeit für ein College-Projekt. Sie werden es brauchen, weil der Intel Assembler-Code extrem hässlich ist, zumindest wenn Sie einige der Erweiterungen als Ziel haben wollen.

Verwandte Themen