博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
阅读量:6332 次
发布时间:2019-06-22

本文共 1198 字,大约阅读时间需要 3 分钟。

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

计算机是如何工作的,简单来说我们都知道冯诺依曼这个名词,专业来讲,就是指存储程序计算机。

下面我们通过汇编一个简单的c语言程序 ,来说明在计算机内部的堆栈式如何变化的。

图1为这个简单的C语言程序。

图1

图2为汇编后的汇编代码

图2

首先程序从main开始执行,

eip=18,

eip逐步加1,除非遇到call指令

18 pushl %ebp             ebp的值 0 入栈  ebp=o esp=1

19 movl %esp,%ebp     ebp=esp=1

20 subl  $4,%esp          esp=2

21 movl $7,(%esp)        7入栈

22 call f                        eip(23)入栈   esp=3 eip=f=8

9  pushl %ebp               ebp1入栈      esp=4

10 movl %esp,%ebp      ebp=esp=4

11 subl  $4,%esp           esp=5

12 movl 8(%ebp),%eax   eax=7

13 movl %eax,(%esp)     7入栈

14 call g                        eip(15)入栈   esp=6 eip=g=1

2  pushl %ebp                ebp4入栈      esp=7

3  movl %esp,%ebp        ebp=esp=7

4  movl 8(%ebp),%eax    eax=7

5  addl $4,%eax             eax=7+4=11

6  popl %ebp                  ebp=4        esp=6

7  ret                             eip(15)出栈  esp=5

15 leave                        esp=ebp=4  (popl %ebp)  ebp=1  esp=3

16 ret                            eip(23)出栈  esp=2

23 addl $1,%eax            eax=11+1=12

24 leave                       esp=ebp=1   (popl %ebp)  ebp=0  esp=0

25 ret                          返回之前的eip

到这整个程序就运行完了,

下图为堆栈的详细变化图,(手画的)

最后来说明下我对计算机是如何工作的之理解,通过上述对计算机堆栈的变化的详细解说,我认为计算机主要是通过高级语言比如c语言由计算机操作系统汇编成机器语言即汇编语言,在cpu中由ip计数器从内存中依次读取存储的代码或程序,通过堆栈的不断入栈出栈和寄存器内值变化,来返回不同的值,也就是程序的运行结果,再通过图形转换便显示出了最后的我们所看到的东西。

 

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

 

转载于:https://www.cnblogs.com/whoever/p/5222067.html

你可能感兴趣的文章
面向对象与原型(js)
查看>>
华为eNSP浮动路由实现不同vlan之间的通信
查看>>
HanLP Analysis for Elasticsearch
查看>>
Ubuntu系统终端环境支持中文的方法
查看>>
docker构建私有仓库
查看>>
2018/12/31抓取装置投运前两天的电流数据来判断通讯情况
查看>>
Android获得手机UserAgent的源码
查看>>
职场人必备:工作述职报告PPT模板
查看>>
华为认证让你的实习工资比别人高出一截
查看>>
hcl安装出现的问题
查看>>
Netty源码之ChannelPipeline和ChannelHandlerContext
查看>>
【读书分享】流血的仕途
查看>>
Enable DB Query in HUE web UI
查看>>
windows服务器网络群集
查看>>
TCP连接状态详解
查看>>
phpmyadmin网页版数据库的管理
查看>>
自定义组件进阶之一
查看>>
学生时代的结束,工作的开始
查看>>
Linux下处理由window上传zip解压后文件(夹)名的乱码问题
查看>>
java笔记:第8章 异常
查看>>