深入理解计算机

一、计算机是如何工作的

1、1 计算机的三个法宝

存储程序计算机、函数调用堆栈、中断机制。

堆栈是C语言程序运行时必须记录调用路径和参数的空间。(函数调用框架、传递参数、保存返回地址、提供局部变量空间)

1、2 深入理解函数堆栈

(1)push栈顶减少4个字节

pop栈顶增加4个字节

ebp在C语言中用作记录当前函数调用基址

(2)其他关键寄存器

(3)函数堆栈框架

        

1、3 参数传递与局部变量

(1) 生成反汇编代码

(2)分析语句示例

sub &0x18,%esp在堆栈中预留出空间存储变量

二、借助Linux内核部分源代码模拟存储程序计算机工作模型及时钟中断

2、1 mykernel实验背后涉及的思想

一个 程序有一个自己的执行流,如何切换到另一个程序?

由CPU和内核代码共同实现了保护现场和恢复现场,当中断信号发生,cpu把当前信号的esp、ebp压到内核堆栈中去,把eip指向中断处理程序的入口。

2、2 利用mykernel实验模拟计算机硬件平台

(1)利用实验楼的平台搭建

自己实验截图:

时间: 2024-08-15 04:30:53

深入理解计算机的相关文章

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1 1)实验部分(以下命令为实验楼64位Linux虚拟机环境下适用,32位Linux环境可能会稍有不同) 使用 gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与

理解计算机的工作方式——通过汇编一个简单的C程序并分析汇编代码

Author: 翁超平 Notice:原创作品转载请注明出处 See also:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000  本文通过汇编一个简单的C程序,并分析汇编代码,来理解计算机是如何工作的.整个过程都在实验楼上完成,感兴趣的读者可以通过上面给出的课程链接自行动手学习.以下是实验过程和结果. 一.操作步骤 1.首先在通过vim程序建立main.c文件.代码如下: 图1 2.使用如下命令将main.c编

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理

Linux内核设计第一周 ——从汇编语言出发理解计算机工作原理 作者:宋宸宁(20135315) 一.实验过程 图1 编写songchenning5315.c文件 图2 将c文件汇编成32位机器语言 图3 将.s文件中的链接语句删除,获得最后的汇编代码 二.分析堆栈变化情况 三.总结 阐明对“计算机是如何工作的”的理解. ①计算机是依据冯诺依曼体存储结构,依据其核心思想——存储程序计算机工作模型,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作. ②从硬件的角度看,是通过总线连接C

Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理

Linux内核设计(第一周)--从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 从2月22日起,本学期的linux课程开始了.通过这两天的学习,觉得孟宁老师讲的真不错,条理清晰,举例适当.本周从计算机工作原理出发,回顾了冯诺依曼计算机结构,也回顾了汇编寄存器.汇编指令.C语言程序的汇编分析技巧,很

深入理解计算机操作系统--读书笔记-第八章异常

该文章是我对深入理解计算机操作系统这本书的读书笔记 异常概念:异常就是控制流的突变,用来响应处理器状态中的某些变化,当处理器状态发生变化时,处理器正在执行某个当前指令,在处理器中状态编码为不同的位和信号,状态变化称之为事件,事件可能与当前指令有关如缺页,算术溢出,也可能无关定时器产生信号或者io请求 异常处理完成的三种情况 1)处理程序将控制返回给当前指令 2)处理程序将控制返回给下一条指令 3)处理程序终止被中断的程序 异常处理和过程调用的区别: 1)过程调用时,在跳转处理程序之前,处理器将返

一个简单的内存分配器-《深入理解计算机操作系统》

我相信很多人都知道<深入理解计算机操作系统>这本书,并且很多人都会对它研读.实际本人刚开始看的时候,只是加深了对操作系统的理解,别的到是没有感觉的到, 但是在看到公司的软件框架里面对于内存堆的管理,才发现和书上讲的异曲同工.于是乎,自己对利用隐式的空闲链表实现分配器做了总结,并且和自己想到的架构做了对比分析. 我们知道一个实际的分配器,不仅要考虑好吞吐率和内存利用率之间的平衡,还要考虑: ①空闲块组织:我们如何记录空闲块(一般刚开始会把一整段堆当做空闲块,然后再分割) ②放置:我们如何选择一个

理解计算机寻址

现在,我们常用的计算机已经达到了64位寻址,以前的机器有32位寻址,16位寻址.单片机是计算机的CPU雏形,是8位寻址,然而,怎么理解寻址呢? 科学研究指出,一个人的智力有大小,它很大程度上取决于记忆力水平,同样,计算机的性能也主要取决于它的存储能力——内存,内存越大,性能越强.内存就相当于我们住的房子,而内存地址就是我们房子的地址,我们要区分清楚“房子”和“房子地址”是两个完全不同的概念,通过房子地址可以找到我们的房子,通过内存地址也可以找到内存单元. 那么,寻址为什么要有64位,32位之分呢

面试突击(一)——理解计算机基石

学习计算机也有些时间了,慢慢的理解了一些原来不太理解的东西,今年输入了一些东西但是输出的很少,发现自己越学习越感觉自己什么都不会,我不是天才不能无师自通也不算聪明什么东西一学就会,其实慢慢的发现自己比较的愚钝,许多东西都学习的比较慢,而且有些东西要花许久的时间才能学习的明白.但是也不能不学习,人生如逆水行舟不进则退,那咋办?我感觉没什么好法子,一点一滴的学下去呗!坚持学下去呗!慢慢的积累,也许慢慢的会顿悟,也许什么都没发生,不管怎么不要停止学习就行! OK,话不多说,先上一张图,我觉得这是计算机

分析汇编代码理解计算机如何工作

周玉勇 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 把C代码反汇编成汇编代码,再来分析计算机如何工作 下面是C代码 C代码编译成汇编的代码 简化的汇编代码 1 g: 2 pushl %ebp 3 movl %esp, %ebp 4 movl 8(%ebp), %eax 5 addl $6, %eax 6 popl %ebp 7 ret 8 f: 9 pushl %ebp 10 mov