Linux汇编编程

一、Linux汇编编程

1、简介

作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却毋庸置疑,因为它能够完成许多其他语言无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免的在某些地方使用了汇编代码,其中主要是在 Linux 的启动部分。由于这部分代码与硬件的关系十分密切,即使是使用 C 语言也会显得力不从心,因而只有汇编语言才能胜任这部分工作,最大限度的发挥出硬件的性能。

2、汇编语法格式

DOS/Windows 下的汇编语言代码都是 Intel 风格的,而 Linux 和 Unix 系统中更多采用的是 AT&T 格式,两者在语法格式上主要差异如下:

1)在 AT&T 汇编格式中,寄存器名要加上"%"号作为前缀;而在 Intel 汇编格式中则不需要

AT&T 格式           pushl %eax 
Intel格式           push eax

2)在 AT&T 汇编格式中,用 ‘$’ 前缀表示一个立即数;Intel 格式不用带任何前缀

AT&T 格式           pushl $1
Intel格式           push 1

3)AT&T 和 Intel 格式中的源操作数和目标操作数的位置正好相反

AT&T 格式           addl $1,%eax     // 在AT&T汇编格式中源操作数在目标操作数的左边
Intel格式           add eax,1

3、汇编工具

Linux 平台下的汇编工具种类虽然很多,但同 DOS/Windows 一样,最基本的人仍然是汇编器、链接器和调试器。

3.1、汇编器

汇编器(assembler)的作用是将汇编语言源程序转换成二进制形式的目标代码。Linux 平台的标准汇编器是 GAS ,它是 GCC 所依赖的后台汇编工具,通常包含在 binutils 软件包中。GAS 使用标准的 AT&T 汇编语法,可以用来汇编 AT&T 格式的源代码

as -o hello.o hello.s

3.2、连接器

汇编器所产生的目标代码是不能够直接在计算机上运行的,它必须经过链接器的处理才能生成可执行文件。链接器通常用来将多个目标代码连接成一个可执行文件,这样可以先将程序分为几个单独的模块来开发,然后将它们组合成一个完整的程序。Linux 使用 ld 作为标准的链接程序,它同样也包含在 binutils 软件包中。汇编源代码在成功通过 GAS 或 NASM 生成目标代码后,就可以使用 ld 将其链接成可执行文件了

ld -s -o hello hello.o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值