寻址方式:
确定本条指令的操作数地址,下一条要执行指令的指令地址
寻址方式:
- 指令寻址
- 数据寻址
指令寻址
顺序:(PC)+1->PC
跳跃:由转移指令指出
数据寻址
指令格式
操作码 | 寻址特征 | 形式地址A |
---|
形式地址:指令字中的地址
有效地址:操作数的真实地址
指令字长=存储字长=机器字长
1.立即寻址
形式地址A就是操作数
指令执行阶段不访存,A的位数限制了立即数的范围
2.直接寻址
EA=A,有效地址由形式地址直接给出
指令在执行阶段访问一次存储器。A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改(必须修改A)。
3.隐含寻址
操作数隐含在操作码中
指令字中少了一个地址字段,可缩短指令字长。
4.间接寻址
EA=(A),有效地址由形式地址间接提供
执行指令阶段两次访存。
可以扩大寻址范围。
可以通过修改EA来修改操作数地址,方便编制程序。
5.寄存器直接寻址
EA=Ri,有效地址就是寄存器编号。
执行阶段不访存,只访问寄存器,执行速度快。
寄存器个数有限,可以缩短指令字长。
6.寄存器间接寻址
EA=(Ri),有效地址存储在寄存器中,需要访问寄存器获取有效地址,再对有效地址进行访存。
有效地址存储在寄存器中,操作数在存储器中,执行阶段需要访存。
便于编制循环程序。
7.基址寻址
- 采用专用寄存器作基址寄存器
EA=(BR)+A,BR为基址寄存器。
用BR+A可以扩大寻址范围,有利于多道程序。
BR内容由操作系统或管理程序决定,无法更改,要更改地址只能通过修改形式地址A,BR是不可变的。
- 采用通用寄存器作基址寄存器
可选择BR,由用户指定选择哪个作为基址寄存器。基址寄存器的内容由操作系统决定,故R0不变,A可变。
8.变址寻址
EA=(IX)+A,IX为变址寄存器(专用)。通用寄存器也可以作为变址寄存器。
同基址寻址,可以扩大寻址范围。
IX由用户给定,可以更改。执行过程中IX可变,A不可变。——与基址寻址对比
便于处理数组问题。
9.相对寻址
EA=(PC)+A,A是相对于当前指令的位移量(可正可负,是补码)。
PC不可变,由A来决定操作数寻址范围。
程序浮动。
广泛用于转移指令。
10.堆栈寻址
一个先进后出的队列,只有一个出入口。栈顶地址由SP指出。
硬堆栈:多个寄存器
软堆栈:指定的存储空间
进栈:(SP)-1 -> SP
出栈:(SP)+1 -> SP
设计指令格式时应该考虑的因素
1.指令系统的兼容性
2.其他因素
操作类型:包括指令个数及操作的难易程度
数据类型:确定哪些数据类型可参与操作
指令格式:指令字长是否固定。操作码位数、是否采用扩展操作码计数,地址码位数、地址个数、寻址方式类型
寻址方式:指令寻址、操作数寻址
寄存器个数:寄存器的多少直接影响指令的执行时间。