20169219 linux内核原理与分析第二周作业

“linux内核分析”的第一讲主要讲了计算机的体系结构,和各寄存器之间对数据的处理过程。
通用寄存器
AX:累加器
BX:基地址寄存器
CX:计数寄存器
DX:数据寄存器
BP:堆栈基址针
SI、DI:变址寄存器
SP:堆栈顶指针

段寄存器
CS:代码段寄存器,指向包含程序指令的段。
SS:栈段寄存器,指向包含当前程序栈的段。
DS:数据段寄存器,指向包含静态数据或者全局数据段。
ES:附加寄存器,指向附加数据段。

IP:指令指针。CPU在实际取指令时根据CS:IP来准确定位一个指令。
寄存器的位数不同分别用不同的字母表示,b w l q 分别代表8位,16位,32位,64位。如movl即表示32位的mov指令。

几种寻址方式
指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器的寻址方式称为寄存器寻址方式。
操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。
指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。
操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。
相对应的C语言表示为:
movl %eax,%edx edx=eax 寄存器寻址
movl $0x23,%edx edx=0x123 立即寻址
movl 0x123,%edx edx=(int32_t)0x123 直接寻址
movl (%ebx),%edx edx=(int32_t)ebx 间接寻址

其他常用指令:
pushl %eax
pop %eax
在32位寄存器中push 压栈时地址减4,pop 出栈时地址加4。
call 函数调用
call 0x12345 pushl %eip(); movl $0x12345,%eip()

ret popl %eip(*)

enter pushl %ebp; movl %esp,%ebp

leave movl %ebp,%esp; popl %ebp
通过具体C程序的分析,理解了代码对应的操作指令,及指令执行过程中堆栈变化,对于计算机操作有了更好的理解。
之前学过微机原理,再看一下相关书籍,理解的会更加深入。

学习《linux内核设计与实现》教材,在下载安装linux内核的时候总是出现错误,暂时还没解决,需要再查资料分析出现问题的原因,解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庭一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值