- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux汇编语言开发指南Linux汇编语言开发指南
一、简介 g=!\M?射频网络爱好者之家 -- 6t作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。 Zs%C?射频网络爱好者之家 -- @大多数情况下 Linux 程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在 Linux 操作系统中也可以用完全用 C 语言来实现,再加上 GCC 这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实现情况是 Linux 程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和 libc 无关性。假设要移植 Linux 到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。 \z`qR?射频网络爱好者之家 -- n.-汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点: 8J+A?射频网络爱好者之家 -- s ?射频网络爱好者之家 -- /*能够直接访问与硬件相关的存储器或 I/O 端口; V[xfD能够不受编译器的限制,对生成的二进制代码进行完全的控制; g能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁; =`ydR能够根据特定的应用对代码做最佳的优化,提高运行速度; K能够最大限度地发挥硬件的功能。 a?射频网络爱好者之家 -- 9v同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点: ;d?射频网络爱好者之家 -- OmH?射频网络爱好者之家 -- Q}s|rO编写的代码非常难懂,不好维护; 3;很容易产生 bug,难于调试; x-只能针对特定的体系结构和处理器进行优化; 8I1开发效率很低,时间长且单调。 W?射频网络爱好者之家 -- yTLinux 下用汇编语言编写的代码具有两种不同的形式。第一种是完全的汇编代码,指的是整个程序全部用汇编语言编写。尽管是完全的汇编代码,Linux 平台下的汇编工具也吸收了 C 语言的长处,使得程序员可以使用 #include、#ifdef 等预处理指令,并能够通过宏定义来简化代码。第二种是内嵌的汇编代码,指的是可以嵌入到C语言程序中的汇编代码片段。虽然 ANSI 的 C 语言标准中没有关于内嵌汇编代码的相应规定,但各种实际使用的 C 编译器都做了这方面的扩充,这其中当然就包括 Linux 平台下的 GCC。 2d%YmR?射频网络爱好者之家 -- !%二、Linux 汇编语法格式 G(~H73?射频网络爱好者之家 -- ?kc绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的。但在 Unix 和 Linux 系统中,更多采用的还是 ATT 格式,两者在语法格式上有着很大的不同: 6ww];?射频网络爱好者之家 -- kvXx?射频网络爱好者之家 -- SQ_4=.在 ATT 汇编格式中,寄存器名要加上 % 作为前缀;而在 Intel 汇编格式中,寄存器名不需要加前缀。例如: }PyWB?射频网络爱好者之家 -- oSs%|;ATT 格式 ?pushl %eax s)ZIntel 格式 push eax XtCK?射频网络爱好者之家 -- jA}?射频网络爱好者之家 -- PY在 ATT 汇编格式中,用 $ 前缀表示一个立即操作数;而在 Intel 汇编格式中,立即数的表示不用带任何前缀。例如: L?射频网络爱好者之家 -- [ZiATT 格式 pushl $1 YDX4Intel 格式 push 1 3Y?射频网络爱好者之家 -- -znG?射频网络爱好者之家 -- /ATT 和 Intel 格式中的源操作数和目标操作数的位置正好相反。在 Intel 汇编格式中,目标操作数在源操作数的左边;而在 ATT 汇编格式中,目标操作数在源操作数的右边。例如: wC=/?射频网络爱好者之家 -- FU3ATT 格式 addl $1, %eax [\WIntel 格式 add eax, 1 VnEK?射频网络爱好者之家 --
您可能关注的文档
- lesson65--66.doc
- lesson_S08032_12_1.ppt
- lesson91-92.ppt
- lesson第一课时.ppt
- lex构造词法分析.doc
- LF-A级防火水泥复合保温砂浆外墙外保温系统施工方案.doc
- LFX-912 型继电保护专用收发信机检验规程(新).doc
- LHG0.06-0.04锅炉焊接工艺.doc
- Lesson Three (复旦高级英语第一册).ppt
- libxml2教程.doc
- 2025年金肯职业技术学院单招职业适应性测试题库带答案.docx
- 2025年钦州幼儿师范高等专科学校单招综合素质考试题库完美版.docx
- 2025年钟山职业技术学院单招职业适应性考试题库参考答案.docx
- 2025年金华职业技术学院单招职业技能测试题库附答案.docx
- 2025年闽南理工学院单招职业技能测试题库审定版.docx
- 2025年闽南理工学院单招综合素质考试题库审定版.docx
- 2025年闽南理工学院单招职业倾向性考试题库汇编.docx
- 2025年闽南理工学院单招职业倾向性考试题库推荐.docx
- 2025年闽北职业技术学院单招综合素质考试题库1套.docx
- 2025年长沙轨道交通职业学院单招职业技能考试题库一套.docx
文档评论(0)