编写汇编程序,需要帮助

时间:2010-08-05 06:22:14

标签: compiler-construction x86 assembly

我正在为一个大学项目写一个8086汇编程序。我在互联网上阅读了一些关于编译器设计的资料,并正在阅读编译器的“龙书”。但问题是我在这里找不到关于组装(生成目标代码)的部分。汇编程序设计是否有任何好的书籍或链接。我从哪里开始?我经历了词法分析,解析和中间代码生成。

5 个答案:

答案 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。除此之外,您需要信息指令所需的参数(和操作符的宽度)有多少(在位字段中编码,如果您正确的话,这将节省您很多时间)。

我怀疑龙书对你有多大帮助。

The Art of ASSEMBLY LANGUAGE PROGRAMMING是一个很好的参考。

答案 4 :(得分:0)

尝试使用llvm编译器基础结构。

http://llvm.org/ProjectsWithLLVM/