一研为定,万山无阻!
文章目录
- 指令寻址
-
- 顺序寻址
- 跳跃寻址
- 数据寻址(重要)
-
- 隐含寻址(了解)
- 立即寻址
- 直接寻址
- 间接寻址
- 寄存器寻址
- 寄存器间接寻址
- 前六种寻址方式总结
- 基址寻址
- 变址寻址
- 相对寻址
- 堆栈寻址 (了解)
- 例题
- 总结
指令寻址
始终由程序计数器PC给出
顺序寻址
- 不一定只是 PC 加1, 如果指令为32位,即为4个字节 那就是 (PC) + 4 -->PC ,如果指令为64 位,即为 8 个字节,那就是 (PC)+8 --> PC
跳跃寻址
由条件转移指令给出
- 下面为汇编语言的形式
数据寻址(重要)
- 寻址方式位 寻址特征
- 形式地址 指令字中的地址
- 有效地址 操作数的真实地址(可以由 寻址特征 + 形式地址 推导出)
- 约定 指令字长 = 存储字长 = 机器字长
- 指令是由操作码字段和地址码字段组成的,其中它的地址码字段并不一定代表操作数的真实地址,它称为形式地址A。通过形式地址,结合寻址方式,可以计算出操作数在存储器中的真实地址,这个真实地址称为有效地址EA。
- 寻址特征用于区分寻址方式
参考链接
隐含寻址(了解)
优点: 单地址指令,有利于缩短指令字长
缺点 : 需要增加存储操作数或隐含地址的硬件(如上述的ACC)
立即寻址
- 这种类型的指令的地址码字段指出的不是操作数的地址,而是操作数本身,又叫立即数。数据采用补码的形式存放。立即寻址的优点是指令在执行阶段不访问主存,指令执行的时间最短,缺点是A的位数限制了立即数的范围。(在定长指令码格式下,所有指令的长度都是一样的,这时候取每条指令的时间都一样,执行指令时立即数寻址最快,但是如果在变长指令码下,受到形式地址位数的限制,如果操作数比较大,那立即寻址方式在取指令的时间上要用时更多一点)
不需要取操作数,直接将操作数放于形式地址那边,该寻址特征为 #
一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果,共访存1次
优点:指令执行阶段不访问主存,指令执行时间最短
缺点 : A的位数限制了立即数的范围,如A的位数为n,且立即数采用补码时,可表示的数据范围为-2(n-1) ~ 2(n-1)-1
直接寻址
- 这种类型的指令的地址码字段的形式地址就是操作数的真实地址,取数操作直接取地址里面的内容。
形式地址就是操作数的地址
- 一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果共访存2次。
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点 : A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。
间接寻址
- 上述为一次间址
下面为两次间址
优点:1、可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)2、便于编制程序(用间接寻址可以方便地完成子程序返回)
缺点 :指令在执行阶段要多次访存(需两次访存,多次寻址需根据存
最高位确定几次访存)
寄存器寻址
- 这种类型的指令是直接给出操作数所在的寄存器的编号,EA=Ri,操作数就在Ri内存放。寄存器寻址的优点是指令在执行阶段不访问主存,只访问寄存器,因此执行速度快,因为寄存器数量少,所以寄存器编号所占的位数也少,指令字长也比较短。
- 与直接寻址差不多,就是把直接寻址的主存(数据)换成寄存器
寄存器的编号就相当于形式地址
- 执行指令不需要缓存,因为寄存器是直接在CPU 中,不需要再主存中访问操作数
一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果
共访存1次。
优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速
度快,支持向量/矩阵运算。
缺点 : 寄存器价格昂贵,计算机中寄存器个数有限。
寄存器间接寻址
- 这种类型的指令是相对于寄存器寻址的,指令中还是直接给出寄存器的编号,但是寄存器中存放的不是操作数而是操作数所在的地址,EA=(Ri)。它的优点是扩大了寻址范围,比间接寻址速度更快,但是指令执行阶段还是要访问主存的。
前六种寻址方式总结
基址寻址
这种类型的指令是将CPU中基址寄存器BR的内容加上指令格式中的形式地址,形成操作数的真实地址,EA=(BR)+A。其中,基址寄存器既可以采用专用寄存器,也可以采用通用寄存器。
基址寄存器是面向操作系统的,它的内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性。程序运行过程中,基址寄存器中的内容是不变的(作为基地址),形式地址是可变的(作为偏移量)。如果采用通用寄存器作为基址寄存器,可以由用户决定哪个寄存器作为基址寄存器,但是内容还是由操作系统决定。
优点: 基址寻址的优点是可以扩大寻址范围(基址寄存器的位数大于形式地址A的位数),用户不用考虑自己的程序存放在主存的哪个区域,有利于多道程序设计,可用于编制浮动程序,常用于为程序和数据分配存储空间。
-
隐式寄存器
不需要特定指定寄存器
-
显式寄存器
需要特点标注BR寄存器,如下图R0
-
关于有利于多道程序的设计,解释如下:(了解)
变址寻址
- 正好于基址寻址方式相反
优点: 可以扩大寻址范围(变址寄存器的位数大于A的位数),主要用在数组处理过程中,可以设定A为数组首地址,然后不断改变IX中的值即可形成数组中任意一个数据的地址,适合编制循环程序。IX的位数足以表示整个存储空间。
常用于处理循环问题。处理数组问题
注释:
1、LDA
将立即数0加载到ACC(累加器,用于存放操作数,或运算结果)
2、LDX
将立即数0 加载到 X变址寄存器中
3、如上图所示
4、INX
即为 increase x ,x 自增 (加1)
5、CPX
compare 将x与10进行比较
6、条件跳转指令 M 即为左边绿色所示 (ADD X,D)
相对寻址
堆栈寻址 (了解)
-
两个操作数都可以进行隐含起来
堆栈是存储器中的一块按照后进先出原则管理的存储区,改存储区中被读/写单元的地址是由一个特定的寄存器给出的,该寄存器称为堆栈指针SP。堆栈可分为硬堆栈和软堆栈,硬堆栈是指寄存器堆栈,由于制作成本高,不适合做大容量,一般采用软堆栈,即从主存中划分出一段区域来作为堆栈。 -
在采用堆栈结构的计算机系统中,大部分指令表面上都表现为无操作数指令的形式,因为操作数地址都隐含了SP。通常在读或写堆栈中的一个单元的前后都伴有自动完成对SP内容的增减。
-
下图为硬堆栈表现形式:
-
软堆栈表现方式如下(即为在主存中划分一块)
例题
- 黄色的部分为操作码,绿色的为当前的形式地址
取出操作码,PC 自动加1 ,取出形式地址。PC 自动加 1
1EFFH - 2002H 计算过程: 从右向左 :从0开始依次借位