从CPU的运行到函数调用做个了解
2016-02-27 16:00
211 查看
CPU的内部结构
我们都知道CPU是一台电脑的核心部件,所有的程序都是通过它运行的,那么CPU是如何让一个程序跑起来的呢?我们今天就来一起简单的做个了解,首先看下CPU的基本结构程序流程
假如现在我们有个两个数相加的程序,当你点击运行这个程序时,系统会将这个程序复制到内存中。程序中的这些数据和指令会被存储在一个一个小的“内存空间”,并给每个空间一个“门牌号”,也就是内存中的地址。系统将程序复制到内存中后,会将程序计数器设定到程序运行的开始位置(假设这个程序的开始位置是0100),然后开始运行;当CPU每执行一条指令,程序的累加器的值就自动加1,然后CPU的控制器就会参照程序计数器的数值从内存中读取命令并执行,那么我们用图表示这个流程的话大概是下图中的样子
在CPU进行运算时,标志寄存器的数值会根据运算结果自动设定。如果程序执行到跳转指令的时候,会根据地址中的内容跳转到对应的地址;条件分支在跳转指令之前会进行比较运算,然后CPU根据标志寄存器的数值进行判断是否要跳转
函数调用
对CPU的执行流程有了个大概的了解后,我们现在可以来看看咱们平时写的程序函数是怎么运行的了。在介绍之前我们先了解两个机器语言指令call指令,把函数要执行的指令地址存储在名为栈的主内存
return指令,把保存在栈中的地址设定到程序计数器中
在上图中,函数执行到0132的时候,并不是通过跳转指令跳转到Add函数的入口,而是通过call指令;这个地方和我没前面讲到的条件分支跳转指令是不一样的,因为调用完函数,我们还要返回函数调用的地方继续下一条指令。
到此,我们可以对程序的运行过程有个大概的了解。
相关文章推荐
- PYTHON之路(五)
- Linux查看某个端口使用情况并kill
- java文献
- 遗传算法得到旅行商问题的满意解
- 【深入Java虚拟机】之七:Javac编译与JIT编译
- 【iOS开发之静态库、动态库】
- 解决HttpUrlConnection乱码问题
- win7纯净版64位系统把exe文件注册成为系统服务的方法
- 习题 6-5 UVA 1600 Patrol Robot 巡逻的机器人
- 自动创建txt文件并写入内容
- csv文件用excel打开乱码
- 通过javamelody监控web应用的性能指标
- 【深入Java虚拟机】之六:Java语法糖
- JQUERY下的组件化编程之基本框架
- 类之间的关系
- SSM框架——实现分页和搜索分页
- PHP使用Memcache时模拟命名空间及缓存失效问题的解决
- ios Apple Pay 简单使用
- Android studio 和 Eclipse快捷键对比
- 【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派