《Linux内核分析》第一周——计算机是如何工作的?
杨舒雯 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
课程内容
1.诺曼依体系结构
诺曼依体系结构等于程序存储计算机

2.x86汇编基础
x86寄存器
通用寄存器

段寄存器

常用汇编指令
作业部分
实验内容
实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同)
使用
gcc –S –o main.s main.c -m32
命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同
int shu(int x)
{
return x + 1;
}
int wen(int x)
{
return shu(x);
}
int main(void)
{
return f(5) + 4;
}
出栈入栈图解:


main函数:

18:将ebp的值=100压栈,ebp->100,esp->96
19:将esp的值赋给ebp,ebp->96,esp->96
20:esp值减4,ebp->96,esp->92
21:将7赋给esp当前所指位置
22:保存当前eip的值(23行),将函数wen的第一条指令地址(9行)赋给eip,ebp->96,esp->88
wen函数:

9: 将当前ebp的值压栈,ebp->96,esp->88
10:将esp的值赋给ebp,ebp->88,esp->88
11:将esp的值减4,ebp->88,esp->84
12:将ebp+8后地址内所指数据(5)赋给eax,eax=5
13:将eax=5赋给esp当前所指位置
14:保存当前eip的值(15行),将函数shu第一条指令的地址(2行)赋给eip,esp减4,ebp->84,esp->76
shu函数:

2:将ebp的值压栈,ebp->84,esp->76
3:将esp的值赋给ebp,ebp->72,esp->72
4:将ebp+8后地址内所指数据(5)赋给eax,eax=5
5:eax+1=5+1=6
6:数据出栈,将当前esp所指地址内的数据赋给ebp,esp加4,ebp->84,esp->76
7:返回第15行指令,ebp->84,esp->88
wen函数:

15:将ebp的值赋给esp,ebp->84,esp->84,数据出栈,ebp->96,esp->88
16:数据出栈,返回第23行指令,ebp->96,esp->92
main函数:

23:eax+1=6+1=7
24:将ebp的值赋给esp,ebp->96,esp->96,数据出栈,ebp->100,esp->100
总结
通过对诺曼依体系结构的了解,加深了对计算机工作过程了理解,并且在实验中对代码的分析,x86汇编指令的了解也更加深入。
在我的理解中:
- 计算机系统由硬件系统和软件系统两大部分组成。
- 使用低级机器语言,指令通过操作码来完成简单的操作
- 执行程序时须先将要执行的相关程序和数据放入内存储器中
- 在执行程序时CPU,将当前正在执行的程序的相关指令的数据都暂时保存在堆栈中以便于取用和计算,从内存中取出指令并执行指令,直到程序结束指令时才停止执行。
- 将计算的结果放入指令指定的存储器地址中。
《Linux内核分析》第一周——计算机是如何工作的?的更多相关文章
- Linux内核分析第一周——计算机是如何工作的
冯诺依曼体系结构 核心思想 1.冯诺依曼是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 2.采用二进制作为计算机数值计算的基础,以0.1代表数值.不采用人类常用的十进制计数方法,二进制使 ...
- linux内核分析 第一周 计算机是如何工作的 20125221银雪纯
我使用的c语言代码是: int g(int x) { return x + 1; } int f(int x) { return g(x); } int main(void) { return f(6 ...
- LINUX内核分析第一周学习总结——计算机是如何工作的
LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...
- Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程
Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...
- linux内核分析第一周学习笔记
linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- Linux内核分析第二周--操作系统是如何工作的
Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...
- 《Linux内核分析》 之 计算机是如何工作的
[李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...
- Linux内核分析——第一周学习笔记20135308
第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...
- Linux内核分析第一周学习总结:计算机是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...
- Linux内核及分析 第一周 计算机是如何工作的?
C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1 ...
随机推荐
- 【Alpha 冲刺】 7/12
今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 建立数据库 已完成 孙浩楷 完成作业列表界面 已完成 胡冰 完成作业展示页面 已完成 练斐弘 完成课件列表页面 未完成 时间不够 ...
- 【Python】os.path.isfile()的使用方法汇总
方法一: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as d filepath = r'E: ...
- JDK 环境变量 Windows配置
安装完成JDK后需要配置环境变量,下面是环境变量的配置方法 1.配置环境变量: 对于Java程序开发而言,主要会使用JDK的两个命令:javac.exe.java.exe.路径:C:\Java\jdk ...
- centos7装机教程
U盘启动电脑进入安装界面 正常情况下你应该会看到下面的这个界面: 选择第一项,然后按TAB键,然后会看到下面这个: 3.修改第二步中按TAB键出来的命令 将命令修改为:>vmlinuz init ...
- Python os.md
os 便携式访问操作系统的特定功能.os模块提供了对特定平台模块(如posix, nt, mac)的封装, 函数提供的api在很多平台上都可以相同使用, 所以使用os模块会变得很方便. 但不是所有函数 ...
- datagridview 获取选中行的索引
C# CODE for (int i = 0; i < this.dataGridView1.SelectedRows.Count; i++)//遍历所有选中的行 { this.dataGrid ...
- POJ3801 Crazy Circuits
嘟嘟嘟 上下界网络流之最小流. 建图不说啦,裸的. 在有附加源\(S\)和附加汇\(T\)的图上跑完后,删除和\(S, T\)相连的边.然后因为可能流多了,所以现在应该退流,于是我们从\(t\)到\( ...
- JS 点击元素发ajax请求 打开一个新窗口
JS 点击元素发ajax请求 打开一个新窗口 经常在项目中会碰到这样的需求,点击某个元素后,需要发ajax请求,请求成功以后,开发需要把链接传给前端(或者说请求成功后打开新窗口),前端需要通过新窗口打 ...
- js基础知识入门总结
1.第一个js程序 一个项目包括三部分:前端(html.css.js).数据库.后端技术 引入方式:页面中直接写,script标签引入 js事件绑定: <input type="but ...
- ME_PROCESS_PO_CUST 实现采购订单行项目增强
用户希望创建采购订单时,输入行项目时,能根据采购订单类型,自动带出科目分类类别. 业务顾问看了一下配置,不能实现这个功能,所以用增强实现. 采购订单BADI增强:ME_PROCESS_PO_CUST. ...