计组——十种数据寻址方式
地址码的解读方式不同,分为十种形式地址用A表示真实地址用EA表示下面以一地址为例进行讲解假设指令字长=机器字长=存储字长1. 直接寻址指令中的形式地址A就是EA,即EA=A总计访存2次:取指令+执行指令2.间接寻址指令中的形式地址是有效地址所在的存储单元的地址,即EA=(A)总计访存三次:取指令+执行指令(读形式地址+读操作数)此外还有两次间接寻址:优点:可扩大寻址范围(有效地址EA的位数大于形式
针对地址码的解读方式不同,寻址方式分为十种
这是一地址指令格式:
操作码(OP) | 寻址特征 | 形式地址(A) |
---|
这是二地址指令格式:
操作码(OP) | 寻址特征 | 形式地址(A1) | 寻址特征 | 形式地址(A2) |
---|
形式地址用A表示
真实地址用EA表示
下面以一地址为例进行讲解,并且假设指令字长=机器字长=存储字长
1. 直接寻址
指令中的形式地址A就是EA,即EA=A
总计访存2次:取指令+执行指令
2.间接寻址
指令中的形式地址是有效地址所在的存储单元的地址,即EA=(A)
总计访存三次:取指令+执行指令(读形式地址+读操作数)
此外还有两次间接寻址:
优点:
可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)
便于编制程序(用间接寻址可以方便的完成子程序返回)
缺点:
指令在执行阶段要多次访存(一次间接寻址需两次访存,多次寻址需根据存储字的最高位确定几次访存)
3. 寄存器寻址
假设指令字长=机器字长=存储字长,操作数为3
在指令字中直接给出操作数所在的寄存器编号,即
E
A
=
R
i
EA=R_{i}
EA=Ri,其操作数在
R
i
R_{i}
Ri所指的寄存器内
总计访存1次:取指令1次+执行指令0次(执行阶段不访问主存,只访问寄存器)
优点:指令字短且执行速度快,支持向量/矩阵运算
4. 寄存器间接寻址
开始套娃,寄存器
R
i
R_{i}
Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即
E
A
=
(
R
i
)
EA=(R_{i})
EA=(Ri)
总计两次访存:取指令1次+执行指令1次
特点:与一般间接寻址相比速度更快,但指令执行阶段需要访问主存(因为操作数在主存中)
5. 隐含寻址
地址不是明显给出,而是隐藏在指令中
优点:有利于缩短指令字长
缺点:需增加存储操作数或隐含地址的硬件
6. 立即寻址
假设指令字长=机器字长=存储字长,操作数为3
形式地址A就是操作数本身,又称立即数,一般用补码形式表示
#表示立即寻址特征
共访存一次:取指令1次访存+执行指令0次访存
缺点:
A的位数会限制立即数的范围
如A的位数为n,且立即数采用补码时,可表示的数据范围为:-2n-1~2n-1-1
7. 偏移寻址——基址寻址
基址寻址:以程序的起始存放地址作为“起点”,EA=(BR)+A
需要根据通用寄存器的总数判断要用几个bit指明寄存器
优点:便于程序“浮动”,方便实现多道程序并发运行
注意:基址寄存器是面向操作系统的,其内容由操作系统或管理系统确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)
当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容由操作系统确定。
OS课中的“重定位寄存器”就是“基址寄存器”
优点:可扩大寻址范围(基址寄存器的位数大于形式A的位数);用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)
8. 偏移寻址——变址寻址
变址寻址:程序员自己决定从哪里作为“起点”,EA=(IX)+A,
其中IX可谓变址寄存器(专用),也可用通用寄存器作为变址寄存器。
注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址)
基址寻址中,BR保持不变作为基地址,A作为偏移量
方便实现循环程序,或者对数组的
9. 偏移寻址——相对寻址
相对寻址:以程序计数器PC所指地址作为“起点”,EA=(PC)+A
把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,其中A是相对PC所指地址的位移量,可正可负,补码表示。
优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)
相对寻址广泛应用于转移指令。
相对寻址,取出当前指令后,PC会自动指向下一条指令,相对寻址是相对于下一条指令的偏移。
10. 堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
总结
第四章第04,05(偏移寻址)节
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)