使用linux汇编语言 pdf,linux汇编语言开发指南.pdf

Linux 汇编语言开发指南

汇编语言的优点是速度快 ,可以直接对硬件进行操作 ,这对诸如图形处理等关键应用是非常重要的。Linux 是一个用 C

语言开发的操作系统 ,这使得很多程序员开始忘记在 Linux 中还可以直接使用汇编这一底层语言来优化程序的性能。本

文为那些在Linux 平台上编写汇编代码的程序员提供指南 ,介绍 Linux 汇编语言的语法格式和开发工具 ,并辅以具体的例

子讲述如何开发实用的Linux 汇编程序。

本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生 ,主要从事操作系统和分布式计算环境的研究 ,喜爱Linux和Python。你可以通过

xiaowp@263.net与他取得联系。

2003 年 7 月 03  日

一、简介

作为最基本的编程语言之一 ,汇编语言虽然应用的范围不算很广 ,但重要性却勿庸置疑 ,因为它能够完成

许多其它语言所无法完成的功能。就拿 Linux 内核来讲 ,虽然绝大部分代码是用 C 语言编写的 ,但仍然不

可避免地在某些关键地方使用了汇编代码 ,其中主要是在 Linux 的启动部分。由于这部分代码与硬件的关

系非常密切 ,即使是 C 语言也会有些力不从心 ,而汇编语言则能够很好扬长避短 ,最大限度地发挥硬件的

性能。

大多数情况下 Linux 程序员不需要使用汇编语言 ,因为即便是硬件驱动这样的底层程序在 Linux 操作系统

中也可以用完全用 C 语言来实现 ,再加上 GCC 这一优秀的编译器目前已经能够对最终生成的代码进行很

好的优化 ,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实现情况是 Linux 程序员有时还

是需要使用汇编 ,或者不得不使用汇编 ,理由很简单 :精简、高效和 libc 无关性。假设要移植 Linux 到某

一特定的嵌入式硬件环境下 ,首先必然面临如何减少系统大小、提高执行效率等问题 ,此时或许只有汇编

语言能帮上忙了。

汇编语言直接同计算机的底层软件甚至硬件进行交互 ,它具有如下一些优点 :

能够直接访问与硬件相关的存储器或 I/O 端口;

能够不受编译器的限制 ,对生成的二进制代码进行完全的控制 ;

能够对关键代码进行更准确的控制 ,避免因线程共同访问或者硬件设备共享引起的死锁 ;

能够根据特定的应用对代码做最佳的优化 ,提高运行速度 ;

能够最大限度地发挥硬件的功能。

同时还应该认识到 ,汇编语言是一种层次非常低的语言 ,它仅仅高于直接手工编写二进制的机器指令码 ,

因此不可避免地存在一些缺点 :

编写的代码非常难懂 ,不好维护 ;

很容易产生 bug ,难于调试 ;

只能针对特定的体系结构和处理器进行优化 ;

开发效率很低 ,时间长且单调。

Linux 下用汇编语言编写的代码具有两种不同的形式。第一种是完全的汇编代码 ,指的是整个程序全部用汇

编语言编写。尽管是完全的汇编代码 ,Linux 平台下的汇编工具也吸收了 C 语言的长处 ,使得程序员可以

使用 #include、#ifdef 等预处理指令 ,并能够通过宏定义来简化代码。第二种是内嵌的汇编代码 ,指的是

可以嵌入到C语言程序中的汇编代码片段。虽然 ANSI 的 C 语言标准中没有关于内嵌汇编代码的相应规

定 ,但各种实际使用的 C 编译器都做了这方面的扩充 ,这其中当然就包括 Linux 平台下的 GCC。

二、Linux 汇编语法格式

绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言 ,这些汇编代码都是 Intel 风格的。但在

Unix 和 Linux 系统中,更多采用的还是 AT&T 格式 ,两者在语法格式上有着很大的不同 :

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

例如 :

AT&T 格式 Intel 格式

pushl %eax push eax

2.  在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数 ;而在 Intel 汇编格式中,立即数的表示不用带任

何前缀。例如 :

AT&T 格式 Intel 格式

pushl $1 push 1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值