指令的寻址方式
寻址方式是指寻找指令或操作数有效地址的方式,寻址方式分为指令寻址和数据寻址两大类。
指令中的地址码字段并不代表操作数的真实地址,这种地址成为形式地址A,由形式地址结合寻址方式,可以计算出操作数在存储器中的真实地址,这种地址称为有效地址EA
其中(A)代表地址为A的数值。
指令寻址和数据寻址:
1.指令寻址:
1)顺序寻址:通过程序计数器PC加一(一个指令字长),自动形成下一条指令的地址。
2)跳跃寻址:通过转移类命令实现,下一条指令的地址不由PC自动给出,而是由当前指令给出指令地址的计算方式,跳跃的结果是当前的指令修改PC的值,所以本质上下一条指令仍通过PC给出
2.数据寻址:
数据寻址的方式较多,为区分各个方式,通常在指令字中设置一个字段,用指明属于那种寻址方式。
常见的数据寻址方式:
1.隐含寻址:
这种类型的指令不指明操作数的地址,而在指令中隐含操作数的地址
优点:可以缩短指令字长,缺点:需要增加存储操作数或隐含地址的硬件。
2.立即寻址:
地址字段给出的不是操作数的地址,而是操作数本身,又称立即数,采用补码表示。
优点:指令在执行阶段不访问主存,执行时间最短。缺点:A的位数限制了立即数的范围
3.直接寻址:
指令字的形式地址A是操作数的真实地址EA,及EA=A
优点:简单,在执行阶段只访问一次主存。缺点:A的位数决定了操作数的寻址范围,操作数的地址不易修改
4.间接寻址:
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在存储单元的地址,即是操作数地址的地址,即EA=(A)
优点:可以扩大寻址范围。缺点:在指令的执行阶段要访问多次主存
5.寄存器寻址:
寄存器寻址是指指令字中直接给出操作数所在的寄存器编号,即EA=R,其操作数由R所指的寄存器中:
优点:指令在执行阶段不用访问主存,由于寄存器数量少,对应的地址码长度少,执行速度快。
缺点:价格昂贵,寄存器的数量有限。
6.寄存器间接寻址:
寄存器R中给出的不是操作数,而是操作数所在主存单元的地址,即EA=(R)
优点:与一般的间接寻址相比速度更快。缺点:指令的执行阶段需要访问主存。
7.相对寻址:
相对寻址是把PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+ A
相对寻址的操作数地址不是固定的,它随PC值的变化而变化,且指令地址之间总是相差一个固定值,因此便于程序的浮动。
相对寻址被广泛的用于转移指令。
8.基址寻址:
基址寻址是CPU中的基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成的有效地址,即EA=(BR)+ A
基址寄存器是面向操作系统的,其内容有操作系统或管理员确定,主要用于解决程序员逻辑空间与存储器物理空间的无关性
9.变址寻址:
变址寻址是指有效地址EA,等于指令字中的形式地址A与变址寄存器IX的内容之和,即EA=(IX)+ A。IX为变址寄存器(专用)
变址寄存器是面向用户的,在程序的执行过程中,变址寄存器的内容可有用户改变(作为偏移量),形式地址A不变,作为基地址。
变址寻址与基址寻址:
基址寻址面向系统,主要用于为多道程序或数据分配存储空间,因此基址寄存器的内容通常由操作系统或管理程序确定,在程序的执行过程中其值不变,而指令字中的A是可变的。
变址寻址立足于用户,主要用于处理数组问题,在变址寻址中,变址寄存器的内容由用户确定,在程序执行过程中其值可以改变,而指令字中的A是不可变的。
九大数据寻址方式比较:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步