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

学号:20133201

姓名:李冬辉

注: 原创作品转载请注明出处 +《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

工作基本原理

计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。

程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作原理。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.诺依曼原理。

系统架构

计算机系统由硬件系统和软件系统两大部分组成。美藉匈牙利科学家冯·诺依曼(John von Neumann)奠定了现代计算机的基本结构,这一结构又称冯·诺依曼结构,其特点是:

1)使用单一的处理部件来完成计算、存储以及通信的工作。
2)存储单元是定长的线性组织。
3)存储空间的单元是直接寻址的。
4)使用低级机器语言,指令通过操作码来完成简单的操作。
5)对计算进行集中的顺序控制。
6)计算机硬件系统运算器存储器、控制器、输入设备、输出设备五大部件组成并规定了它们的基本功能。
7)采用二进制形式表示数据和指令。
8)在执行程序和处理数据时必须将程序和数据从外存储器装入主存储器中,然后才能使计算机在工作时能够自动调整地从存储器中取出指令并加以执行。

实验截图:

汇编代码工作过程中的堆栈变化:

总结:

计算机是如何工作的:按照冯·诺依曼存储程序的原理,计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时才停止执行。其工作过程就是不断地取指令和执行指令的过程,最后将计算的结果放入指令指定的存储器地址中。

LINUX内核分析20133201的更多相关文章

  1. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

  2. Linux内核分析作业7:Linux内核如何装载和启动一个可执行程序

            1.可执行文件的格式 在 Linux 平台下主要有以下三种可执行文件格式: 1.a.out(assembler and link editor output 汇编器和链接编辑器的输出) ...

  3. linux内核分析作业6:分析Linux内核创建一个新进程的过程

    task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  u ...

  4. linux内核分析作业5:分析system_call中断处理过程

    1.增加 Menu 内核命令行 调试系统调用. 步骤:删除menu git clone        (tab) make rootfs 这就是我们将 fork 函数写入 Menu 系统内核后的效果, ...

  5. linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作

    一.实验 使用gcc –S –o main.s main.c -m32 命令编译成汇编代码,如下代码中的数字请自行修改以防与他人雷同 int g(int x) { return x + 3; } in ...

  6. linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

    计算机如何工作 三个法宝:存储程序计算机.函数调用堆栈.中断机制. 堆栈 函数调用框架 传递参数 保存返回地址 提供局部变量空间 堆栈相关的寄存器 Esp 堆栈指针  (stack pointer) ...

  7. linux内核分析作业3:跟踪分析Linux内核的启动过程

    内核源码目录 1. arch:录下x86重点关注 2. init:目录下main.c中的start_kernel是启动内核的起点 3. ipc:进程间通信的目录 实验 使用实验楼的虚拟机打开shell ...

  8. linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    系统调用:库函数封装了系统调用,通过库函数和系统调用打交道 用户态:低级别执行状态,代码的掌控范围会受到限制. 内核态:高执行级别,代码可移植性特权指令,访问任意物理地址 为什么划分级别:如果全部特权 ...

  9. 《Linux内核分析》期末总结

    Linux内核设计期中总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 前八周博客汇总及总结 Linux内核设计第一周——从汇编语言出发理解计算机工作原理 我们学习了汇编语言的基础知识,这一 ...

随机推荐

  1. swift学习经验和错误记录

    1.selector 和action 直接用字符串,后面要加冒号":" 2.StoryBoard 连接后改名又重新连接出现了找不到符号的诡异错误,unknow class xxxx ...

  2. Windows 只能安装32位虚拟机问题

    查了一下相关原因,是因为cpu的虚拟化没有打开的原因 解决方法: 进去bios 里面, 进入 configuration , 将 Intel Virtual Technology 设为Enabled ...

  3. Insert插入语句中带有select语句

    我们有时候在写Insert语句的时候会遇到values里面的个别列的值需要从别的表中查询获取,这时候SQL语句需要使用向表中插入多条数据的写法: INSERT INTO LoginRecordInfo ...

  4. 矩阵hash + KMP - UVA 12886 The Big Painting

    The Big Painting Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=88791 M ...

  5. 燕十八mysql笔记

    mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...

  6. tp-04 框架与模板的整合

  7. 使用HashMap,put()表示放置元素,get()表示取元素

    SortedSet可自动为元素排序. SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序. 与HashSet不同,TreeSet并不需要实现HashCode() ...

  8. 采用预取(Prefetch)来加速你的网站(转)

    一.DNS预取 如果你像我一样想在网站上有一个Twitter小程序,还有网站分析,再也许一些网页字体,那么你必须要链接到一些其它域名,这意味着你将不得不引发DNS查询.我的建议通常是,不要还没有先适当 ...

  9. ThinkPHP种where的使用(_logic and _complex)的使用实例

    1.对于thinkphp中的 and ,or 等复合型的查询,我要正确的使用相关的方法. a.实例 b.实例

  10. HBaseclientAPI基本操作

    Java类与HBase数据模型 HBaseConfiguration 包名 : org.apache.hadoop.hbase.HBaseConfiguration 作用:对HBase进行配置. 使用 ...