时序电路在处理器课程中的地位

以此题材是自个儿临时想的,不知道是否可靠,平素想写一个近乎的事物,希望能够唤起童鞋们关注硬件并喜欢上硬件。

自己是文科出生,硕士阶段才转向总结机,中间有很长一段时间都只做软件理论相关探讨和部分切实可行的软件项目,包括编译器、电力系统监控器、软件测试工具研发等;直到二〇〇九年,才起来陆陆续续接触部分硬件项目,说是硬件项目,其实重倘使局部嵌入式的系列,如世界杯前做的3G转Wifi和和气玩的有的小车和传感器等。

在做嵌入式项目事先,压根就没接触过硬件方面的付出文化,难度总之,什么叫编码器、什么叫译码器、咋办分频、如何做倍频、怎么办A/D转换、D/A等等,一系列的问题迎面而来。为了完成项目,只好硬着头皮上,从最基础的数字逻辑起先看起,从二进制、卡诺图出手,渐渐浓厚到组合电路和时序电路,再结合一本叫做《总结机组成与规划-硬件/软件接口》,才渐渐深入明白大家做的编译器后端的具体做事原理,在此基础上对软件的各种性能问题有了更深厚的认识。

组合电路和时序电路是电脑原理的根底课,组合电路描述的是单纯的函数效能,函数输出只与眼前的函数输入相关;时序电路则引入了时光维度,时序电路在通电的图景下,可以维持状态,电路的输出不仅与眼前的输入有关,而且与前一每一日的电路状态相关,如大家个人PC中的内存和CPU中的寄存器,均为时序电路。

说了这般多,我们上学的重组电路和时序电路在总结机中又是怎么一次事呢?为了方便通晓,下面以一个我们都能承受的C语言程序先导,从上层向下层起首解释。

void main(){
      int a = 3, b = 5;
      int sum = a + b;
}
  • 1
  • 2
  • 3
  • 4

本条例子大家都能知道,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寄存器中
  • 1
  • 2
  • 3

到此处,我们一定还在纳闷,不是说要翻译成二进制代码吗?怎么是MIPS汇编语言?对,就是汇编语言,这一个汇编语言中的每一条指令就对应一条二进制代码,汇编的艺术更易于令人领略。

后天我们获取了电脑可以知道的MIPS指令(可以想像成可执行程序)了,接下去的题材是如何执行MIPS指令。

要实施顺序,首先必须将可执行程序文件(从外设)加载到内存。可执行文件加载到内存时,操作系统会为每个可执行程序在内存中分配六个区:

  • 1 代码区。也就是前面的到的汇编代码所对应的二进制码
  • 2 全局数据区。全局变量,静态变量放在这几个区
  • 3
    堆区。表示在程序执行过程中,动态申请的半空中在这些区,如C语言中的malloc,
    free操作均是针对此区中的对象进行申请或自由操作
  • 4 栈区。函数运行时,局部变量的保存区域。

我们重点关注代码区和栈区,最先时,其遍布如下图所示:

亚洲城误乐城ca88网站 1

其中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的授命的地址。此时,栈区的景色为: 
亚洲城误乐城ca88网站 2

继而,CPU按照PC的的值,从指定地址0X FF FF FF
04处得到指令,然后解析指令,并执行命令(即执行b=5)。当b=5实施完毕后,PC执行操作:PC
= PC + 4,PC指向0X FF FF FF
08,即sum=a+b的命令的地方。此时,栈区的场馆为:

亚洲城误乐城ca88网站 3

亚洲城误乐城ca88网站,下一场,CPU遵照PC的的值,从指定地址0X FF FF FF
08处拿到指令,然后解析指令,并履行命令(即实行sum=a+b)。当sum=a+b执行完毕后,PC执行操作:PC
= PC + 4,PC指向0X FF FF FF
12(因为,指令已经实施完毕,这里应该提示要从main函数重回)。此时,栈区的情状为: 
亚洲城误乐城ca88网站 4

由来停止,main函数内部的流程基本上陈述完了(关于函数间调用,相对复杂,总括机组成中会详细讲解),但哪些促成这么些步骤呢,其中的关键问题包括如下:


问题:

  • 了解内存地址,怎么样定位到非常地方???答案:地址译码器
  • 获拿到a=3对应的下令后,怎么着知道是做a=0+3的操作???答案:解析指令,指令译码器
  • PC寄存器咋样保存值?咋做加4操作?答案:计数器(寄存器讲解)