资料介绍
这个题目是我临时想的,不知道是否准确,一直想写一个类似的东西,希望能够引起童鞋们关注硬件并喜欢上硬件。
我是文科出生,研究生阶段才转向计算机,中间有很长一段时间都只做软件理论相关研究和一些具体的软件项目,包括编译器、电力系统监控器、软件测试工具研发等;直到2009年,才开始陆陆续续接触一些硬件项目,说是硬件项目,其实主要是一些嵌入式的项目,如世界杯前做的3G转Wifi和自己玩的一些小车和传感器等。
在做嵌入式项目之前,压根就没接触过硬件方面的开发知识,难度可想而知,什么叫编码器、什么叫译码器、怎么做分频、怎么做倍频、怎么做A/D转换、D/A等等,一系列的问题迎面而来。为了完成项目,只能硬着头皮上,从最基础的数字逻辑开始看起,从二进制、卡诺图入手,逐渐深入到组合电路和时序电路,再结合一本叫做《计算机组成与设计-硬件/软件接口》,才逐渐深入明白我们做的编译器后端的具体工作原理,在此基础上对软件的各种性能问题有了更深刻的认识。
组合电路和时序电路是计算机原理的基础课,组合电路描述的是单一的函数功能,函数输出只与当前的函数输入相关;时序电路则引入了时间维度,时序电路在通电的情况下,能够保持状态,电路的输出不仅与当前的输入有关,而且与前一时刻的电路状态相关,如我们个人PC中的内存和CPU中的寄存器,均为时序电路。
说了这么多,我们学习的组合电路和时序电路在计算机中又是怎么一回事呢?为了便于理解,下面以一个大家都能接受的C语言程序开始,从上层向下层开始解释。
void main(){
int a = 3, b = 5;
int sum = a b;
}
这个例子大家都能明白,main函数要做的事情就是实现两个数的加法操作。这是我们人类的思维方式,但是计算机并不认识,如何让计算机理解呢?于是,我们需要将上面这个程序翻译成机器能理解的模样,这时候就需要借助编译器(如常见的gcc、msc等)将上面的程序翻译成MIPS指令(不同的CPU有不同的指令集,包括X86指令集、MIPS指令集、Sparc指令集等,我们在这里用MIPS指令集,咱们的龙芯也是采用MIPS指令集),如下所示:
#下面的每条汇编代码对应一个二进制
addi $t0, 0, 3 # a = 0 3, a保存在$t0寄存器中, 对应的二进制代码为:0010 00** **** **** **** **** **** ****(这里的星号*表示二进制,这里暂时不关心)
addi $t1, 0, 5 # b = 0 5, b保存在$t1寄存器中
addi $t2, $t1, $t0 # sum = a + b, sum保存在$t2寄存器中
到这里,大家一定还在疑惑,不是说要翻译成二进制代码吗?怎么是MIPS汇编语言?对,就是汇编语言,这个汇编语言中的每一条指令就对应一条二进制代码,汇编的方式更容易让人理解。
现在我们得到了计算机可以理解的MIPS指令(可以想象成可执行程序)了,接下来的问题是如何执行MIPS指令。
要执行程序,首先必须将可执行程序文件(从外设)加载到内存。可执行文件加载到内存时,操作系统会为每个可执行程序在内存中分配四个区:
1 代码区。也就是前面的到的汇编代码所对应的二进制码
2 全局数据区。全局变量,静态变量放在这个区
3 堆区。表示在程序执行过程中,动态申请的空间在这个区,如C语言中的malloc, free操作均是针对此区中的对象执行申请或释放操作
4 栈区。函数运行时,局部变量的保存区域。
我们重点关注代码区和栈区,初始时,其分布如下图所示:
代码区-1.png
其中PC(Program Counter)是程序计数器(是CPU中的一个寄存器,具有数据存储功能),即用来指示下一个即将执行的指令的地址,本例中,进入main函数后,即将执行的第一条指令是a = 3,其地址为:0X FF FF FF 00, 因此PC指向其对应的汇编代码的地址。
CPU根据PC的的值,从指定地址0X FF FF FF 00处获取指令,然后解析指令,并执行指令(即执行a=3)。
当a = 0执行完毕后,PC执行操作:PC = PC + 4,PC指向0X FF FF FF 04,即b = 5的指令的地址。此时,栈区的状态为:
栈区-1.png
接着,CPU根据PC的的值,从指定地址0X FF FF FF 04处获取指令,然后解析指令,并执行指令(即执行b=5)。当b=5执行完毕后,PC执行操作:PC = PC + 4,PC指向0X FF FF FF 08,即sum=a+b的指令的地址。此时,栈区的状态为:
栈区-2.png
然后,CPU根据PC的的值,从指定地址0X FF FF FF 08处获取指令,然后解析指令,并执行指令(即执行sum=a+b)。当sum=a+b执行完毕后,PC执行操作:PC = PC + 4,PC指向0X FF FF FF 12(因为,指令已经执行完毕,这里应该提示要从main函数返回)。此时,栈区的状态为:
栈区-3.png
至此为止,main函数内部的流程基本上陈述完了(关于函数间调用,相对复杂,计算机组成中会详细讲解),但如何实现这些步骤呢,其中的关键问题包括如下:
问题:
1、知道内存地址,如何定位到那个地址???答案:地址译码器
2、获取到a=3对应的指令后,如何知道是做a=0 3的操作???答案:解析指令,指令译码器
3、PC寄存器如何保存值?如何做加4操作?答案:计数器(寄存器讲解)
作者:CodingTech
来源:
(mbbeetchina)
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 手势识别,计算机是怎么实现的呢?资料下载
- “时序电路”及其核心部件触发器的工作原理资料下载
- 什么是时序电路?触发器又是怎么回事资料下载
- 数码管与分析仪的时序电路原理图免费下载 8次下载
- 计算机通信与网络教程—课件资料下载 0次下载
- 数字电路基础与计算机中的逻辑部件相关资料下载 5次下载
- 基于门控时钟的低功耗时序电路设计解析 12次下载
- 典型时序电路与门控时钟在时序电路中的应用设计 25次下载
- 基于二叉树的时序电路测试序列设计 0次下载
- 触发器和时序逻辑电路教材
- 基于量子进化算法的时序电路测试生成 0次下载
- 基于粒子群算法的同步时序电路初始化
- 计算机应用基础课件 0次下载
- 计算机文化基础课件 0次下载
- PLD练习2(时序电路)
- 组合逻辑电路和时序逻辑电路的区别和联系 6240次阅读
- 基本逻辑电路、时序电路、组合电路设计 1136次阅读
- 时序电路到底是什么 5507次阅读
- 时序电路基本组件及时序逻辑电路应用实例 6667次阅读
- 计算机高速数字电路设计技术及措施 3251次阅读
- 计算机的组成及其功能 6610次阅读
- 时序逻辑电路设计 8199次阅读
- FPGA之时序电路的理解 3306次阅读
- FPGA的设计主要是以时序电路为主吗? 4723次阅读
- 组合逻辑电路和时序逻辑电路比较_组合逻辑电路和时序逻辑电路有什么区别 9.2w次阅读
- 组合逻辑电路的特点详解 3.8w次阅读
- FPGA中组合逻辑和时序逻辑的区别 8773次阅读
- 数字电路之时序电路 1.8w次阅读
- 火控计算机接口电路的设计 2728次阅读
- 计算机CPU温度监控控制电路图 4470次阅读
下载排行
本周
- 1电子电路原理第七版PDF电子教材免费下载
- 0.00 MB | 1491次下载 | 免费
- 2单片机典型实例介绍
- 18.19 MB | 95次下载 | 1 积分
- 3S7-200PLC编程实例详细资料
- 1.17 MB | 27次下载 | 1 积分
- 4笔记本电脑主板的元件识别和讲解说明
- 4.28 MB | 18次下载 | 4 积分
- 5开关电源原理及各功能电路详解
- 0.38 MB | 11次下载 | 免费
- 6100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 7基于单片机和 SG3525的程控开关电源设计
- 0.23 MB | 4次下载 | 免费
- 8基于AT89C2051/4051单片机编程器的实验
- 0.11 MB | 4次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 2PADS 9.0 2009最新版 -下载
- 0.00 MB | 66304次下载 | 免费
- 3protel99下载protel99软件下载(中文版)
- 0.00 MB | 51209次下载 | 免费
- 4LabView 8.0 专业版下载 (3CD完整版)
- 0.00 MB | 51043次下载 | 免费
- 5555集成电路应用800例(新编版)
- 0.00 MB | 33562次下载 | 免费
- 6接口电路图大全
- 未知 | 30320次下载 | 免费
- 7Multisim 10下载Multisim 10 中文版
- 0.00 MB | 28588次下载 | 免费
- 8开关电源设计实例指南
- 未知 | 21539次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935053次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537793次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234313次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191183次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183277次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138039次下载 | 免费
评论
查看更多