计算机组成原理自学笔记(七)

本文详细阐述了计算机指令中的各种寻址方式,包括顺序寻址、跳跃寻址、立即寻址、直接寻址、隐含寻址、间接寻址、寄存器寻址、基址寻址和变址寻址等。每种方式都详细说明了其工作原理和应用场景,如立即寻址在指令执行时不需要再次访存,而间接寻址可能需要多次访存以扩大寻址范围。此外,还通过实例解释了不同寻址方式在计算有效地址和操作数上的差异,帮助理解这些寻址方式如何影响程序执行和数据访问效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

少啰嗦,开干


为什么在指令当中要设置多种类型的寻址方式?
寻址方式

确定本条指令的操作数地址,或者是下一条要执行的执行地址;即如何找到指令或数据的地址。
指令寻址
1) 顺序寻址:取完一条指令之后,顺序的取下一条指令;
由于指令的地址是保存在PC当中,那么取完当前指令,为了取下一条指令就要把PC的内容加上1送到PC当中
(PC) + 1 —> PC
“+ 1"是不是在任何一台计算机(指令集)当中都是"PC + 1”?
如果内存单元的编址单位是字节,每一条指令的长度是32位(4个字节),那么顺序寻址时"+“的值就是4;如果指令的长度是64位,那么就是”+8";如果指令是可变长度,"+1"就更为复杂
2) 跳跃寻址:由转移指令指出下一条指令的地址

在这里插入图片描述
数据寻址
给定指令格式,单地址指令,且在地址前给定寻址特征(标示采用何种寻址方式找到操作数所在的地址),操作码依旧标示何种操作
在这里插入图片描述
形式地址:就是在指令当中使用到的地址;形式地址并不是我们要找的数据所在的存储单元或是寄存器的真实地址,要找到真实地址我们需要利用寻址方式和形式地址进行一定的运算或者是转换才能得到真正有效的地址。
有效地址:操作数的真实地址。
假设:指令字长 = 存储字长 = 机器字长

1) 立即寻址:形式地址A就是操作数,该数据直接参与操作码指定的运算;
指令格式如下:
在这里插入图片描述
在译码的过程中,如果发现寻址特征位为"#",则表示后面的操作数为一个立即数(可正可负,补码的形式表示);采用立即数寻址,操作数在取指令的过程中,实际上已经被取入到了CPU当中,所以在指令的指令过程当中不需要再一次的访存;A的位数限制了立即数的范围
2) 直接寻址
有效地址就等于形式地址
EA=A

LDA指令:把内存单元中的数据取到CPU当中,将其保存在ACC寄存器(此规定仅限于此例)
在这里插入图片描述
执行阶段访问一次存储器;A的位数决定了该指令操作数的寻址范围;操作数的地址不易修改(必须修改A)
3)隐含寻址
隐含是指我们把寻址方式隐藏到操作码当中,或者是参与运算的某个数据所在的位置,由操作码直接给出
在这里插入图片描述
指令字中少了一个地址字段,可缩短指令字长

间接寻址
EA = (A)
操作数的地址保存在某一个内存单元当中,指令当中出现的是这个内存单元的地址,有效地址是在这个给定的内存单元中保存。

一次间址

  • 执行指令阶段2次访存:一次访问内存是取出有效地址,二次访问内存是在有效地址中获取操作数,
  • 此种寻址方式可扩大寻址范围,
  • 便于编制程序

在这里插入图片描述

多次间址
多次访存
1/0表示目前这个地址依然是一个间接地址(间接寻址方式)
在这里插入图片描述
eg:
在这里插入图片描述
寄存器寻址
(寄存器直接寻址)有效地址就是寄存器的编号
EA = Ri
在这里插入图片描述

寄存器间接寻址
EA =( Ri)
操作数保存在内存单元当中,操作数的地址保存在寄存器当中
在这里插入图片描述
基质寻址
1)采用专用寄存器作为基址寄存器,有效地址是基址寄存器当中保存的内容加上形式地址
EA = (BR)+ A
BR为基址寄存器
在这里插入图片描述
2)采用通用寄存器作为基址寄存器
在这里插入图片描述
变址寻址
指定一个变址寄存器,该寄存器的内容加上形式地址得到有效地址
EA = (IX)+ A
IX为变址寄存器(在CPU中可采用专用/通用寄存器)
在这里插入图片描述

eg:假设数据块首地址为D,求N个数的平均值
直接寻址:
在这里插入图片描述
变址寻址:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值