指令系统第二节

寻址方式

1、CPU执行指令的时候,根据指令约定的寻址方式获取操作数。有的指令通过操作码隐含约定采用何种寻址方式,有的指令则设置专门的寻址方式说明字段。

2、如果是双操作数指令或数据传输指令,则指令会涉及多个地址,对应的寻址方式可以互不相同,一条指令可以有多种寻址方式。

3、寻址方式主要是针对操作数而言,但转移类指令通常需要形成转移的目标地址,这与形成操作数地址的含义并无区别,也可以归入寻址方式的范畴。

4、思路:

(1)操作数就包含在该指令中,或者紧跟着这指令

(2)操作数在CPU的某个寄存器中

(3)操作数在主存中:

<1>   单操作数进行处理 <2> 对一个连续的数组或者是对数组中的某个元素进行处理 <3> 对一个表格或者表格中的某个元素进行处理。

(4)操作数在堆栈区中,可以隐含约定由堆栈指针SP提供地址。

(5)操作数在某个I/O接口的寄存器中。可以通过提供I/O端口地址来单独编址和提供总线地址与主存单元统一编址。

5、立即寻址

由指令直接给出操作数,直接对指令中代码段进行截取就可以得到操作数。

取出的操作数被称为立即数或者常数。

在取出指令的同时相当于已获得了操作数,另一种方式是将操作数存放在指令之后,即在读取指令之后再从紧随其后的存储单元中读取获得操作数。

优点:快速、简便地获得操作数

缺点:数据一般是变量,适用范围不广。

6、主存直接寻址

在指令中直接给出操作数的有效主存地址,根据该地址可从主存储器中读取或写入操作数。

又叫做绝对寻址。直接寻址的助记符常用(A)表示。

优点:简单直观,且便于硬件实现。

缺点:(1)有效地址是指令的一部分,不能随程序的需要而动态地改变(2)指令中需要给出全字长的地址码。

7、寄存器直接寻址

在指令中直接给出寄存器号,操作数实际存储在指定编号的寄存器中。CPU中有若干寄存器,其中一些可编程访问,也成为通用寄存器。在指令中,寄存器寻址方式的助记符常用R表示。

优点:从CPU的寄存器之中读取操作数要比访问主存要快得多。

由于寄存器数远少于主存储器的单元数,所以指令中存放寄存器号的字段位数就大大少于存放主存地址所需的位数,可以有效的缩短指令长度,使得读取指令的时间减少,提高了CPU的工作速率。

8、主存间接寻址

若操作数存放在某个主存单元中,则该主存单元的地址被称为操作数地址。若操作数地址存放在另一主存单元中,则该主存单元被称为间址单元,间址单元本身的地址被称为操作数地址的地址,即操作数的间接地址。

指令中给出主存间址单元地址(间接地址),按照该地址访问主存中的间址单元,从中读取操作数地址,按操作数地址再次访问主存,然后从相应单元中读取或写入操作数。助记符常用@表示。

优点:这种通过主存间接寻址产生有效地址的方法为编程提供了灵活性。这种寻址方式有力地支持了程序的循环操作,也能实现程序的共享。

缺点:需要连续两次访存才能获取到操作数。访存操作往往比较耗时,因此这种方式增加了访存次数,获取操作数的速度很慢,会严重拖慢CPU执行指令的速率。此外,由于在指令中给出了间址单元地址,这也会使指令的长度增加。

9、寄存器间接寻址

指令中给出寄存器号,指定的寄存器中存放的是操作数的有效地址,按照该有效地址访问主存,读取或写入操作数。用R表示助记符。

优点:(1)寄存器间接寻址方式比主存间接寻址方式少访问一次主存,且由寄存器提供有效地址及修改寄存器内容,比从主存中读取有效地址及修改主存单元内容要快很多,因此寄存器间接寻址方式的执行速度较快。(2)指令中给出的寄存器号位数比主存单元的全地址码位数要少很多,且寄存器的宽度可以设计得很大,足够容纳全字长的地址码。

衍生:

(1)自增型寄存器间址

