- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ATT汇编语言格式
汇编语言的优点是速度快,可以直接对硬件进行操作,这对诸如图形处理等关键应用是非常重要的。Linux 是一个用 C 语言开发的操作系统,这使得很多程序员开始忘记在 Linux 中还可以直接使用汇编这一底层语言来优化程序的性能。本文为那些在Linux 平台上编写汇编代码的程序员提供指南,介绍 Linux 汇编语言的语法格式和开发工具,并辅以具体的例子讲述如何开发实用的Linux 汇编程序。
一、简介
作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 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 系统中,更多采用的还是 ATT 格式,两者在语法格式上有着很大的不同:
在 ATT 汇编格式中,寄存器名要加上 % 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如:
ATT 格式 Intel 格式 pushl %eax push eax 在 ATT 汇编格式中,用 $ 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如:
ATT 格式 Intel 格式 pushl $1 push 1 ATT 和 Intel 格式中的源操作数和目标操作数的位置正好相反。在 Intel 汇编格式中,目标操作数在源操作数的左边;而在 ATT 汇编格式中,目标操作数在源操作数的右边。例如:
ATT 格式 Intel 格式 addl $1, %eax add eax, 1 在 ATT 汇编格式中,操作数的字长由操作符的最后一个字母决定,后缀b、w、l分别表示操作数为字节(byte,8 比特)、字(word,16 比特)和长字(long,32比特);而在 Intel 汇编格式中,操作数的字长是用 byte ptr 和 word ptr 等前缀来表示的。例如:
ATT 格式 Intel 格式 movb val, %al mov al, byte ptr val 在 ATT 汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上*作为前缀,而在 Intel 格式中则不需要。
远程转移指令和远程子调用指令的操作码,在 ATT 汇编格式中为 ljump 和 lcal
您可能关注的文档
- 420kvar复合开关型电容柜描述样本.doc
- 35-两缸两排汽超超临界汽轮机的优越性-90.doc
- 3常用冲压材料及钢材大全.doc
- 3D图解心脏解剖与心脏超声切面.doc
- 435不完美越狱.doc
- 43博弈论与国际斡旋.doc
- 4gl的内建函数和操作符简介.doc
- 42何关新同志在区第十二次党代会上的报告.doc
- 4SPSS结果窗口用法详解.doc
- 4补给水处理岗位WD.doc
- 2025届高考英语二轮复习《形容词和副词》课件.pdf
- 2025年新高考语文复习 文言文阅读——概括分析文意客观题 课件.pdf
- Windows Server网络管理项目教程(Windows Server 2022)(微课版)2.1 知识引入.pptx
- 2024-2025学年高一英语必修第一册(人教版)同步课堂 Unit 1 Teenage Life:Period 1 Listening and Speaking【配套课件】.pdf
- Windows Server网络管理项目教程(Windows Server 2022)(微课版)5.1 知识引入.pptx
- 2024年(新高考Ⅰ卷)英语阅读理解真题讲评 课件.pdf
- 2025届高考日语二轮复习《作文写作技巧》课件.pdf
- 2025届高考语文二轮复习《作文审题立意》课件.pdf
- Windows Server网络管理项目教程(Windows Server 2022)(微课版)5.7 拓展案例3:配置FTP站点用户隔离.pptx
- 2024年度SaaS安全调查报告.pdf
最近下载
- 神经外科介入神经放射治疗技术操作规范2023版.pdf VIP
- 《IE基础知识培训》PPT课件.ppt
- 神经系统体格检查演示课件.ppt
- 《财经法规与会计职业道德》习题答案及解析.pdf VIP
- 租赁合同模板下载打印5篇.docx
- 专题1.2 全等图形和全等三角形(分层练习)-2023-2024学年八年级数学上册基础知识专项突破讲与练(苏科版).docx VIP
- 《时间序列分析》PPT课件(全).pptx
- 电大一网一《网络存储技术》形考任务三:基于iSCSI传输的配置与管理形考任务三:基于iSCSI传输的配置与管理(1).docx VIP
- 学校“四个一”突发事件应急处置工作机制范文(6篇).pdf VIP
- 饱和聚酯培训资料.ppt
文档评论(0)