本文主要是介绍linux汇编工具之GAS(ATT 语法)和NASM(Intel 语法)比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言:在学校时,学过的汇编是Intel语言的汇编,编译器是MASM,使用的是DOS系统。惭愧的是那时没有对汇编语言有较深入的研究,有许多问题也不慎了解,迷迷糊糊至今。最近,在看《使用开源软件-自己写操作系统》http://code.google.com/p/writeos/ 和《自己动手写操作系统》里面提到了GNU AS编译器 和NASM编译器 ,于是,重新复习了一下汇编语言编程的相关知识,对汇编语言有了进一步的了解。
在Linux0.11内核源码中,bootsect.s和setup.s是实模式下运行的16位代码程序,采用近似Intel的汇编语言语法并且需要使用Intel8086汇编编译器和连接器as86和Ld86,而head.s使用GNU的汇编程序格式,并且运行在保护模式下,需要GNU的as(gas)进行编译,使用的是AT&T语法。
Linus使用这两种编译器的原因是linus那时的汇编编译器无法支持16位实模式代码程序编译,在内核2.4.x开始,bootsect.s和head.s程序完全使用统一的as来编写。关于GNU as的使用,可参考GNU汇编器手册《Using as-The GNU Assembler》。由此可见,汇编 语法 与 编译器 是相互对应的。看来,应该了解一下编译原理。。。
DOS下的汇编语言编程:
在电脑上安装了纯DOS系统,至于如何安装请参考http://blog.csdn.net/sanlinux/archive/2010/05/01/5549311.aspx
安装了DOS了以后,再下载MASM611编译器,并安装,这样DOS下的汇编环境就搭建好了。MASM使用的是Intel语法,在学校用的就是这种语法,所以现在对这种语法比较熟悉,心里面比较容易接受。
Linux下的汇编语言编程:
一般GNU/Linux系统都会安装好了GNU Assembler,所以就不用单独安装了,可以直接使用了。GAS使用的是AT&T语法。
此外,还有一个汇编编译器-NASM,它既可以在Linux中使用,也可在Windows中使用,它使用的语法是Intel语法,与MASM类似。
Intel语法和AT&T语法的区别:
以下是一段关于两者区别的描述
<
这篇关于linux汇编工具之GAS(ATT 语法)和NASM(Intel 语法)比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!