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

/*-------------------------------------以下内容是课堂笔记,咿呀咿呀呦!------------------------------------------*/

本课主要对计算机的运行原理和汇编语言进行了简单的介绍。

冯若依曼体系结构即存储程序计算机,也就是将程序写在内存中,由CPU通过总线从内存中读取一条条程序,根据程序的内容执行具体的步骤。

如图所示

CPU在读取指令时,通过寄存器IP来指向下一条指令(如果是32位系统,则为EIP)

CPU的寄存器分为通用寄存器、段寄存器、状态寄存器

四种寻址方式:

movl %eax,%edx     edx=eax                          寄存器寻址

movl $0x123,%edx  edx=0x123                       立即寻址

movl 0x123,%edx    edx=*(int32_t*)0x123        直接寻址

movl (%ebx),%edx   edx=*(int32_t*)ebx           间接寻址

movl 4(%ebx),%edx  edx=*(int32_t*)(ebx+4)    变址寻址

了解pushl、popl、call 0x12345、ret命令

注意:IP寄存器一般不能随便修改,只能通过call、ret等命令更改!

函数的返回值默认使用EAX寄存器存储返回给上一级函数

/*-------------------------以下内容是实验分析,咿呀咿呀呦!------------------------------------------*/

首先写下这么一段C程序:

 1 //linux.c
 2 int g(x)
 3 {
 4     return x+3;
 5 }
 6 int f(x)
 7 {
 8     return g(x);
 9 }
10 int main()
11 {
12     return f(10)+1;
13 }

  在Linux的环境中输入如下指令:

gcc –S –o linux.s linux.c -m32

  然后打开linux.s,就可以看到我们汇编后的代码(直接上截图了)

 

   将里面以“.”开头的行去掉(这是为链接用的),得到汇编后的代码:

 1 g:
 2     pushl   %ebp
 3     movl    %esp, %ebp
 4     movl    8(%ebp), %eax
 5     addl    $3, %eax
 6     popl    %ebp
 7     ret
 8 f:
 9     pushl   %ebp
10     movl    %esp, %ebp
11     subl    $4, %esp
12     movl    8(%ebp), %eax
13     movl    %eax, (%esp)
14     call    g
15     leave
16     ret
17 main:
18     pushl   %ebp
19     movl    %esp, %ebp
20     subl    $4, %esp
21     movl    $10, (%esp)
22     call    f
23     addl    $1, %eax
24     leave
25     ret

  接下来我们来分析一下改程序具体的流程。

  程序一开始,CPU的IP寄存器指向汇编代码的第18行,假设堆栈在内存中的地址分别为0,1,2,3……堆栈基指针寄存器(EBP)和堆栈顶指针寄存器(ESP)均指向堆栈段0处。

  第18~21行首先为main函数开辟新的内存区域,之后将传的参数10入栈,此时堆栈段如下所示:

  

  然后程序调用call 函数,将IP入栈,IP指向代码第9行f处。

  在f函数的代码处,首先为f函数开辟新的内存区域,接着将传入的参数10赋值给EAX,并将EAX入栈,此时堆栈段内存如下图:

  程序在此调用call进入g函数。在g函数中,同样先是开辟内存空间,然后将参数传给EAX,并将EAX的值加上3。

  之后将EBP出栈,并调用ret命令。此时IP重新指向f函数call之后的命令,堆栈内存的情况如下:

  

  之后就是不断的调用leave与ret命令,跳出当前的内存区域,回到上一级函数的内存区域中,并将EAX的值加3,直到跳出main函数,至此程序结束。

  从上面的分析中,我觉得可以归纳出以下几点:

  1.计算机的运行流程确是遵循冯诺依曼框架,CPU将内存中的代码和数据读取到自己的寄存器中,再根据一条条命令调用寄存器进行进一步的操作。

  2.在进入每一个程序之前,CPU都会将上一级的EIP和EBP压栈,相当于为新的函数重新开辟了一段新的内存空间,直到退出函数的时候才将它们出栈。与此同时,将函数的返回值保存在EAX中。

  3.CPU的各个寄存器都有不同的分工,如EIP指向要执行的代码,EAX存储返回值等。它们贯穿于整个程序执行流程,自己写程序时一般不要轻易改动。

