您的位置:首页 > 运维架构 > Linux

Linux内核学习第1天

2014-04-22 21:14 295 查看
内核编程语言和环境

1. as86汇编器

语法: as[option] –o objfile srcfile

.表示编译过程中的位置计数器

Objfile分为三个段(区):正文段(.text):程序的执行代码和只读数据

数据段(.data):可读/写的数据

未初始化数据段(.bss)





2. GNU as汇编

格式:as [option] [-o objfile] [srcfile.s]



3. 指令(操作码):CPU执行的操作

操作数:指令操作的对象

地址:指定数据在内存中的位置

跳转指令:用于把执行点转移到程序另一个位置处继续执行下去

JMP:无条件跳转:

直接跳转:跳转到的目标指令的地址直接写在跳转指令中

间接跳转:跳转的目的地址存在于寄存器或内存中

条件跳转:使用*作为操作指示符的前缀,该操作符使用movl指令相同的语法

4. 区(节、段、部分):表示一个地址范围

text区、data区、bss区

绝对地址区absolute区 未定义的区undefined区



5. 链接器ld涉及的区:text、data、bss、absolute、undefined

bss区:用于存储局部公共变量

.align:存储对齐命令,用于在当前子区中将计数器的位置设置到下一个指定存储边界处

.ascii “string”:从位置计数器当前位置为字符串分配空间并存储

.asciz “string”:与.ascii相似,每个字符串后自动添加NULL字符

6. C的嵌入汇编: asm(”汇编语句”

:输出寄存器 (可选)

:输入寄存器 (可选)

:会被修改的寄存器); (可选)

内联函数(inline):提高效率



7. 栈:被用来传递函数参数、存储返回信息、临时保存寄存器原有值、存储局部数据

*变量地址压入栈的顺序正好与函数声明的参数顺序相反

在汇编程序调用一个C函数时,程序需要首先按照逆向顺序把函数参数压入栈,

然后CALL执行被调用函数,在函数返回后,程序把先前压入栈的函数参数清除

掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: