编程语言的加载和执行过程

描述

上一章着重讲了指令,我们用汇编、C语言等工具编写的代码最终也被转化成机器指令被执行。本章进一步阐述编程语言如何被加载和执行的过程。

6.1.一段程序代码

我们给出一段类似C语言的代码,作为本书电路的“hello world”程序,看看电路之间如何配合才能完成执行这个代码的目标。

试着分析这3行代码:

1、a=6,a在高级语言中是一个变量,其本质是一个内存地址;a=6的意思是在a地址的内存空间中存入数字6;本章为了讲解过程进一步简化,假设这两句已经执行完毕。

2、c=a+b,首先把a和b的内存空间中的数字,用加法器加起来,得到一个结果值9,然后把9存储到c这个地址的内存空间中。

C语言

图 6-1 本章代码内存示意图

指令操作码指令地址说明
0000 00000000 1100读取被加数a的值到加法站暂存器
0000 00010000 1010从内存读取加数,并相加
0000 00100000 1101将相加的结果存储内存

6.2.程序执行控制

从上一章详细阐述了指令寄存器从内存中取出代码指令,然后控制指令的执行。但是他只负责具体执行一条指令,给它什么指令,它就去完成,可见背后还应该有一个“指挥棒”,把需要执行的指令给指令寄存器,等他执行完成后,把下一个指令给它。

需要设计一个程序执行控制模块,来做这个“指挥棒”,我们来试着分析它如何工作。

如图 6-1,内存被分成代码区和数据区两部分,代码区从内存的0000 0000位置开始。根据我们的电路设计,指令的格式是8位的操作码加上8位的操作地址(见图 5-1),我们的内存被设计成8位的存储单元,每一个内存地址下可以存放一个8位的数据。所以一个完整指令在内存中被分两行存储。

C语言

图 6-2 计数寄存器对指令寄存器的控制示意图

图 6-2所示,指令寄存器通过对其他的寄存器的控制来执行指令,程序运行控制模块则通过控制指令寄存器的运行,达到控制整个电路运行的效果。首先,电路通电后,“程序运行控制逻辑模块”中PC寄存器放着内存中存放代码的首地址(图 6-1的0000 0000地址),然后反复执行如下步骤:

1.控制指令操作寄存器(IR_OP)把第一个指令的操作码取出(内存设置可读,IR_OP设置可写);

2.PC寄存器地址加1;

3.控制指令地址寄存器(IR_ADDR)把第一个指令的操作地址取出(内存设置可读,IR_ADDR设置可写);

4.指令地址寄存器(IR_ADDR)设置为可读,设定好指令操作过程中的内存地址;

5.指令操作寄存器(IR_OP)设置为可读,按照指令码运行相应的指令逻辑;

6.PC寄存器地址加1;

每完成一次6个步骤的循环,则完成内存中的一个指令的执行,并准备进入下一个指令的执行。

6.3.指令执行控制译码器设计

为了实现反复执行以上6步,电路设计的大概思路是用一个三进八出的译码器,输出端对应这6个步骤,输入端循环输入二进制的0~5。

6.4.PC寄存器内存地址加1电路设计

6.5.小节

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分