目录
1.指令格式
基本格式:操作码字段+地址码字段
1)零地址指令

零地址指令只需要操作码OP,没有显式的地址。
一般用于不需要操作数的指令:比如空操作指令,停机指令,关中断指令
还有在堆栈计算机中,在堆栈顶取值的操作
2)一地址指令

1.单操作数的指令
指令的含义:OP(A1)——> A1
取A1地址的操作数,进行OP操作后,结果存回原地址
比如:加1,减一,求反码,求补码等
2.有隐藏约定目的的双操作数指令
指令含义:(ACC)OP (A1)——> ACC
取A1地址的操作数,指令可隐含约定另一个操作数由ACC(累加器)提供,运算的结果存在ACC中。
寻址范围:假设指令字长32位,操作码占8位,地址码占24位,可以算出直接寻址范围是
= 16M
3)二地址指令

指令含义:(A1)OP(A2)——> A1
分别取A1,A2地址的操作数,进行OP操作,最后的值返回A1
寻址范围:假设指令字长32位,操作码占8位,两个地址码各占12位,可以算出直接寻址范围是
= 4K
3)三地址指令

分别取A1,A2地址的操作数,进行OP操作,最后的值存入A3
直接寻址范围:256(前提同上)
访问存储器次数:4次 = 取指令 + 取A1 + 取A2 + 存入A3
4)四地址指令

寻址范围:64
2.指令的寻址方式
指令的寻址方式即确定本条指令的数据地址和下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址两类。
一、指令寻址
1)顺序寻址
顺序寻址通过程序计数器(PC)加1(1个指令的字长),自动生成下一条指令地址
2)跳跃寻址
跳跃寻址通过转移类指令实现。下一条指令的计算方式是由本条指令给出的。
二、数据寻址
1)隐含寻址
不显示地给出操作数的寻址,指令中隐含操作数的地址。
例如:零地址指令和单地址指令

2)立即寻址
把指令的地址字段直接替换成操作数本身,有叫做立即数。数据采用补码的形式存放。

3)直接寻址
EA=A
指令中的地址字段就是真实的地址EA

4)间接寻址
由于以上几种寻址方式所能保存的地址数量有限,所以引入了间接寻址
间接寻址,地址存放在主存中,扩大了存储的范围,但访问的速度依旧很慢

5)寄存器寻址
EA=
寄存器寻址是指在指令中直接给出操作数所在的寄存器编号,EA=,其操作数在
所指的寄存器内。

寄存器在CPU中,执行速度非常快,但成本较高,访问主存0次。
6)寄存器间接寻址
EA=()
类似于间接寻址,寄存器间接寻址是寄存器给出操作数的在主存中的地址,即EA={Ri}

相比间接寻址,速度会快很多,访问主存只有一次。
7)相对寻址
EA = (PC)+ A
类似于指令寻址的跳跃寻址,PC的内容加上形式地址A形成的有效地址,再根据有效地址取出操作数。因此操作数的地址不是固定的,它会随PC的变化而变化,而指令地址和操作数总相差一个固定值,因此便于程序的浮动。相对寻址广泛用于转移指令。

8)基址寻址
EA = (BR)+ A
将CPU中的基址寄存器(BR)的内容加上指令格式中的形式的地址A得到操作数的有效地址
注意:BR的内容是不变的

9)变址寻址
EA = (IX) + A
变址寻址是指将形式地址A加上变址寄存器IX的内容之和。变址寄存器的内容可以由用户改变,作为偏移量,形式地址的A不变,作为基地址。适合编制循环程序。

10)基址寻址和变址寻址的主要区别
这两种寻址形成有效地址的过程极为相似,但应用的区别却很大。
基址寻址面向系统,用于多道程序或数据分配存储空间。
变址寻址面向用户,主要用于数组中数据的随机地址的分配。
【例题1】

注意:双字节指令,PC执行一条指令后应该+2到下一条。
PC:程序计数器,R:通用寄存器,XR:变址寄存器
1)直接寻址:通过500这个地址寻址,对应的操作数是800.
2)立即寻址:用操作数作为地址,因此操作数就是500
3)间接寻址:通过形式地址500找到有效地址800,最后通过有效地址800找到操作数300
4)相对寻址:根据EA = (PC) + A = 200 + 2 + 500 = 702,根据有效地址702找到操作数325
5)变址寻址:根据EA = (XR)+ A = 100 + 500 = 600,根据600找到操作数900
6)寄存器寻址:直接把R1的内容400装入ACC
7)寄存器间接寻址:根据寄存器R1的内容,有效地址为400,所以操作数是700
【例题2】

根据变址寻址的计算方式:EA = (IX)+ A,求后面间接寻址需要的形式地址:(IX)+A
根据变址寻址的计算方式:EA = (A),有效地址是 ((IX)+A)
注意这些用来寄存器的地方都打了括号的
3.CISC和RISC(简单介绍区别)
