指令基本格式
指令简单说来就是机器语言的语句。
指令由操作码(OP)和地址码(A)两方面构成。
地址码的作用:
指出操作数的地址
给出结果存放的地址
指出下一条指令的地址
(以上地址可以是主存地址、寄存器地址、I/O地址)
地址码可以是操作数本身、操作数地址或者操作数地址的计算方法。
每一条指令都包含操作码(每一条指令都必须告诉CPU该指令做什么操作)。
地址码
四地址指令
OP | A1 | A2 | A3 | A4 |
OP:操作码;A1、A2:第一操作数和第二操作数;A3:存放运算结果的地址;A4:下一条指令的地址。
执行四地址指令需要访问4次存储器(取指令一次,取操作数两次,存放结果一次)
缺点:占用存储空间
设指令字长为32位,操作码占8位,4个地址字段各占6位,则指令操作数的直接寻址范围为26=64
三地址指令
OP | A1 | A2 | A3 |
去掉A4:
程序计数器PC既能存放当前欲执行指令的地址,又有计数功能,可自动形成下一条指令的地址码。
OP:操作码;A1、A2:第一操作数和第二操作数的地址;A3:存放运算结果的地址;
执行四地址指令需要访问4次存储器(取指令一次,取操作数两次,存放结果一次)
缺点:占用存储空间
设指令字长为32位,操作码占8位,3个地址字段各占8位,则指令操作数的直接寻址范围为28=256
二地址指令
OP | A1 | A2 |
后续指令的地址隐含在程序计数器中
得到的结果覆盖以前的源操作数,而不是存储到新的主存地址中。
OP:操作码;A1、A2:其中一个作为操作数的地址,另一个既作为操作数的地址,又用于存放本次运算结果的地址。
执行四地址指令需要访问4次存储器(取指令一次,取操作数两次,存放结果一次)
设指令字长为32位,操作码占8位,2个地址字段各占12位,则指令操作数的直接寻址范围为212=4K
注意:若将结果存放到寄存器中,则只需要3次访问存储器(取指令一次,取操作数两次)
一地址指令
OP | A1 |
其中一个操作数隐藏在运算器的ACC中,这样,取其中一个源操作数就可以直接在ACC中进行了,而且金基金需要访问一次存储器去另外一个操作数就够了
零地址指令
停机指令、空指令不需要地址码
地址码总结
可以用硬件来换取空间,即使用诸如PC、ACC等硬件来减少指令字中需指明的地址码,可在不改变指令字长的前提下,扩大指令操作数的直接寻址范围。此外,还可以使用诸如PC、ACC等硬件缩短指令字长以及减少访存次数。
以上讨论的地址均为主存地址格式,实际上,地址格式也可以是用来表示寄存器的编号(当CPU中含有多个通用寄存器时,对每一个寄存器赋予一个编号,便可以指明源操作数和结果存放在哪一个寄存器中)。当地址字段表示寄存器时,也可由三地址、二地址、一地址之分,它们的共同点是,在指令执行阶段都不必访问存储器(只需在取指令是访问一次存储器),直接访问寄存器,使机器运行速度得到提高。
定长操作码
定长操作码指令是指在字的最高位部分分配固定的若干为表示操作码。对于具有n位操作码字段的指令系统,最多能够表示2n条指令。
扩展操作码指令格式
特点
- 操作码长度不固定;
- 操作码的长度随地址码个数的减少而增加;
- 不同的地址数可以具有不同长度的操作码。
- 在满足需要的前提下,有效缩短了指令字长。
举例
从王道考研盗了张图:
原则
- 不允许短码是长码的前缀
- 各指令的操作码一定不能重复