「计算机组成原理」:指令格式

机器语言 , 是由一条条语句构成的 , 每一条语句又能准确的表达某种语义(比如某种操作数 , 参与操作的数 , 或者其他的信息在何处) 。 而计算机就是通过连续执行每一条机器语句而实现全自动工作的 。 所以 , 人们把计算机执行某种操作的命令 , 称为机器指令 。 而一台计算机能执行的全部指令集合称作指令系统 。
机器的指令系统 , 集中反映了机器的功能 。 一台机器只能执行自己指令系统中的指令 , 其他系统的指令它是完全看不懂 。 因此说 , 指令系统就是计算机的语言(所以有时候 , 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内容操作 , 对堆 , 栈内容进行操作 。 隐含的操作数一般来自于栈顶 , 和次栈顶元素 。
「计算机组成原理」:指令格式文章插图