版权归原作者所有,如有侵权,请联系我们

[科普中国]-四地址

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

要使确定的机器指令序列控制计算机自动连续地进行预定的信息处理,一条机器指令除包含2个操作数的地址(大多数算术运算操作要求2个操作数)外,还要一个存运算操作结果的地址及一个取下条指令的地址。其中前3个是存取操作数的地址,后一个是取指令的地址。如果都在指令码中明确地表示出来,就称之为四地址机器指令。在这样的指令码中,除操作码域外,原来的操作数地址码域部分包含了4个地址码。

基本介绍机器执行一条指定命令所需要的全部信息都必须明显地或隐晦地包含在指令格式里面,一般来说,这些信息包括:

1.操作码(它代表要执行的当前机器命令)。

2.机器进行操作时所要用到的第一个操作数的地址。

3.机器进行操作时所要用到的第二个操作数的地址。

4.结果地址(运算结果将存入机器里的这一地址)。

5.下条指令的地址(执行完本条指令后将从此地址取出下一条指令)。

如果所有这些参数都明显地见之于机器命令中,这样的指令格式就叫做四地址指令格式(参阅表1),这种格式的最主要优点可能就是在机器的指令系统中不必使用BRANCH(转移)指令,每条指令本身都明显地指出下一次要执行的指令位于何处。

|| || 表1 四地址指令格式

此外,由于有关的操作数地址和结果地址都明确指定好,因而各个操作数和结果可以各自分散在主存储器中。四地址指令在一个指令周期内就可以处理所有这些变量,不必使用中间存储器,但是,如果各个操作数都处于主存储器中,而且所得的操作数也要放到主存储器里面,那么,在这一个指令周期内就得进行几次存储器访问。

下面的示范性程序说明如何使用四地址指令去求解下列式子:

|| ||

请注意,每条指令本身都含有转移命令,指令的执行不必循着连续的存储器位置依次进行。

四地址格式的主要缺点是需要的存储器字长较长。例如,如果每个地址都需要12位来单独说明,为了描述所需要的四个地址就需要48位,再加上操作码的位数,四地址格式的指令字总长度就很大了,由于考虑到存储器和有关硬件的成本,因此,小型机和微型机从来就不使用这种指令格式,但是,在微程序控制方面还是使用了四地址格式;这样做需要增加微程序存储器的字长,但却达到提高处理机性能的目的1。

指令集指令集即指令系统,表征了计算机的基本功能。

指令系统是计算机硬件的语言系统。为此也叫机器语言、即机器语言程序员看到的机器的主要属性,从这一方面说,指令系统是软件和硬件的主要交界面,是计算机系统结构所研究的核心内容之一。

各计算机执行的指令系统不仅决定了机器所要求的能力,而且也决定了指令的格式和机器的结构;而不同结构的机器和不同的指令格式,应该具有与之相匹配的指令系统。

计算机的运行,就是计算机的中央处理器逐条执行各种指令的过程。

指令格式一条指令应包含的信息有:操作码;源操作数地址;目的操作数地址;下一条指令地址等,这由指令格式来表现。

根据不同的机器,指令的格式也是多样化的,为了使硬件能够识别并能执行不同类型的操作,指令必须是二进制编码。指令字一般为计算机的一个字长度,在该字中包含操作码、地址码、各种特征和校验码等信息。

现以算术运算指令为例说明指令格式的构成。首先要指定机器运算的类型是加法还是减法,其次要给出两个做算术运算的操作数,并指出将运算结果存放到哪里去。

指令格式可由以下两部分信息组成:

1.操作部分

操作部分即为表示操作类型的操作码,用OP(operation part)表示。指令的操作码表示该指令应进行什么性质的操作,如进行加法、减法、乘法、除法、取数、存数等等。不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。

操作码在汇编语言中一般是英语单词或缩写来唯一对应其二进制代码,所以也叫指令记忆符或助忆符,如数据传送指令为MOV。

设计计算机时,对指令系统的每一条指令都要规定一个操作码。根据已定义的这个代码,机器经译码后就能使计算机按规定操作去执行。