每从寄存器读取操作数地址后,寄存器内容要自动加一。用(R)+表示助记符。

(2)自减型寄存器间址

指定的寄存器内容先减1以后再被读取出来作为操作数的有效地址,然后按此地址访问主存,从相应主存单元中读取操作数。用-(R)表示助记符。

10、变址寻址

指令中分别给出一个寄存器号和一个形式地址,寄存器中的内容作为偏移量,形式地址作为基准地址,将基准地址和偏移量相加得到操作数的有效地址。变址方式常用助记符X(R)表示,表示以寄存器R的内容为偏移量,以指令后邻单元存储的形式地址D为基准地址,两者相加形成操作数的有效地址。

11、基址寻址

指令中分别给出一个寄存器号和形式地址,寄存器中的内容作为基准地址,形式地址作为偏移量,将基准地址与偏移量相加作为操作数的有效地址,再按此地址访问主存,在相应的主存单元中读取或写入数据。

相应地,在这种寻址方式下,应在CPU中设置专用的基址寄存器,或者由程序指定某个通用寄存器担任基址寄存器。

典型应用:程序的重定位,扩展有限字长指令的寻址空间。

PS:

变址寻址方式立足于面向用户,可用于访问成批数据

基址寻址方式立足于面向系统,可用来解决程序在实际主存中的重定位问题,以及在有限字长指令中扩大寻址空间。

12、基址加变址寻址

指令中给出一个基址寄存器号RB,一个变址寄存器号RX和一个形式地址D,基址寄存器的内容作为基准地址,变址寄存器的内容作为变址偏移量,形式地址则作为常规偏移量。基本格式:OP->RB->RX->D这样的方式可以方便的处理二维数组或者表格。

13、PC相对寻址

将程序计数器PC当前的内容作为基准地址,指令中给出的形式地址为偏移量(可正、可负),两者相加后形成操作数的有效地址。这种寻址方式是以PC当前的内容为基准进行偏移定位的,所以成为相对寻址。

需要了解的是若取指令的时候PC=A,按地址A从主存中读取指令放入IR(指令寄存器),然后PC+n,指令中的形式地址子段给了偏移量d,所以操作数的有效地址=A+n+d。

14、页面寻址

页面寻址在MIPS指令集中也称为微直接寻址方式,其定义是:PC的高位段作为有效地址的高位段,指令中给出的形式地址d作为有效地址的低位段。

计算机中通常采用页式存储器管理技术,即将主存储器分为若干相同容量的页面,主存单元的地址就可映射成“页号+页内地址”。让PC内容的高位段对应主存的页号,访存时指令再给出目标单元的页内偏移量(页内地址,即该页起点到操作数所在单元之间的距离),采取页面寻址方式,有利于快速生成有效地址以访问目标主存单元。

15、堆栈寻址

堆栈是一种按后进先出存储顺序进行存取的存储结构。一般的做法是:在存储器中划出一段区间作为堆栈区,堆栈区有两端,作为起点的一端固定,我们称之为栈底,在开辟堆栈区的时由程序设定栈底地址;另一端称为栈顶,随着将数据压入堆栈,栈顶位置自底向上浮动。在CPU中设置一个具有加减计数功能的寄存器作为堆栈指针,命名为SP,SP中的内容就是栈顶单元地址。随着数据的压入或弹出,SP中的内容将自动修改。注意堆是由地址码由大到小地往上堆。堆栈寻址方式就是专门用于访问堆栈的寻址方式,操作数在堆栈中,指令隐含约定由堆栈指针SP寄存器提供栈顶单元地址,进行读出或者写入。

随着向堆栈压入数据,堆栈的存储空间增大,称为堆栈生长。

16、指令寻址方式的隐含约定问题

(1)通过操作码字段隐含说明

【0 0】RR型指令 源寻址方式和目的寻址方式都是寄存器型寻址

【0 1】RX型指令 寄存器寻址-相对寻址

【1 0】SI型指令 基址寻址-立即数寻址

【1 1】SS型指令 基址寻址-基址寻址

(2)分别设置专用的寻址方式说明字段

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值