- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux内核中常用的汇编
[日期:2009-12-15]来源:CSDN
[日期:2009-12-15]
rmirenmT 丁 汇编语言的相关知识
在Linux源代码中,以.S
在Linux源代码中,以.S为扩展名的文件是
相关知识。
和连接程序1 . GNU 汇编程序 GAS ( GNU Assembly
和连接程序
当你编写了一个程序后,就需要对其进行汇编(assembly )和连接。在 Linux下有两种方式,一种是使用汇编程序 GAS和
当你编写了一个程序后,就需要对其进行汇编(
连接程序ld,一种是使用gcc。我们先来看一下 GAS和ld:
GAS把汇编语言源文件(.0 )转换为目标文件(Q ),其基本语法如下:
as filename.s -o filename.o
一旦创建了一个目标文件,就需要把它连接并执行,连接一个目标文件的基本语法为:
ld file name.o -o file name
这里filename.o是目标文件名,而filename是输出(可执行)文件。
GAS使用的是ATT的语法而不是In tel的语法,这就再次说明了 ATT语法是Un ix世界的标准,你必须熟悉它。
如果要使用 GNC的C编译器gcc,就可以一步完成汇编和连接,例如:
gcc -o example example.S
这里,example.S是你的汇编程序,输出文件(可执行文件)名为 example。其中,扩展名必须为大写的 S,这是因为,大 写的S可以使gcc自动识别汇编程序中的 C预处理命令,像#include 、#define、#ifdef、#endif等,也就是说,使 用gcc进行编译,你可以在汇编程序中使用 C的预处理命令。
2. ATT 中的节(Section )
在ATT的语法中,一个节由.section关键词来标识,当你编写汇编语言程序时,至少需要有以下三种节:
.section .data :这种节包含程序已初始化的数据,也就是说,包含具有初值的那些变量,例如:
hello : .string Hello world!\n
hello_len : .long 13
.secti on .bss :这个节包含程序还未初始化的数据,也就是说,包含没有初值的那些变量。当操作
系统装入这个程序时将把这些变量都置为 0,例如:
name : .fill 30 #用来请求用户输入名字
name_len : .Iong 0 #名字的长度(尚未定义)
当这个程序被装入时, name和name_len都被置为0。如果你在.bss节不小心给一个变量赋了初值,这个值也会丢失,
并且变量的值仍为 0。
使用.bss比使用.data的优势在于,.bss节不占用磁盘的空间。在磁盘上,一个长整数就足以存放 .bss节。当程序被装入
到内存时,操作系统也只分配给这个节 4个字节的内存大小。
注意:编译程序把.data和.bss在4字节上对齐(align ),例如,.data总共有34字节,那么编译程序把它对其在 36
字节上,也就是说,实际给它 36字节的空间。
.section .text :这个节包含程序的代码,它是只读节,而 .data和.bss是读/写节。
Linux内核中常用的汇编
[日期:2009-12-15] 来源:CSDN 作者:dylan
3 .汇编程序指令( Assembler Directive )
上面介绍的.section就是汇编程序指令的一种, GNU汇编程序提供了很多这样的指令 (directiv ),这种指令都是以句点(.
)为开头,后跟指令名(小写字母),在此,我们只介绍在内核源代码中出现的几个指令(以 arch/i386/kernel/head.S 中的
代码为例)。
(1 ) ascii stri ng...
.ascii表示零个或多个(用逗号隔开)字符串,并把每个字符串(结尾不 自动加“0字节)中的字符放在连续的地址单元。
还有一个与.ascii类似的.asciz , z代表“0 “即每个字符串结尾自动加一个” 0字节,例如:
in t_msg:
.asciz Unknown in terrupt\n
(2 ) .byte 表达式
.byte表示零或多个表达式(用逗号隔开),每个表达式被放在下一个字节单元。
(3 ) .fill表达式
形式:.fill repeat , size , value其中,repeat、 size禾廿value都是常量表达式。Fill的含义是反复拷贝 size个字节。Repeat可以大于等于 0。size也可以大于等于 0,但不能超过 8,如果超过8,也只取8。把repeat个字节以8个为一组,每组的最高 4个字节内容为0,最低4字节内容置为value。Size禾廿v
您可能关注的文档
- KSZ62075B隧道式灭菌干燥机2确认方案.docx
- KTV感恩节主题活动方案.docx
- LBB1938斑丽功率放大器.docx
- LC480Software1.5中文说明书维护SOP-2010-4-10.docx
- LCD原理及Design注意事项(1).docx
- LDCK系列电磁流量计.docx
- LED的结构及发光原理.docx
- LED路灯产业现状浅析.docx
- led路灯培训资料.docx
- LED日光灯管知识.docx
- 英语人教PEP版八年级(上册)Unit4+writing+写作.pptx
- 人美版美术四年级(上册)8 笔的世界 课件 (1).pptx
- 人美版美术七年级(上册)龙的制作.pptx
- 英语人教PEP版六年级(上册)Unit 2 第一课时.pptx
- 数学苏教版三年级(上册)3.3 长方形和正方形周长的计算 苏教版(共12张PPT).pptx
- 音乐人教版八年级(上册)青春舞曲 课件2.pptx
- 音乐人教版四年级(上册) 第一单元 音乐知识 附点四分音符|人教版.pptx
- 英语人教PEP版四年级(上册)Unit 6 Part B let's learn 1.pptx
- 道德与法治人教版二年级(上册)课件-3.11大家排好队部编版(共18张PPT).pptx
- 人美版美术七年级(上册)《黄山天下奇》课件1.pptx
文档评论(0)