Linux汇编详解.pdf

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux汇编详解.pdf

Linux 中的汇编语言 在阅读 Linux 源代码时,你可能碰到一些汇编语言片段,有些汇编语言出现在以.S 为扩展名的汇编文件中,在这种文件中,整个程序全部由汇编语言组成。有些汇编命令出 现在以.c 为扩展名的 C 文件中,在这种文件中,既有 C 语言,也有汇编语言,我们把出 现在 C 代码中的汇编语言叫所“嵌入式”汇编。不管这些汇编代码出现在哪里,它在一定 程度上都成为阅读源代码的拦路虎。 尽管 C 语言已经成为编写操作系统的主要语言,但是,在操作系统与硬件打交道的过 程中,在需要频繁调用的函数中以及某些特殊的场合中,C 语言显得力不从心,这时, 繁琐但又高效的汇编语言必须粉墨登场。因此,在了解一些硬件的基础上,必须对相关的 汇编语言知识也所有了解。 读者可能有过在 DOS 操作系统下编写汇编程序的经历,也具备一定的汇编知识。但是, 在 Linux 的源代码中,你可能看到了与 Intel 的汇编语言格式不一样的形式,这就是 ATT 的 386 汇编语言。 一、ATT 与 Intel 汇编语言的比较 我们知道,Linux 是 Unix 家族的一员,尽管 Linux 的历史不长,但与其相关的很多事 情都发源于 Unix。就 Linux 所使用的 386 汇编语言而言,它也是起源于 Unix。Unix 最初是 为 PDP-11 开发的,曾先后被移植到 VAX 及 68000 系列的处理器上,这些处理器上的汇编 语言都采用的是 ATT 的指令格式。当 Unix 被移植到 i386 时,自然也就采用了 ATT 的汇 编语言格式,而不是 Intel 的格式。尽管这两种汇编语言在语法上有一定的差异,但所基 于的硬件知识是相同的,因此,如果你非常熟悉 Intel 的语法格式,那么你也可以很容 易地把它“移植“到 ATT 来。下面我们通过对照 Intel 与 ATT 的语法格式,以便于你把 过去的知识能很快地“移植”过来。 1.前缀 在 Intel 的语法中,寄存器和和立即数都没有前缀。但是在 ATT 中,寄存器前冠以 “%”,而立即数前冠以“$”。在 Intel 的语法中,十六进制和二进制立即数后缀分别 冠以“h”和“b”,而在 ATT 中,十六进制立即数前冠以“0x”,表 2.2 给出几个相应 的例子。 表 2.2 Intel 与 ATT 前缀的区别 Intel 语法 ATT 语法 mov eax,8 movl $8,%eax mov ebx,0ffffh movl $0xffff,%ebx int 80h int $0x80 2. 操作数的方向 Intel 与 ATT 操作数的方向正好相反。在 Intel 语法中,第一个操作数是目的操作数, 第二个操作数源操作数。而在 ATT 中,第一个数是源操作数,第二个数是目的操作数。由 此可以看出,ATT 的语法符合人们通常的阅读习惯。 例如:在 Intel 中, mov eax,[ecx] 在 ATT 中,movl (%ecx),%eax 3.内存单元操作数 从上面的例子可以看出,内存操作数也有所不同。在 Intel 的语法中,基寄存器用“ []”括起来,而在 ATT 中,用“()”括起来。 例如: 在 Intel 中,mov eax,[ebx+5] 在 ATT,movl 5(%ebx),%eax 4.间接寻址方式

文档评论(0)

tangtianxu1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档