时序电路在总计机课程中的地位

那一个题材是自我暂时想的,不知道是或不是规范,平素想写一个像样的事物,希望可以唤起童鞋们关怀硬件并喜爱上硬件。

我是文科出生,学士阶段才转向计算机,中间有很长一段时间都只做软件理论相关研讨和一些实际的软件项目,包蕴编译器、电力系统监控器、软件测试工具研发等;直到二〇〇九年,才开头陆陆续续接触部分硬件项目,说是硬件项目,其实首如若一对嵌入式的门类,如世界杯(FIFA World Cup)前做的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 栈区。函数运行时,局地变量的保留区域。

咱俩器重关心代码区和栈区,初阶时,其分布如下图所示:

亚洲城误乐城ca88网站,代码区-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函数内部的流水线基本上陈述完了(关于函数间调用,相对复杂,统计机组成中会详细讲解),但怎样落到实处那一个步骤呢,其中的关键问题包蕴如下:


问题:

  • 清楚内存地址,怎么样稳定到相当地点???答案:地址译码器
  • 赢得到a=3对应的下令后,如何驾驭是做a=0+3的操作???答案:解析指令,指令译码器
  • PC寄存器怎么着保存值?如何是好加4操作?答案:计数器(寄存器讲解)