Writing an assembler , need help [closed]
I'm writing an 8086 assembler for a college project . I've gone through some material on compiler design on the internet and am reading the 'dragon book' of compilers . But the problem is I couldn't find much about the assembling (generating object code) part here . Are there any good books or links for assembler design . Where do I start ?, I've gone through lexical analysis,parsing and intermediate code generation .
Can you just punt and generate a .COM file? It is loaded into a code segment at :0100 and executed with CS, DS, ES, and SS all pointed to that segment.
If you could do that, then generating code gets a LOT easier.
Your test program would be simple
mov dx, 110
mov ah,9
int 21h
mov ax,4c00
int 21
at address 110:
"Hello, World!" 0d 0a 24
The dragon book is totally the wrong source because an assembler is not a compiler. The "grammer" of an assembler line is extremly simple (regular grammer - not context sensitive).
The code generation part for an assembler is almost non existing. Get a good reference book about the opcodes of your target CPU and just generate the bytes as explained.
There a few nice simple assemblers out there and you should look at them. Learning by code reading is a very effective way for a college project. You will need it because the Intel Assembler code is extremely ugly at least if you want target some of the extensions as well.
take a look at http://www.programmersheaven.com/mb/pharabee/344751/344751/how-to-write-a-assembler/
You need a mapping between mnemonic instructions like MOV and opcodes see OpcodeMap. Besides that you need the information how many arguments (and width of operators) a instruction requires (encoded in bit fields, that will save you much time if you get this right).
I doubt that the dragon book will help you much.
The Art of ASSEMBLY LANGUAGE PROGRAMMING is a good reference.
try to use llvm compiler infrastructure.
http://llvm.org/ProjectsWithLLVM/
精彩评论