计算机组成acc8,计算机组成原理

第七章 指令系统

第一节 机器指令

一、指令的一般格式

指令是由操作码和地址码两部分组成的,其基本格式如下图所示。

操作码字段

地址码字段

1.操作码

操作码是用来指明该指令所要完成的操作,如加法、减法、传送、移位、转移等等。通常,其位数反映了机器的操作种类,也即机器允许的指令条数,如操作码占7位,则该机器最多包含27=128条指令。

操作码的长度可以是固定的,也可以是变化的。前者将操作码集中放在指令字的一个字段内,如上图所示。这种格式便于硬件设计,指令译码时间短,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC(Reduced

Instruction Set Computer)中。如IBM370和VAX—11系列机,操作码长度均为8位。

操作码长度不固定的指令,其操作码分散在指令字的不同字段中。这种格式可有效地压缩操作码的平均长度,在字长较短的微机中被广泛采用。如PDP-11,Intel8086/80386等,操作码的长度是可变的。

操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。下面是一种扩展操作码的安排示意。

OP

A1

A2

A3

四位操作码  0000    A1    A2   A3

0001    A1    A2   A3 15条三地址指令

∶     ∶    ∶   ∶

1110    A1    A2   A3

八位操作码  1111   0000    A2   A3

1111   0001    A2   A3 15条二地址指令

∶     ∶    ∶   ∶

1111   1110    A2   A3

十二位操作码 1111   1111    0000  A3

1111   1111    0001  A3 15条一地址指令

∶    ∶     ∶   ∶

1111   1111    1110  A3

十六位操作码 1111   1111    1111  0000

1111   1111    1111  0001 16条零地址指令

∶    ∶     ∶   ∶

1111   1111    1111  1111

图中指令字长为16位,其中4位为基本操作码字段OP,另有三个4位长的地址字段为A1、A2、A3。4位基本操作码若全部用于三地址指令,则有16条。图中所示是三地址指令15条,二地址指令15条,一地址指令15条,零地址指令16条,共61条。

除了这种安排以外,还有其他多种扩展方法。

在设计操作码不固定的指令系统时,应尽量考虑安排指令使用频度高的指令占用短的操作码,对使用频度低的指令可占用较长的操作码,这样可以缩短经常使用的指令的译码时间。当然,考虑操作码长度时也应考虑地址码的要求。

2.地址码

地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址。这里的地址可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O设备的地址。

下面以主存地址为例,分析指令的地址码字段。

(1)四地址指令。这种指令的地址字段有4个,其格式为:

OP

A1

A2

A3

A4

其中,OP为操作码;

A1为第一操作数地址;

A2为第二操作数地址;

A3为结果地址;

A4为下一条指令的地址。

该指令完成(Al)OP(A2)→A3的操作。这种指令直观易懂,后续指令地址可以任意填写,可直接寻址的地址范围与地址字段的位数有关。如果指令字长为32位,操作码占8位,4个地址字段各占6位,则指令的直接寻址范围为26=64。如果地址字段均指示主存的地址,刚完成一条四地址指令,共需访问四次存储器(取指令一次,取两个操作数两次,存入结果一次)。

因为程序中大多数指令是按顺序执行的,而程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,因此它能自动形成下一条指令的地址。这样,指令字中的第四地址字段A4便可省去,即得三地址指令格式。

(2)三地址指令。三地址指令中只有三个地址,其格式为:

OP

A1

A2

A3

它可完成(A1)OP(A2)→A3的操作,这种指令的地址隐含在程序计数器PC之中。如果指令字长不变,设OP仍为8位,则三个地址字段各占8位,故三地址指令直接寻址范围可达28=256。同理,若地址字段均为主存地址,则完成一条三地址指令也需访问四次存储器。

其实,机器在运行过程中,没有必要将每次运算结果都存入主存,中间结果可以暂时存放在CPU的寄存器(如ACC)中,这样又可省去一个地址字段A1,从而得出二地址指令。

(3)二地址指令。二地址指令中只含两个地址字段,其格式为:

OP

A1

A2

它可完成(A1)OP(A2)→A 1的操作,即A1字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示(A1)OP(A2)

→A2的操作,此时A2除了代表操作数源地址外,还代表中间结果的存放地址。这两种情况完成一条指令仍需访问四次存储器。如果使其完成(A1)OP(A2)

→ACC,此时,它完成一条指令只需三次访存,它的含义是中间结果暂存于累加器ACC中。在不改变指令字长和操作码的位数前提下,二地址指令可直接寻访的主存地址数为212=4K。

如果将一个操作数的地址隐含在运算器的ACC中,则指令字中只需给出一个地址码,构成了一地址指令。

(4)一地址指令。一地址指令的地址码字段只有一个,其格式为:

OP

A1

它可完成(ACC)OP(A1) →ACC的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令只需两次访存。在指令字长仍为32位、操作码位数仍固定位8位时,

一地址指令可直接寻址的范围达224,即16M。

在指令系统中,还有一种指令可以不设地址字段,即所谓零地址指令。

(5)零地址指令。零地址指令在指令字中无地址码,例如进栈(PUSH)、出栈(POP)这类指令,其操作数的地址隐含在堆栈指针SP中。

通过上述介绍可见,用一些硬件资源如PC、ACC承担指令字中需指明的地址码,可在不改变指令字长的前提下, 扩大指令直接寻址的范围。此外,用PC、ACC等硬件代替指令字中的某些地址字段,还可缩短指令字长,并可减少访存次数。因此,究竟采用什么样的地址格式,必须从机器性能出发综合考虑。

以上讨论的地址格式均以主存地址为例,实际上地址字段也可用来表示寄存器。当CPU中含有多个通用寄存器时, 对每一个寄存器赋以一个编号,便可指明源操作数和结果存放在哪个寄存器中。地址字段表示寄存器时,也可有三地址、二地址、一地址之分。它们的共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,使机器运行速度得到提高(因为寄存器类型的指令只需在取指阶段访问一次存储器)。

二、指令字长

指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数。不同机器的指令字长是不相同的。

早期的计算机指令字长、机器字长和存储字长均相等,因此访问某个存储单元,便可取出一条完整的指令或一个完整的数据。这种机器的指令字长是固定的,控制方式比较简单。

随着计算机的发展,存储容量的增大,要求处理的数据类型增多,计算机的指令字长也发生了很大的变化。一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的,如单字长指令、多字长指令。控制这类指令的电路比较复杂,而且多字长指令要多次访问存储器才能取出一条完整的指令,因此使CPU速度下降。

为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算逻运算指令等)设计成单字长或短字长格式的指令。

例如,PDP-8指令字长固定取7位;NOVA指令字长固定取16位;IBM370指令字长可变,可以是16位(半个字)、32位(一个字)、48位(一字半):Intel

8086的指令字长可以为8、16、24、32、40和48位六种。通常指令字长取8的整数倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值