我正在为一个大学项目写一个8086汇编程序。我在互联网上阅读了一些关于编译器设计的资料,并正在阅读编译器的“龙书”。但问题是我在这里找不到关于组装(生成目标代码)的部分。汇编程序设计是否有任何好的书籍或链接。我从哪里开始?我经历了词法分析,解析和中间代码生成。
答案 0 :(得分:7)
你能直接投入并生成一个.COM文件吗?它被加载到代码段:0100并用CS,DS,ES和SS执行,都指向该段。
如果你能做到这一点,那么生成代码会变得更容易。
您的测试程序很简单
mov dx, 110
mov ah,9
int 21h
mov ax,4c00
int 21
at address 110:
"Hello, World!" 0d 0a 24
答案 1 :(得分:3)
龙书完全是错误的来源,因为汇编程序不是编译器。汇编程序行的“语法”非常简单(常规语法 - 不是上下文敏感)。
汇编程序的代码生成部分几乎不存在。获得一本关于目标CPU操作码的好参考书,并按照说明生成字节。
那里有一些不错的简单装配工,你应该看看它们。通过代码阅读学习是大学项目的一种非常有效的方式。您将需要它,因为英特尔汇编程序代码非常难看,至少如果您想要定位某些扩展名。
答案 2 :(得分:1)
答案 3 :(得分:1)
您需要在MOV和操作码等助记符指令之间进行映射,请参阅OpcodeMap。除此之外,您需要信息指令所需的参数(和操作符的宽度)有多少(在位字段中编码,如果您正确的话,这将节省您很多时间)。
我怀疑龙书对你有多大帮助。
答案 4 :(得分:0)
尝试使用llvm编译器基础结构。