从一段代码的汇编看计算机的工作原理相关推荐

  1. 计算机CPU工作原理及汇编语言简介

    计算机CPU工作原理及汇编语言简介(链接)        从微信公众号把原文直接复制过来,发现图片.表格经常丢失,只有纯文字,所以建议直接点击上述链接阅读. 复制过来的纯文字内容如下(图片.表格丢失, ...

  2. 计算机基础原理知识,计算机基础知识之计算机的工作原理

    1.3 计算机的工作原理 到目前为止,微机的工作原理均采用冯.若依曼的存储程序方式,即把程序存储在微机内,由微机自动存取指令并执行它.微机的工作过程就是执行程序的过程,而程序由指令序列组成,因此,执行 ...

  3. 简要分析计算机的工作过程,计算机的工作原理.doc

    第 周 星期 第 节 年 月 日 课 题 计算机的工作原理 教 学 目 标 1.知道计算机系统的组成 2.知道计算机系统的工作原理 教材分析 重点 计算机系统的工作原理 难点 计算机系统的工作原理 教 ...

  4. 计算机生活工作原理,计算机基本工作原理是什么?

    在介绍计算机的工作原理之前,首先了解一下什么是计算机指令. 简单的理解,指令指的是能被计算机识别并执行的二进制代码,它规定了计算机能够完成的某一种操作.一条指令通常由 2 部分组成,分别是操作码和操作 ...

  5. 互联网应用基础第一课:计算机的工作原理、了解计算机的硬件与系统

    知识点:计算机的工作原理.计算机硬件入门.计算机操作系统 1.了解计算机的基本组成 1.1 计算机概念理解 计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算, ...

  6. 现在使用计算机器工作原理,计算机显示器工作原理(17页)-原创力文档

    计算机显示器工作原理 计算机显示器工作原理 显示器技术 长宽比和可视区域 多频扫描显示器 显示器连接 显示器的颜色深度 LCD显示器 LCD的功能和特性 CRT显示器 CRT的功能和特性 LCD和CR ...

  7. 计算机主板的工作原理,求计算机主板工作原理??

    引言 计算机主板工作原理 如果您打开过计算机的机箱,您会看到有一个部件将所有部件连接在一起,那就是主板. 通过主板,计算机的所有部件可以得到电源并相互通信. 在过去二十年中主板已经取得了长足进展.第一 ...

  8. 电子计算机四个主要部件,计算机基本工作原理与主要部件(ppt 29页).ppt

    07 03 2020 第1页 07 03 2020 第2页 计算机基础知识 07 03 2020 第3页 教学内容 计算机基本工作原理微型计算机操作知识计算机的主要部件 教学目的 了解微型计算机的基本 ...

  9. 现在使用计算机的工作原理是,计算机的工作原理是什么

    很多人都会用电脑,那么你知道吗小编总结了一些资料,供大家参考! 计算机的基本原理是存贮程序和程序控制 预先要把指挥计算机如何进行操作的指令序列***称为程序***和原始数据通过输入设备输送到计算机内存 ...

最新文章

  1. 动手打造自己强大的右键菜单
  2. 机器学习资料整理,收藏了不后悔!
  3. MySQL命令之mysqldump -- 数据库备份程序
  4. pyqt5 最小化 系统托盘_Qt中如何使窗口隐藏/最小化到托盘
  5. android 类ios actionsheet效果
  6. python爬虫基础扫盲之HTTP以及HTTPS
  7. EmWin 接触---基础函数
  8. mybatis使用拦截器显示sql,使用druid配置连接信息
  9. 深度解读 | ElasticDL 深度学习框架简化编程,提升集群利用率和研发效率的秘诀...
  10. OpenCV中的reshape
  11. windows 环境变量设置
  12. 数据库同步功能要慎用
  13. 简单的光线追踪教程(一)
  14. 机械设备行业经销商管理系统细致化经销商管理,让渠道管理更可控
  15. win10关闭自动屏保
  16. 华为手机系统更新成鸿蒙,如何将自己的华为手机升级成鸿蒙系统
  17. 【小月电子】国产安路FPGA开发板系统学习教程-LESSON9简易测试系统
  18. download 下载文件 IE兼容性处理
  19. 显示控件——字符显示之艺术字
  20. oracle rman crosscheck,rman 之crosscheck 与delete expired

热门文章

  1. 2018年4月java自考真题,全国2018年4月自考互联网数据库考试真题
  2. 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
  3. R-CNN和SPP-net
  4. 《漫画算法2》源码整理-7 第K大的数字
  5. 《设计模式》一书PPT浏览及下载地址
  6. 人人都可以做深度学习应用:入门篇
  7. 零基础如何学爬虫技术?
  8. 用Latex写IEEE论文
  9. 分类器评价与在R中的实现:ROC图与AUC
  10. 支持向量机SVM(五)SMO算法