首页 理论教育机器指令简介,机器指令格式和举例

机器指令简介,机器指令格式和举例

【摘要】:我们把编码表示的计算机可识别和处理的命令称为机器指令,或简称指令。为了说明方便,这里我们设计一组简单的机器指令。图3-2 机器指令格式4位操作码共可表示24=16个不同的机器指令。其余机器指令不再一一详细表示。因每个十六进制码表示4位二进制码,所以用十六进制码表示机器指令更为简洁。表3-1 机器指令举例计算机进行数据处理时,既要有程序,也要有数据。

如何把算法中的基本操作表示为计算机可以理解的形式呢?方法就是为这些基本操作编码。人给计算机发出的命令称作指令。我们把编码表示的计算机可识别和处理的命令称为机器指令,或简称指令。

分析算法中的基本操作可知,所有的基本操作都包含两个信息:一个是该操作的功能信息,即要执行什么样的操作;一个是该操作的数据处理信息,即要对什么数据进行操作。

因此,基本操作的编码表示形式——机器指令也由两部分组成,表示要执行什么样操作的编码部分称作操作码,表示要对什么数据进行操作的部分称作操作数。换句话说,不同的操作码表示了不同的机器指令,操作数表示了当前机器指令要处理的数据对象。

为了说明方便,这里我们设计一组简单的机器指令。假设用两个字节(16位)为机器指令编码,用前面4位作为操作码,用后面12位作为操作数。机器指令的格式如图3-2所示。

图3-2 机器指令格式

4位操作码共可表示24=16个不同的机器指令。我们规定每个机器指令的操作含义,如0001表示把某个内存单元中的数值存放到某个寄存器中(具体是哪个内存单元、哪个寄存器,要由操作数部分决定);0010表示把某个寄存器中的数值存放到某个内存单元中;0011表示把一个寄存器中的数值和一个内存单元中的数值相加后结果存入寄存器中;等等。

操作数的编码稍为复杂一些。我们说过,要处理的数据存放在内存中,但是,如果每次处理的数据都首先从某内存单元取出来,处理后又放回某内存单元中,这样的处理效率将非常低。我们可以为要处理的数据设计一些临时存放地,由于这些数据临时存放地的个数相对内存来说非常少,因此,不但可以用存取速度非常快的电子存储元件制造,而且编码表示的位数非常少。我们把这样的数据临时存放地称为寄存器。假使计算机中内存单元共有1024个,每个内存单元由8位组成。假使计算机中寄存器共有4个,每个寄存器也由8位组成。

由于很多操作一般都涉及两个操作数和一个操作结果,如加法指令就有两个操作数和一个操作结果,这样机器指令的操作数部分就需要表示出三个数据的存放地址。按操作数中所含有的内存地址个数来分,操作数的编码方法可分作:单内存地址、双内存地址和三内存地址。单内存地址、双内存地址和三内存地址即是指操作数部分所允许的内存地址个数分别为一个、两个或三个。

对于三内存地址方式编码来说,操作数部分最多允许有三个内存地址,这样的编码长度就会很长,但每条机器指令的功能很强;对于两内存地址方式编码来说,操作数部分最多允许有两个内存地址,这时需要令其中的两个操作数的地址相同,如加法指令可令被加数和操作结果为一个内存地址,即此时加法指令为把被加数内存单元的数值和加数内存单元的数值相加,其和存于被加数内存单元中,这样的编码长度相对较短,同时每条指令的功能有所降低。对于单内存地址方式编码来说,操作数部分最多允许有一个内存地址,这时需要令其中的两个操作数的地址为寄存器地址,例如,对加法操作来说,需要先把被加数放在一个寄存器中,然后加法指令实现把寄存器中的数值和一个内存单元中的数值相加,其和仍存于寄存器中,这样的编码长度相对很短,但每条指令的功能很弱,很多操作通常需要多条指令才能实现。

对于单内存地址方式编码来说,若操作数长度为12位,可以用其中的前2位编码表示寄存器的编号,用后10位编码表示内存单元地址。2位编码共可表示22=4个不同的寄存器;10位编码共可表示最大为210=1024个内存单元地址。

这样,我们可以把前面讨论的算法中的基本操作编码表示成机器指令。为说明方便,假设寄存器编号为00,表示寄存器A;寄存器编号为01,表示寄存器B;寄存器编号为10,表示寄存器C;寄存器编号为11,表示寄存器D。假设我们定义机器指令的操作码为0001,表示从某个内存单元中取出数值并置于某个寄存器的操作(称为取数操作),则机器指令为:

0001 00 0000100000

表示从内存单元100000中取出数值置于寄存器A中。

假设我们定义机器指令的操作码为0011,表示把某个寄存器中的数值加上某个内存单元中的数值,其和存于寄存器中的操作(称为加法操作),则机器指令为

0011 00 0000100001

表示把寄存器A中的数值加上内存单元100001中的数值,其和存于寄存器A中。

假设我们定义机器指令的操作码为0010,表示把某个寄存器中的数值存于某个内存单元的操作(称为存数操作),则机器指令为:

0010 00 0000100010

表示把寄存器A中的数值存于内存单元100010中。(www.chuimin.cn)

假设我们定义机器指令的操作码为0000,表示结束程序执行的操作(称为结束操作),则机器指令为:

0000 00 0000000000

表示结束程序执行。其余机器指令不再一一详细表示。

注意:机器指令表示操作数使用的是该操作数在内存单元的地址(或寄存器的编号)。这样,内存地址就表示操作数在内存单元中的地址,内存单元中的数值就表示某内存地址中的数值(也称作内存地址中的内容)。表3-1给出了上述定义下4条机器指令的二进制码和十六进制码表示格式和操作定义。因每个十六进制码表示4位二进制码,所以用十六进制码表示机器指令更为简洁。

表3-1 机器指令举例

计算机进行数据处理时,既要有程序,也要有数据。程序(这里为机器指令的形式)给出了数据处理的方法,数据即为数据处理所要具体处理的对象。程序和数据都存储在内存单元中,通常把内存单元分为程序区和数据区。程序区用于存储程序,数据区用于存储数据。假设内存为1024字节,程序区和数据区如图3-3所示划分。

图3-3 内存的划分

对于求解二进制数求和问题,假设内存单元100000中已存储了二进制数101,内存单元100001中己存储了二进制数111,并假使内存单元100010为保存和数的单元。假使程序存放于从内存地址0000000001开始的内存单元中,内存从字节编码,那么,二进制数求和问题的程序和数据在内存中的表示形式如下所示:

内存地址 内存单元内容 操作含义

0000000001 0001 00 0000100000 从内存100000中取数值置于寄存器A

0000000011 0011 00 0000100001 寄存器A的数值加内存单元100001的数值,和存于寄存器A

0000000101 0010 00 0000100010 把寄存器A的数值存于内存单元100010中

0000000111 0000 00 0000000000 结束程序执行

0000100000 101 数据x=5

0000100001 111 数据y=7

0000100010 1100 和sum存放单元

当我们让计算机从内存地址0000000001开始执行机器指令形式的程序时,计算机将完成sum=x+y=5+7=12的数据处理任务,并把计算结果(此例为1100)存于内存地址0000100010中。

这里给出的机器指令编码格式和编码方法是原理性的示例,实际计算机的机器指令编码格式和编码方法远比这里给出的复杂。