寻址方式:寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。(分为指令寻址和数据寻址,本文是对后者的总结。)
采用不同寻址方式的目的:可缩短指令字长,扩大寻址空间,提高编程的灵活性。
形式地址(A):指令中的地址码字段并不代表操作数的真实地址。
有效地址(EA):形式地址结合寻址方式,所计算出操作数在存储器中的真实地址。
指令字长度:一个指令字所占有的位数。
有效地址:程序指定
访存次数:0
优点:有利于缩短指令字长。
缺点:需增加存储操作数或隐含地址的硬件。
注:简化地址结构的基本方法是尽量采用隐地址。
有效地址:A 即是操作数
访存次数:0
优点:指令在执行阶段不访问主存,指令执行时间最短(获取操作数最快)。
缺点:A 的位数限制了立即数(即操作数本身)的范围。
有效地址:EA = A 【解释:操作数的真实地址 EA = 指令字中的形式地址 A 】
访存次数:1
优点:简单,不需专门计算操作数的地址。
缺点:A 的位数限制了操作数的范围,操作数的地址不易修改。
注:1. 直接寻址的无条件转移指令的功能是将指令中的地址码送入程序计数器(PC)。
2. 直接寻址的操作数在主存中。
有效地址:EA = (A) 【解释:指令的地址字段给出的形式地址是操作数地址的地址】
访存次数:2 (一次间接寻址)
优点:1. 可扩大寻址范围。(有效地址EA 的位数 > 形式地址A的位数)
2. 便于编制程序。(可方便地完成子程序返回)
缺点:指令在执行阶段要多次访存。访问速度过慢。
有效地址: 【操作数在由 Ri 所指的寄存器内】
访存次数:0
优点:1. 只访问寄存器,执行速度快。支持向量/矩阵运算。
2. 缩短指令中某个地址段的位数。
缺点:寄存器价格昂贵,计算机中的寄存器个数有限。
有效地址: 【寄存器 Ri 中给出的是操作数所在主存单元的地址】
访存次数:1(寄存器间接一次寻址)
优点:与一般间接寻址相比速度更快。
注:1. 若指令系统采用定长指令码格式,则立即寻址方式执行速度最快。
2. 若指令系统采用变长指令码格式,则寄存器寻址方式执行速度最快。
有效地址:EA = (PC)+ A
访存次数:1
【操作数的有效地址EA = 程序计数器(PC)的内容 + 指令格式中的形式地址A】
【A是相对于当前指令地址的位移量,可正可负,补码表示,决定操作数的寻址范围】
优点:1. 有利于多道程序设计。
2. 操作数的地址不是固定的,随PC值的变化而变化,且与指令地址之间总是相差一个固定值,便于程序浮动。(广泛运用于转移指令)
注:指令所提供的相对地址,实质上是一种以下条指令在内存中首地址为基准位置的偏移量。
有效地址:EA =(BR)+ A
访存次数:1
【操作数的有效地址EA = 基址寄存器(BR)的内容 + 指令格式中的形式地址A】
优点:1. 可扩大寻址范围(基址寄存器的位数 > 形式地址A的位数)。
2. 有利于多道程序设计。
3. 可用于编制浮动程序。(但偏移量A的位数较短)
注:基址寄存器面向操作系统,其内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性。
即(BR)不可变,A 可变。
有效地址:EA =(IX)+ A
访存次数:1
【操作数的有效地址EA = 变址寄存器(IX)的内容 + 指令格式中的形式地址A】
优点:1. 可扩大寻址范围(变址寄存器的位数 > 形式地址A的位数)。
2. 适合编制循环程序。
注:变址寄存器面向用户,其内容由用户改变(作为偏移量),形式地址A不变(作为基地址)。
即(IX)可变,A 不可变。
适合:按下标顺序访问一维数组元素,便于处理数组问题。
1. 硬堆栈:寄存器堆栈。访存次数为1。(成本高,不适合做大容量的堆栈)
2. 软堆栈:从主存中划出的一段区域。(双目运算)访存次数为4。(最合算,最常用的方法)
注意:1. 堆栈运算指令(即零地址的运算类指令),参与的两个操作数来自栈顶和次栈顶单元。
2. 堆栈指针 SP 的内容是栈顶单元地址。
3. 堆栈:数据的写入写出不需要地址,按先进后出的顺序读取数据的存储区。
练习题目:
1. 【2009统考真题】某机器字长 16 位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节 PC 自动加 1 。若某转移指令所在主存地址为 2000H ,相对位移量字段的内容为 06H ,则该转移指令成功转以后的目标地址是( C )。A. 2006H B. 2007H C. 2008H D. 2009H
解:相对寻址,操作数的有效地址EA = 程序计数器(PC)的内容 + 指令格式中的形式地址A
即EA = (2000H + 02H) + 06H = 2008H。
注:(2000H + 02H)为取指后的PC值:转移指令由两个字节组成,每取一个字节PC自动加1,则取一个指令PC应该加2。
2. 【2013统考真题】假设变址寄存器 R 的内容为 1000H,指令中的形式地址为 2000 H;地址 1000H 中的内容为2000H,地址 2000H 中的内容为 3000H,地址 3000 H 中的内容为 4000H, 则变址寻址方式下访问到的操作数是( D )。
A. 1000H B. 2000H C. 3000H D. 4000H
解:变址寻址:EA =(IX)+ A = 1000H + 2000H = 3000H,此时 3000H 是操作数的实际地址,根据实际地址访问内存,获得操作数为 4000H。
3. 在按字节编址的存储器中,每个编址单元中存放( B )。
A.1位 B.8位 C.16位 D.32位
解:在按字节编址在存储器中,每个编址单元的容量为一个字节,一个字节由8位二进制数组成,一个字节存储单元可以存放 8 位二进制位。
4. 假设寄存器 R 中的数值为 200 ,主存地址为 200 和 300 的地址单元中存效的内容分别是 300 和 400 ,则什么方式下访问到的操作数为 200( D )。
A. 直接寻址 200 B. 寄存器间接寻址(R)
C. 存储器间接寻址(200) D.寄存器寻址 R
解:直接寻址200的操作数为300;
寄存器间接寻址(R)的操作数300;
存储器间接寻址(200)的操作数为400;
寄存器寻址 R 的操作数为200。