首页 > 代码库 > 让cpu运行程序(二)

让cpu运行程序(二)

简单汇编指令设计

用文字符号书写的计算机指令就是汇编指令。这种汇编指令遵照怎样的格式书写,才能够和我们要设计的机器指令一一对应起来?做为CPU 的设计者在设计指令系统的同时,必须要考虑好这方面的问题。考虑好机器指令的格式,进而要考虑好汇编指令如何与之对应。

  1. 如何设计机器指令格式?

指令格式是指令分析执行的基础,按照一定的指令格式编写的指令,才能够让CPU分析出是哪一条指令,这条指令要做什么动作,以及如何去动作。为了能够分析执行指令,一般CPU都要专门设置一个指令寄存器,这个寄存器要放置从程序存储器中取出来的指令,通过预先设计好的指令格式去分解指令,将不同的编码送往控制矩阵。控制矩阵会通过节拍、标志线和指令寄存器送来的信息,有条不紊地指挥CPU动作。

由于机器只可以表示一定长度的二进制数,所以计算机CPU的指令格式只能在定长二进制数上做文章。一个基本的想法是,让一定数量的二进制数表示指令名称,让剩下的另一部分表示操作对象。于是最简单的机器指令格式就是:指令名称 操作对象。

在机器内部,指令只能以二进制编码的形式存在,因而指令名称就是一个编码。指令编码又叫操作码。指令操作的对象也是二进制数,所以又叫操作数。指令名称是惟一的,所以比较简单地用二进制数编号就可以了。但操作对象确相对复杂,有数值,有存储器的地址,有寄存器等。好在我们这里的指令的操作对象并太多,规划起来还并不困难。图 3-4是我们规划的16位二进制数指令格式,我们设计的这两种指令格式,就能够将前面设计的全部指令表示出来。

  

上面一种指令格式可以定义访问存储器一类指令,这类指令包括程序结构转移类指令,算数运算类指令和逻辑运算指令。下面一种指令格式是数据传送或运算一类指令格式,这种格式可以将8位数送入某个编号的寄存器,或者让编号寄存器之间传递数据,还可以进行编号寄存器间的各种运算。如果CPU中寄存器很多,往往采取编码是形式,于是分辨这些寄存器就要用到编码的方法。使用这些寄存器一般就要用编码来指示,需要将寄存器的编码写在指令操作对象当中。如果寄存器的数量很少,一般都以特殊的名称标注,像累加器da、指令寄存器ir、地址寄存器mar、输出寄存器out、前端寄存器A和B等,它们在指令编码中都是隐含寄存器,不必在指令操作对象中指出来。寄存器编码的形式都出现在CPU使用多个通用寄存器的情况。例如,精简指令系统的CPU都会有多个通用寄存器。

  1. 设计自己的汇编指令

根据前面对CPU指令系统的功能和格式设想,我们将设计的汇编指令和机器指令在表 3-1中对照给出。机器指令只是给出了操作码,不好一般化地指出操作对象,而汇编指令就可以用符号代替操作码和操作对象。

  

让cpu运行程序(二)