Which assembler should I use?(x86)

来自osdev
跳到导航 跳到搜索

导言

汇编器(assembler)是将汇编语言代码转换成机器代码的程序。 即使你没有使用汇编语言作为操作系统的主要编程语言,你仍然必须编写一些汇编语言。 本文讨论了用于操作系统开发的常用汇编程序的优缺点。

GAS

GNU汇编程序或GAS是GNU二进制文件中包含的汇编程序。 它也是紧密集成在GNU工具链中的汇编器,因此与之交互效果最好。 GAS默认使用AT&T语法,但也可以使用Intel语法。 它通常与C预处理器结合使用,以实现宏功能。 GAS可以为许多不同的平台产生代码。

NASM

Netwide Assember或NASM是一种流行的汇编程序,使用Intel语法和自己的宏系统。 它是用C语言编写的,但只为x86及其前身生成代码。

FASM

Flat Assembler,或 FASM,是一种完全用汇编语言编写的自组装(self assembling)汇编器,使用Intel语法和自己的宏系统。 它只为ia32和amd64平台生成代码,尽管存在一个用于ARM系统的分支。 它的下一代,FASMG可以通过其强大的宏系统生成几乎任何架构:x86、ARM、Z80,甚至WebAssembly

结论

如果你想用C语言、C++语言或其他高级语言编写你的操作系统,你只需要汇编语言中最少量的部分。 在这种情况下,推荐使用的汇编器是GAS,因为它与OSDev中常用的GNU工具链紧密集成。 GAS包含在GNU binutils中,因此不会向你的项目引入新的依赖关系。

如果你想完全用汇编语言写一个项目,后两种工具通常是你的首选。 然而,FASM是自组装的,只需要一个C标准库就可以工作,这方面是它的一个轻微优势,因为它更容易移植。