Linux内核分析——第一周学习笔记
20135313吴子怡.北京电子科技学院
chapter 1 知识点梳理
第一节 存储程序计算机工作模型
1.冯诺依曼体系结构:即具有存储程序的计算机体系结构。目前大多数拥有计算和存储功能的设备(智能手机、平板、计算机等)其核心构造均为冯诺依曼体系结构
a.从硬件来看:CPU与内存通过主线连接,CPU上的IP(可能是16、32、64位)总指向内存的某一块区域;IP指向的CS(代码段)也在内存中;CPU总是执行IP指向的指令。
b.从软件来看:API(应用程序编程接口,与编程人员)与ABI(程序与CPU的借口界面) 是两个比较重要的软件接口
2、CPU可以抽象成一个for循环,总是从内存中执行下一条指令。
内存:保存指令数据
CPU:解释执行指令、数据
内存与CPU通过总线连接。
3.其他
API:应用程序编程接口
ABI:二进制(指令编码)接口
4.例子
例如:32位计算机X86,EIP指向内存的某条指令
1、自动加到下一条指令,数值加一
2、可被其他指令修改,如CALL,RET,JMP等。
第二节 X86汇编基础
一、X86 CPU的寄存器
16位寄存器:AX,BX,CX,DX,BP,SI,DI,SP等
32位寄存器:EAX累加寄存器,EBX基址寄存器,ECX技术寄存器等 前面加上E的均为32位寄存器。
二、mov指令及几种内存寻址方式
1、movl
a.寄存器寻址%eax,%edx
即操作寄存器,与内存无关,相当于eax=edx
b.立即寻址$0x123,%edx
123这个16进制数值放进寄存器edx中($表示立即数)
c.直接寻址0x123,%edx
123这个地址指向寄存器edx(没有$表示地址)
c.间接寻址(%ebx),%edx
(%ebx)表示ebx这个寄存器存的值为内存地址
d.变值寻址4(%ebx),%edx
在间接寻址的基础上加上4
2、movb:8 bit;movw:16 bit
三、其他指令:push、pop、call、ret
1、pushl %eax
把eax压栈到堆栈栈底
即首先把esp减4
esp表示堆栈栈顶
ebp表示堆栈基址
2、popl %eax
把eax从堆栈栈顶取32位,放在寄存器eax中
即首先把栈顶esp的数值放在eax中,再把栈顶加4
3、call 0x12345
调用该地址
即将当前的eip(当前CPU执行命令的指针)压栈,赋给eip一个新值(CPU下一条执行的指令)
4、ret
即将call时保存的eip还原到eip寄存器,return call之前的那条指令
eip(*)这个*指程序员不能直接修改eip
chapter 2 小练习
堆栈变化如下:
chapter 3 将C代码编译成汇编代码
实验:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
我修改完毕的实验代码如下:
编译:
由于后来转在Ubuntu虚拟机上操作,将所得的汇编代码显示出来如下:
去掉用于关联的代码得到纯汇编代码:
堆栈变化情况演示如下图:
过程完毕。
chapter 4 总结
对“计算机是如何工作的”理解
1、计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作。
2、计算机的工作过程其实集中在了CPU和为其传输数据的地址总线上。计算机执行的最底层的操作其实就是N种指令而已。
3、CPU可以抽象成一个for循环,总是从内存中执行下一条指令。内存负责保存指令数据,CPU负责解释执行指令、数据。内存与CPU通过总线连接。
4、CPU中一个关键寄存器IP总是指向内存中某块区域。计算机在工作时会先从内存中取出一条IP指向的指令给CPU执行,按指令的要求从存储器中取出数据进行指定的运算和逻辑操作,然后再把结果送到内存中去。
chapter 5 附录
作者:吴子怡.北京电子科技学院
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
转载于:https://www.cnblogs.com/paperfish/p/5218231.html
Linux内核分析——第一周学习笔记相关推荐
- 20135320赵瀚青LINUX内核分析第一周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.概述 第一周的学习内容主 ...
- Linux内核分析——第二周学习笔记
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 (一)计算机是如何工作的?(总结)--三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,高 ...
- LINUX内核分析第二周学习总结——操作系统是如何工作的
LINUX内核分析第二周学习总结--操作系统是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- Linux内核分析第一周——计算机是如何工作的
冯诺依曼体系结构 核心思想 1.冯诺依曼是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 2.采用二进制作为计算机数值计算的基础,以0.1代表数值.不采用人类常用的十进制计数方法,二进制使 ...
- 机电传动控制课程第一周学习笔记
机电传动课程第一周学习笔记 本周的学习内容主要是第一章绪论和第二章机电传动系统的动力学基础,结合课程学习和预习复习回顾内容如下: 1.绪论:学习了机电传动控制目的与任务.发展历程和我们该如何学习这门课 ...
- 机电传动控制第一周学习笔记
机电传动控制第一周学习笔记: 1 这一周主要讲述了概论和机电传动控制系统动力学基础两个章节内容. 2 绪论中说明了<机电传动控制>课程主要内容为下图所示: 3机电传动控制系统动力学基础章节 ...
- Linux内核设计与实现学习笔记目录
**注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...
- Linux内核分析第二周:操作系统是如何工作的
第一讲 函数调用堆栈 计算机是如何工作的? (总结)--三个法宝 1,存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: 2,函数调用堆栈,高级语言得以运行的基础,只有机器语言和汇编语言的时候堆 ...
- HTML第一周学习笔记(标题重置版)
适合新手小白的HTML网页编辑 前 言 一.HTML简介基本元素组成 二.实操重点信息 1.引入链接 2.定义数据 3.图片插入 总结 前 言 博客学习记录于3月4日星期四完成上传编辑,作为刚刚新手小 ...
最新文章
- html保存blob,HTML文本图像并保存为Blob到数据库
- python安卓版汉化版-手机随时随地写Python,还可以开发安卓APP,太厉害了!
- java调用net_Java调用C#.net开发的WebService
- [react] 在React中你有经常使用常量吗?
- 2018-2019-1 20165236《信息安全系统设计基础》第八周学习总结
- Python--面向对象学习继承(11.17)
- SilverLight 初探一
- As Foxit Software disclosed in its prospectus
- Windows CE 5.0待机界面定制之一 - Taskbar的位置
- 「随机化快排」期望运行时间证明
- 朝阳正规的计算机学校有哪些,朝阳都有哪些专科学校
- Python绘制中国地图
- 漫画:骚操作系列(必须掌握的疯子找座问题)
- 微信公众号网页 H5 video 标签自动播放
- 高通骁龙芯片的随身wifi入门刷机教程
- anacnda 子环境管理
- 魔兽世界怀旧服最新服务器开发时间,怀旧服全部服务器开放时间
- Linux浏览器无法访问网络解决方案
- 7-301 sdut- C语言实验-数组逆序(数组移位)
- 全面解析:服务蓝图的应用逻辑
热门文章
- setInterval读取外部变量
- Logical 导入模式
- 干货!半监督预训练对话模型 SPACE
- win7计算机腾讯视频无法删除,处置win7系统清理腾讯视频垃圾缓存的图文方法
- python的split函数作用_python 字符split(python的split函数作用)
- 3.04.25Promise对象
- 关于GCN的论文笔记--End-to-end Structure-Aware Convolutional Networks for Knowledge Base Completion
- c++程序打印运行时间
- 2022-2028年全球及中国旋转门行业发展现状调研及投资前景分析
- c语言中listempty函数,C++ list empty()用法及代码示例