2010-08-08 68 views
3

我正在编写8086的汇编程序。我的问题是,如何将十六进制操作符转换为可执行文件,例如.EXE,.ELF,.COM,a.out等。查找链接/资源以及汇编器是否执行链接过程或由OS自动?8086汇编程序 - 从操作码生成目标代码

+0

@Aillyn:我想他是在问具体的文件格式。 – sje397 2010-08-08 15:16:06

+0

请参阅http://stackoverflow.com/questions/2478142/how-do-you-make-an-assembler – 2010-08-08 15:19:07

回答

7

这是相当复杂的,通常包括两个步骤:

  • 汇编汇编代码读取,计算出相应的机器代码,并将其与根据变化的一些其他信息一起写入到目标文件您正在使用
  • 链接器的目标文件格式采用一组目标文件,并合并在一起它们变成可实际运行

可执行因此汇编一般不会输出可执行文件;你需要选择一个目标文件格式并阅读如何生成它。理论上,只要你输出一个给定格式的有效目标文件,任何链接器都应该能够完成实际的链接过程,但通常汇编器和链接器是作为一个集合来进行的,所以我不确定它实际上会有多好在实践中工作(例如,GNU汇编器(气体)输出GNU特定的重定位和GNU链接器(ld)知道如何处理的部分,因此您不能在任何其他链接器中使用气体生成的目标文件)

ELF记录在SV ABI的第4部分,尽管您还需要阅读处理器的附录。虽然我无法在任何地方找到它在Internet上找到它,但是COFF被记录为PE规范的一部分;如果你需要它,我可以将它发布到某个地方

1

这取决于(目标)平台上的位,但在Windows PE格式的文件(EXE)你的工作将产生obj files,并让链接器做休息。