机器语言,是由一条条语句构成的,每一条语句又能准确的表达某种语义(比如某种操作数,参与操作的数,或者其他的信息在何处)。而计算机就是通过连续执行每一条机器语句而实现全自动工作的。所以,人们把计算机执行某种操作的命令,称为机器指令。而一台计算机能执行的全部指令集合称作指令系统。

机器的指令系统,集中反映了机器的功能。一台机器只能执行自己指令系统中的指令,其他系统的指令它是完全看不懂。因此说,指令系统就是计算机的语言(所以有时候,C语言的程序在不同的机器中结果不同)。所以有条件的话,尽量做兼容机。 指令是计算机运行的最小功能单位,而指令系统是计算机的主要属性,介于硬件和软件之间。

指令格式

影响计算机指令格式的因素有:机器字长,存储器容量,指令的功能。 而指令通常需要反映以下几点信息:

作何操作

如需要操作,去哪取指令呢?

结果送至何处 - 有无下一条指令?

有的话去何处取?

而一条指令通常包括两个方面:

解释如下:

操作码:表示该指令应该进行什么性质的操作,如加减乘除,取数,存数等等。通常其位数反映了机器的操作种类,也就是机器允许的指令数(举个例子,如果操作码有7位,那么这个机器最多可以包含2^7 = 128条操作指令)。操作码也分为定长操作码(用于指令字长较长的情况如RISC)和不定长操作码。

地址码:表示被操作数,操作数,以及操作结果和下一条指令地址(这里的地址,可以主存地址,寄存器地址甚至是I/O地址)。

根据地址码中字段数目的不同,常常分为下列的四种地址码:(假设指令字长为32位)

四地址码

完成操作:(A1)OP(A2) ->A3.后续的指令地址可以任意填写(即A4),那么它的寻址能力就是2^6 = 64.如果指示的地址字段均是指的主存地址,则一共需要访问4次存储器(因为无论作何操作都需要取指令),然后取两个操作数两次,存放结果一次。 程序大多数都是按顺序执行,程序计数器PC能存放当前欲执行的指令的地址,又有计数功能,因此能自动形成下一条指令此时,A4便可以省去,形成三地址格式。

三地址码

完成操作:(A1)OP(A2) ->A3.跟刚刚说的四地址码一样,需要经过四次访存,但是其寻址地址范围有所增加,为2^8 = 256位。

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

二地址指令

完成操作:(A1)OP(A2)->A1.即A1字段中即代表的是源操作数地址,又代表存放本次运算结果的地址。当然也可以这样(A1)OP(A2)->A2.跟上面的原理完全一样。只不过用的是A2字段存放罢了。

但是,如果用A1或者A2来存放结果,则需要访问4次内存。若采用的是ACC存放结果,则需要3次访存(因为ACC在CPU中,不在内存中)。其寻址能力为2^12 = 4K. 再进一步,如果将操作数(其中一个)隐含在ACC中,则指令只需要给出一个地址码,便可以构成一地址码指令。

二地址码根据操作数的物理位置,分为:

SS(存储器 - 存储器类型)

RS(寄存器 - 存储器类型)

RR(寄存器 - 寄存器类型)

存取速度自上往下越来越快。

一地址指令

完成操作:(ACC)OP(A1) ->ACC.也就是ACC存放的参与运算的数,又存放中间的结果。这样完成该指令只需要2次访存。寻址范围为2^24 = 16M. 类似的可以有类似于(PC) 1 ->PC等等

在指令系统中,还有一种指令,它不需要操作数,或者所需要的操作数是隐含指定的。这就是所谓的零地址指令。

零地址指令

这类操作一般用来进行停机,空操作,清除操作。对ACC内容操作,对堆,栈内容进行操作。隐含的操作数一般来自于栈顶,和次栈顶元素。

计算机指令的基本格式构成(计算机组成原理)(1)

,