指令系统中的指令条数或指令类型的多少取决于给出操作码位数行的大小。常规认为,行越大,则指令条数(2n)越多,功能越强,指令系统的规模也就越大。

组成操作码字段的位数n一般取决于计算机指令系统的规模。较大的指令系统就需要更多的位数来表示每条特定的指令。

一般来说,一个包含n位的操作码最多能够表示2n条指令。即:含有n条指令的指令系统或指令集,OP字段至少应为位。

那么是否操作码位数越多越好呢? 不一定。CPU 用指令寄存器IR(instructionregister)接受并表示指令。指令的长度受到机器结构的限制。机器字长表示机器内部数据通道和工作寄存器的宽度,是各种因素综合表现的属性,指令长度也要适合这个要求。确定操作码的长度要考虑两个方面:①用尽可能短的字段来表达全部指令;②硬件的实现尽可能简单。

两方面都最优是不可能的。一般涉及OP位数的指令编码有三种情况:固定长度编码、Huffman编码、扩展编码。

固定长度编码是最简单的编码方法。其OP长度固定,指令规整。硬件译码简单,在字长较长可以开支的大中型计算机及RISC(精简指令集计算机)中使用。IBM-370计算机就是固定8位为OP。固定长度编码的缺点是浪费位,信息冗余度大,程序加长。

Huffman编码方法中的OP是变长的。这种编码把使用频率高的指令的OP用较少的位数,使用频率低的指令的OP用较多的位数,以此缩短程序长度。指令的使用频率由使用中的典型程序进行统计而得到。Huffman编码方法的缺点是,由于OP位数不固定,使译码困难,控制器的设计复杂化。

扩展编码在指令长度固定的情况下,OP长度随地址码A的减少而增加。这样可以在不加长指令的情况下扩展OP的位数,使指令条数增加。扩展编码方法的缺点是增加了指令译码的难度。

一条指令所占有的位数称指令字长。指令字长取决于OP长度、D的长度和D的个数。不同机器的指令字长是不一样的。

设计时要考虑:指令字长是字节的倍数、OP长度要覆盖全部功能指令。

定长指令结构时,OP位数固定而使地址码受限,这时要用“寻址”方法来扩大地址范围;或者采用可变字长指令结构来充分利用有限的字长位数。

指令格式中符号的约定以下介绍指令格式和后面指令举例时,所用符号服从以下约定:

OP:表示操作码,即命令、操作性质,如加、政、取数、存数、移位、清零、停机等。

Di:表示地址码,这些地址可以是内存中的单元地址,也可以是运算器中通用寄存器名。

Mi:主存内存单元。

Ri:寄存器,

→或←:表示把操作(运算)结果传送到指定的地方。

( ):表示地址的内容,例如,如果3表示3 号地址,那么(3) 即表示3号地址中存放的

内容、假定内容是A时,则(3)=A。

;:在记忆符指令方式下表示对指令功能的解释和说明,如MOV AX,BX;AX←(BX)。

PC:指令计数器,是一种寄存器,内装正在执行的指令或立即要执行的下一条指令的地址。本寄存器有自动加1功能,PC←(PC) + 1表示取下一条指令地址。

AC/AX:累加器。

SP(stack pointer ):堆栈指针。

操作数的地址部分地址部分除指定操作数地址和运算结果的地址外,可按地址部分的数量多少有各种规定格式,有四地址指令格式、三地址指令格式、二地址指令格式、单地址(一地址)指令格式、零地址指今格式和多地址指令格式。

根据一条指令中有N个操作数地址,可将该指令称为N操作数指令或N地址指令。如有3个操作数地址的指令称为三地址指令或三操作数指令。

四地址指令格式:

|| || 表2 四地址指令格式

这里D1是第一操作数地址,D2是第二操作数地址,D3是运算结果地址,D4是下一条指令地址。

指令功能:[D1]OP(D2)→D3(D4)=下一条指令地址( 非连续地址执行)→PC。第一操作数地址中的内容与第二操作数地址中的内容进行OP运算,运算结果送人第地址中去,同时指出执行的下一条指令的地址。明显被执行的下一条指令的地址不是连续的2。

本词条内容贡献者为:

李嘉骞 - 博士 - 同济大学