在学习Linux操作系统的过程中,顺便学习了汇编语言,在操作系统的学习过程中,总共遇到过三种汇编,16位实模式下的汇编,32位保护模式下的汇编,C语言的内嵌汇编。这三种汇编分别用在不同的场景。如实模式下的汇编是在刚开机到操作系统启动这段时间运行,主要用来加载操作系统到内存,跳转执行操作系统程序。32位汇编是在操作系统接管硬件之后使用。C语言内嵌汇编可以用在一些代码关键部分,需要对硬件绝对控制的部分。
除了上面这样的分类之外,汇编语言还有两种不同的风格,一种是AT&T风格汇编,一种是Intel风格汇编,这只是语言书写的一种约定,需要使用不同的汇编器进行汇编,学习哪一种都是可以的,但如果要学习操作系统或者以后需要看懂别人的汇编代码,最好两种都学习,总之根据自身需求,不要增加自身负担。
下面,我将具体介绍Linux平台下如何使用汇编语言。
不管在哪一平台下,使用汇编语言都需要三种基本的工具,汇编器,连接器,调试器。只要知道了这三种工具在该平台下具体是什么,就可以很顺利的在此平台下使用汇编语言。
在Linux下,这三种工具也有很多,这里主要介绍其中几种。
1、汇编器
linux下可以使用gas汇编器,这也是gcc依赖的汇编器。基本命令为:as -o hello.o hello.s,需要注意的是,gas汇编器支持的是AT&T风格的和汇编。除gas之外还有一种汇编器:nasm,这种汇编器可以很好的支持Intel风格汇编,汇编速度也更快,命令格式:nasm -f elf hello.asm
2、链接器
由汇编器产生的目标代码是不能直接在计算机上运行的,它必须经过链接器的处理才能生成可执行代码。链接器通常用来将多个目标代码连接成一个可执行代码,这样可以先将整个程序分成几个模块来单独开发,然后才将它们组合(链接)成一个应用程序。 Linux 使用 ld 作为标准的链接程序,它同样也包含在 binutils 软件包中。汇编程序在成功通过 GAS 或 NASM 的编译并生成目标代码后,就可以使用 ld 将其链接成可执行程序了: ld -s -o hello hello.o
3.调试器
Linux下可以使用GDB,DDD,ALD作为调试器
实验:在屏幕上打印出hello world
- 使用Vim编辑器新建hello.asm文件,写入如下代码
- 汇编,链接源代码,并执行