Linux内核分析 计算机是如何工作的? 学习笔记

一、存储程序计算机工作模型

1、冯·诺依曼体系结构

2、API:程序员与计算机的接口界面。
3、ABI:程序与CPU的接口界面。

二、X86汇编基础

1、X86寄存器
(1)8位:
低位:AL,BL,CL,DL
高位:AH,BH,CH,DH
(2)16位:AX,BX,CX,DX
(3)32位:
累加器:EAX
基地址寄存器:EBX
计数寄存器:ECX
数据寄存器:EDX
堆栈基指针:EBP
变址寄存器:ESI,EDI
堆栈顶指针:ESP
(4)段寄存器:
代码段寄存器:CS,代码段的段值
数据段寄存器:DS,数据段的段值
附加段寄存器:ES、FS、GS,附加数据段的段值
堆栈段寄存器:SS,堆栈段的段值

2、CPU在实际取指令时根据cs:eip来准确定位一个指令。

三、X86指令

1、mov指令:
b,w,l,q分别代表8,16,32,64位
寄存器模式,以%开头的寄存器。
立即数是以$开头的数值。
(1)寄存器寻址:movl %eax,$edx edx=eax;
(2)立即寻址:movl $0x123,%edx edx=0x123;
(3)直接寻址:movl 0x123,%edx edx= *(int32_t*)0x123;
(4)间接寻址:movl (%ebx),%edx edx= *(int32_t)*edx;
(5)变址寻址:movl 4(%ebx),%edx edx=*(int32_t)(ebx+4);
2、Linux内核使用的是AT&T汇编格式,与Intel汇编格式略有不同。
3、eip寄存器不能被直接修改,只能通过特殊指令间接修改。
4、push指令
pushl %eax等价于:
subl $4,%esp
movl %eax,(%esp)
先栈顶指针esp减4,然后将eax寄存器的内容放入栈。
5、pop指令
pop %eax等价于:
movl (%esp),%eax
addl $4,%esp
先将eax寄存器的内容移出栈,然后栈顶指针esp加4。
6、call指令
call 0x12345等价于
pushl %eip
movl $0x12345,%eip(*)
先将eip压栈,然后将立即数0x12345放入eip。
eip是指令指针,所以它会从地址为0x12345开始取地址。
7、ret指令
ret等价于:popl %eip(*)
把call的时候保存的eip弹栈。
8、实例分析

四、三个法宝

1、存储程序计算机工作模型,计算机系统最最基础性的逻辑结构;
2、函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆栈机制对于计算机来说并不那么重要,但有了高级语言及函数,堆栈成为了计算机的基础功能;

enter  
    pushl %ebp
    movl %esp,%ebp
leave  
    movl %ebp,%esp
    popl %ebp

函数参数传递机制和局部变量存储
3、中断,多道程序操作系统的基点,没有中断机制程序只能从头一直运行结束才有可能开始运行其他程序。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值