主要参考这篇文章:Linux 汇编语言开发指南
1.汇编器
汇编器(assembler)的作用是将用汇编语言编写的源程序转换成二进制形式的目标代码。Linux 平台的标准汇编器是 GAS,它是 GCC 所依赖的后台汇编工具,通常包含在 binutils 软件包中。GAS 使用标准的 AT&T 汇编语法,可以用来汇编用 AT&T 格式编写的程序:
[xiaowp@gary code]$ as -o hello.o hello.s |
Linux 平台上另一个经常用到的汇编器是 NASM,它提供了很好的宏指令功能,并能够支持相当多的目标代码格式,包括 bin、a.out、coff、elf、rdf 等。NASM 采用的是人工编写的语法分析器,因而执行速度要比 GAS 快很多,更重要的是它使用的是 Intel 汇编语法,可以用来编译用 Intel 语法格式编写的汇编程序:
[xiaowp@gary code]$ nasm -f elf hello.asm |
2.链接器
由汇编器产生的目标代码是不能直接在计算机上运行的,它必须经过链接器的处理才能生成可执行代码。链接器通常用来将多个目标代码连接成一个可执行代码,这样可以先将整个程序分成几个模块来单独开发,然后才将它们组合(链接)成一个应用程序。 Linux 使用 ld 作为标准的链接程序,它同样也包含在 binutils 软件包中。汇编程序在成功通过 GAS 或 NASM 的编译并生成目标代码后,就可以使用 ld 将其链接成可执行程序了:
[xiaowp@gary code]$ ld -s -o hello hello.o
在64位机器上,上面的链接命令会报错,用下面这个:
ld -m elf_i386 -s -o hello hello.o
本文介绍了Linux平台上的汇编语言开发流程,包括使用GAS和NASM两种汇编器进行汇编,以及如何利用ld链接器将目标代码链接成可执行文件。
1442

被折叠的 条评论
为什么被折叠?



