内核编程语言和环境

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执行被调用函数,在函数返回后,程序把先前压入栈的函数参数清除

掉。

 

 

Logo

更多推荐