杨舒雯 原创作品转载请注明出处 《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内核分析》第一周——计算机是如何工作的?的更多相关文章

  1. Linux内核分析第一周——计算机是如何工作的

    冯诺依曼体系结构 核心思想 1.冯诺依曼是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 2.采用二进制作为计算机数值计算的基础,以0.1代表数值.不采用人类常用的十进制计数方法,二进制使 ...

  2. linux内核分析 第一周 计算机是如何工作的 20125221银雪纯

    我使用的c语言代码是: int g(int x) { return x + 1; } int f(int x) { return g(x); } int main(void) { return f(6 ...

  3. LINUX内核分析第一周学习总结——计算机是如何工作的

    LINUX内核分析第一周学习总结——计算机是如何工作的 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/ ...

  4. Linux内核分析第一周学习博客 --- 通过反汇编方式学习计算机工作过程

    Linux内核分析第一周学习博客 通过反汇编方式学习计算机工作过程 总结: 通过这次对一个简单C程序的反汇编学习,我了解到计算机在实际工作工程中要涉及大量的跳转指针操作.计算机通常是顺序执行一条一条的 ...

  5. linux内核分析第一周学习笔记

    linux内核分析第一周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...

  6. Linux内核分析第二周--操作系统是如何工作的

    Linux内核分析第二周--操作系统是如何工作的 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  7. 《Linux内核分析》 之 计算机是如何工作的

    [李行之原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] <Linux内 ...

  8. Linux内核分析——第一周学习笔记20135308

    第一周 计算机是如何工作的 第一节 存储程序计算机工作模型 1.冯·诺依曼结构模型:冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储 ...

  9. Linux内核分析第一周学习总结:计算机是如何工作的?

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.冯诺依曼体系 ...

  10. Linux内核及分析 第一周 计算机是如何工作的?

    C语言代码: int g(int x) { return x + 5; } int f(int x) { return g(x); } int main(void) { return f(5) + 1 ...

随机推荐

  1. 8.2Solr API使用(Facet查询)

    转载请出自出处:http://eksliang.iteye.com/blog/2165882 一)概述 Facet是solr的高级搜索功能之一,可以给用户提供更友好的搜索体验.在搜索关键字的同时,能够 ...

  2. vue预渲染实践总结

    # 预渲染 ## 预渲染简介 SEO和首屏加载速度慢的问题,社区讨论最多的解决方案是同构 SSR,即首屏使用服务端渲染,之后的交互逻辑交给客户端处理,解决了单页应用带来的两个问题,但是也带来了服务器压 ...

  3. 拯救U盘之——轻松修复U盘“无法访问”的故障

    在使用U盘或者移动硬盘的过程中,大家是否和我一样,有个不好的操作习惯,明知不好但是在每次使用时都很少记得“安全删除硬件”,随手一把走人.终于出问题了,那天给mm复制完资料,拔了再插到自己的电脑上,打开 ...

  4. Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-3-Django项目实例

    使用 Django 我们现在将使用 Compose 配置并运行一个 Django/PostgreSQL 应用.在此之前,先确保 Compose 已经安装. 1.通过编辑 Dockerfile文件来指定 ...

  5. Sql注入测试--Sqlmap

    慕课网sqlmap学习笔记: 一.SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 例如 (1)在url上 ...

  6. shiro实战系列(八)之安全管理器

    Apache Shiro 提供安全框架界独一无二的东西:一个完整的企业级 Session 解决方案,从最简单的命令行及智能手机 应用到最大的集群企业 Web 应用程序.   这对许多应用有着很大的影响 ...

  7. JS对表格排序(支持对序号,数字,字母,日期)

    JS对表格排序(支持对序号,数字,字母,日期) 前不久看到淘宝组件有"对表格排序的插件" 如想要看 可以看这个地址 http://gallery.kissyui.com/KSort ...

  8. POJ 2367 Genealogical tree 拓扑排序入门题

    Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8003   Accepted: 5184 ...

  9. ceph存储osd启动异常处理和正常启停操作

    机器角色:cloudstack虚拟机的宿主机:ceph存储机器. 事件:ceph存储的物理机器由于内存异常,需要停机更换,仅仅是把该物理机上面的虚拟机迁移走,同时启动了停机维护,然后就直接关机.结果造 ...

  10. oracle 将字符串转化为数值型to_number()

    select to_number('22.222') from dual