开发者

Writing an assembler , need help [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discuss开发者_开发问答ion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 10 years ago.

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/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