Compiler construction 编写汇编程序,需要帮助吗

Compiler construction 编写汇编程序,需要帮助吗,compiler-construction,x86,assembly,Compiler Construction,X86,Assembly,我正在为一个大学项目写一个8086汇编程序。我在网上查阅了一些关于编译器设计的资料,正在阅读编译器的“龙书”。但问题是我在这里找不到关于汇编(生成目标代码)部分的太多信息。有没有关于汇编程序设计的好书或链接。我从哪里开始呢?我已经完成了词法分析、语法分析和中间代码生成。你能不能直接下注并生成一个.COM文件?它被加载到:0100处的代码段中,并在CS、DS、ES和SS都指向该段的情况下执行 如果你能做到这一点,那么生成代码就容易多了 你的测试程序会很简单 mov dx, 110 mov ah,9

我正在为一个大学项目写一个8086汇编程序。我在网上查阅了一些关于编译器设计的资料,正在阅读编译器的“龙书”。但问题是我在这里找不到关于汇编(生成目标代码)部分的太多信息。有没有关于汇编程序设计的好书或链接。我从哪里开始呢?我已经完成了词法分析、语法分析和中间代码生成。

你能不能直接下注并生成一个.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

查看一下

您需要在MOV和操作码等助记符指令之间建立映射,请参见。除此之外,您还需要一条指令需要多少参数(以及运算符的宽度)的信息(以位字段编码,如果正确的话,这将节省您很多时间)

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


是一个很好的参考。

龙之书是完全错误的源代码,因为汇编程序不是编译器。汇编程序行的“语法”非常简单(常规语法-不区分上下文)

汇编程序的代码生成部分几乎不存在。获取一本关于目标CPU操作码的好参考书,并按照说明生成字节


这里有一些很好的简单汇编程序,你应该看看它们。通过代码阅读学习对于大学项目来说是一种非常有效的方式。您将需要它,因为英特尔汇编程序代码非常难看,至少如果您还想针对某些扩展。

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


嗯。阅读您的代码时,过去的记忆在我脑海中掠过。很长一段时间了…@Yves:这里也是,多年来用80886、z80、6301、6502和1802编写了相同的程序,但在过去十年中没有。答案很好,但您可能应该指出,上面的示例需要MS-DOS或Windows下的MS-DOS外壳。上帝只知道int 21在其他操作系统中会把你带到哪里,正如MacLaughlin暗示的那样,你不能在实模式窗口中使用中断,这意味着上面的代码在Windows 98之后的任何操作系统中都不能工作。哈哈!5条指令的程序时代已经一去不复返了。链接似乎断了。这是同一个吗