代码改变世界

计算机是如何工作的

2016-02-23 16:14  20135128  阅读(233)  评论(0编辑  收藏  举报

符钰婧

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

 一.实验题目

     关于计算机是如何工作的这个问题,本文将通过一个反汇编C程序的实验来解释。

二. 实验内容和截图

     在虚拟机环境下进行实验,新建main.c文件,将题目中的C程序复制到main.c文件中,,利用gcc命令编译成汇编代码

 

 三.下面分析汇编代码工作过程中堆栈的变化

执行push指令,此时esp指向1,然后ebp的值被赋值给地址1所表示的值;

执行move指令,此时ebp也指向了1

执行sub指令,esp的值减4,相当于往下移了一位,此时esp指向2

执行move指令,为立即数寻址,就是将数字6赋值给寄存器eax,再把eax的值赋给esp所指地址表示的值;

执行call指令,esp4指向地址3eip指向下一条指令(26行处),然后将这个值赋给地址3表示的值,最后eip指向函数f

首先寄存器eip指向程序的第一条指令(21行处),此时的栈为空栈。

这一段代码结束之后,ebp指向1esp指向3

四.总结

 就好比这幅图 cpu里存储,在内存里执行汇编指令

 

计算机是如何工作的:把C语言变成机器语言,用汇编语言执行我们输入的指令。