计组中寻址方式的总结

寻址方式:

下一条要执行指令的指令地址

确定本指令的操作数地址

一、指令寻址

1.顺序:
(PC)+1=PC  其中这个1很复杂,如果内存单元编制单位为字节,若指令长度为32位,则寻址就要加4; 指令长度为64位,则寻址就要加8;若指令为可变长度,则更复杂。
2.跳跃:  
由转移指令指出
 

二、数据寻址 

以单地址指令为例:
操作码
寻址特征
形式地址A
形式地址A:指令字中的地址
有效地址EA:操作数的真实地址(利用寻址方式和形式地址进行一定的运算或者转换)
当指令字长=存储字长=机器字长

1.立即(数)寻址:

形式地址A就是操作数
  • 指令执行阶段不访存
  • A的位数限制了立即数的范围
 

2.直接寻址

有效地址有形式地址直接给出EA=A
直接给出内存单元的物理地址

 

其中累加器ACC是专用于存储(操作数或运算结果)的8位寄存器
  • 指令执行阶段访问一次存储器
  • A的位数决定了操作数的寻址范围
  • 操作数的地址不易修改(必须修改A)

3.隐含寻址

把参与运算的某个数据(地址)隐含在操作码(寄存器)中
如8086
MUL指令    被乘数隐含在AX(16位)或AL(8位)中
MOVS指令  源操作数的地址隐含在SI中,目的操作数的地址隐含在DI中
  • 指令字中少了一个地址字段,可缩短指令字长

4.间接寻址(一次寻址和多次寻址)

操作数的地址保存在某内存单元中,指令单元(形式地址)出现的是内存单元的地址,
有效地址由形式地址间接提供 EA=(A)

5.寄存器(直接)寻址

有效地址即为寄存器编号 EA=Ri 
 
  • 执行阶段不访存,只访问寄存器(寄存器在CPU内部),执行速度快
  • 寄存器个数有限(只有16个),可缩短指令字长

6.寄存器间接寻址

有效地址在寄存器中 EA=(Ri)
  • 有效地址在寄存器中,操作数是在存储器中,执行阶段需要访存
  • 便于编制循环程序(可通过修改寄存器中的内容访问不同操作数)

7.基址寻址(主要用于多道程序设计)

7.1采用专用寄存器做基址寄存器
EA=(BR)+A    BR是基址寄存器
  • 可扩大寻址范围
  • 有利于多道程序(当它分时执行时,程序的起始地址放在BR中,在执行过程中动态形成操作数的地址),这叫做程序的动态定位
  • BR内容由操作系统或管理程序确定
  • 在程序执行过程中BR内容不变,形式地址A可变
7.2采用通用寄存器做基址寄存器
  • 由用户指定哪个通用寄存器作为基址寄存器
  • 基址寄存器的内容有写操作系统确定
  • 在程序的执行过程中R0内容不变,形式地址A可变

8.变址寻址

EA=(IX)+A  其中IX为变址寄存器(专用、通用)
  • 可扩大寻址范围
  • IX的内容由用户给定
  • 在程序执行过程中IX内容可变,形式地址A不变
  • 便于处理数组问题(当对数组循环操作时,A可表示数组的起始地址,IX作为数组的下标)

9.相对寻址

EA=(PC)+A    A是相对于当前指令的位移量(可正可负,补码)
  • A的位数决定操作数的寻址范围
  • 程序浮动
  • 广泛用于转移指令

10.堆栈寻址

硬堆栈: 多个寄存器
软堆栈: 指定的存储空间
 
先进后出(一个入出口)  栈顶地址由SP指出
进栈(SP)-1——>SP   出栈(SP)+1——>SP (其中1表示压入堆栈的长度是内存单元当中一个编制单位)
uploading.4e448015.gif正在上传…重新上传取消
 
 
 
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值