Skip to content

3.2 寻址技术

寻址技术指的是处理器如何寻找指令或操作数的地址。这是计算机设计中的核心技术之一,直接影响指令系统的功能和效率。

3.2.1 编址方式

  • 定义: 对存储设备(寄存器、主存、I/O设备)进行地址编码的方式。

  • 编址单位:

    1. 字编址 (Word Addressing):每个地址对应一个机器字。早期计算机常用。控制简单,但处理非数值数据(如字符)不方便。
    2. 字节编址 (Byte Addressing):每个地址对应一个字节。现代计算机普遍采用。优点是方便处理字符等非数值数据,是它的最大优点。
    3. 位编址 (Bit Addressing):每个地址对应一个位。地址信息开销大,仅用于特定系统。
  • 地址码位数: 指令中地址码的位数与主存容量最小寻理单位有关。

    • 例如,主存容量为 220 字节,若按字节编址,地址码需20位。若按字编址(假设1字=4字节),地址码只需18位(因为有 220/4=218 个字)。

1. 编址单位与地址位数关系

主存容量

1 MB (2²⁰ Bytes)

机器字长

32 Bit (4 Bytes)
按字节编址 (Byte)需要 20 位地址线
B0
B1
B2
B3
B4
B5
B6
B7
B8
B9
B10
B11
B12
B13
B14
B15
...
按字编址 (Word)仅需 18 位地址线
Word 0 (含4字节)
Word 1 (含4字节)
Word 2 (含4字节)
Word 3 (含4字节)
...

原理:容量相同时,寻址单位越大,所需的地址编码数量越少($2^{18} < 2^{20}$)。

3.2.2 指令寻址与数据寻址

寻址可以分为两类:寻找下一条要执行的指令地址,和寻找当前指令所需的操作数地址。

  1. 指令寻址:

    • 顺序寻址: 指令按顺序存放,执行完一条指令后,程序计数器(PC)自动加1(或指令长度),指向下一条指令。PC + 1 -> PC
    • 跳跃寻址: 通过转移类指令实现。指令中会给出转移的目标地址,该地址将被送入PC,从而改变程序的执行流程。
  2. 数据寻址:

    • 定义: 寻找指令执行所需的操作数地址。
    • 数据寻址的方式多种多样,是本章的重点。指令中给出的地址称为形式地址 (A),经过某种运算后得到的实际内存地址称为有效地址 (EA)
    • 寻址方式: 就是从形式地址A生成有效地址EA的各种方法。

易考点和难点

易考点

  • 理解字节编址和字编址的区别,以及它们对地址码位数的影响
  • 区分指令寻址和数据寻址。指令寻址由PC控制,数据寻址则涉及多种复杂的寻址方式

3.2.3 寻址方式 (数据寻址)

本节详细介绍指令中用于寻找操作数的各种寻址方式。这是指令系统的核心内容,也是考试的绝对重点。

基本概念:

  • 形式地址(A): 指令中直接给出的地址字段。
  • 有效地址(EA): 操作数的真实内存地址。
  • 寻址方式: 从形式地址(A)计算有效地址(EA)的过程。

2. 数据寻址工作流 (A → EA)

计算公式
EA = A
指令 [OP | A: 100]
内存地址 [100]
有效地址 EA = 100
访存次数
1 次
特点说明: 简单直观,但寻址范围受指令长度限制。

1. 立即寻址 (Immediate)

  • 定义: 指令的地址码字段直接存放操作数本身,而不是地址。
  • 公式: 操作数 = A
  • 优点: 取指令的同时就获得了操作数,无需再次访存,执行速度快。
  • 缺点: 操作数值的大小受指令长度限制,且操作数是固定的,无法修改。
  • 用途: 常用于给寄存器赋初值或提供常数。

2. 直接寻址 (Direct)

  • 定义: 指令的地址码字段存放的是操作数的有效地址(EA)
  • 公式: EA=A
  • 优点: 简单直观,只需一次访存即可获得数据。
  • 缺点: 寻址范围受地址码位数的限制,不够灵活。

3. 间接寻址 (Indirect)

  • 定义: 指令的地址码字段存放的是一个地址的地址。即A指向的内存单元中存放着最终的有效地址EA。
  • 公式: EA=(A)
  • 优点:
    1. 扩大寻址范围:可以用较短的地址码访问整个内存空间(因为存放EA的内存单元可以是完整的机器字长)。
    2. 便于编程: 方便实现指针等数据结构。
  • 缺点: 需要多次访存(至少两次)才能获得操作数,速度慢。

4. 寄存器寻址 (Register)

  • 定义: 指令的地址码字段存放的是一个寄存器编号,操作数就在该寄存器中。
  • 公式: 操作数 = (Ri)
  • 优点:
    1. 无需访存,执行速度极快。
    2. 指令短,因为寄存器数量少,编号位数少。
  • 缺点: 寄存器数量有限。

5. 寄存器间接寻址 (Register Indirect)

  • 定义: 指令的地址码字段存放一个寄存器编号,该寄存器中存放的是操作数的有效地址(EA)
  • 公式: EA=(Ri)
  • 优点: 结合了间接寻址的灵活性和寄存器寻址的高效性。比内存间接寻址快(只需一次访存)。

6. 变址寻址 (Indexed)

  • 定义: 将指令中的形式地址(A)与一个变址寄存器(Rx) 的内容相加,得到有效地址。
  • 公式: EA=A+(Rx)
  • 优点: 非常适合处理数组等连续存放的数据结构。A作为数组基地址,Rx作为偏移量,只需修改Rx即可方便地遍历数组元素。

7. 基址寻址 (Base)

  • 定义: 将指令中的形式地址(A)与一个基址寄存器(Rb) 的内容相加,得到有效地址。
  • 公式: EA=A+(Rb)
  • 优点: 主要用于程序的重定位。操作系统将程序加载到内存的任意位置,只需将该位置的起始地址放入Rb,程序中的所有地址引用都基于这个基地址,无需修改指令本身。
  • 与变址寻址的区别:
    • 用途: 基址寻址面向系统,用于地址重定位;变址寻址面向用户,用于数组访问。
    • 内容变化: 基址寄存器的内容在程序运行期间通常不变;变址寄存器的内容会频繁改变。

3. 基址寻址 vs 变址寻址

基址寻址 (面向操作系统)
内存布局 (Program Relocation)
程序块 (基地址 Rb)
EA = Rb + A

本质:解决程序在内存里的"落脚点"问题。
特点:Rb 由 OS 设定,程序运行中通常不变

变址寻址 (面向程序员)
数组遍历 (Array Traversal)
Array[0] (地址: A + 0)
Array[1] (地址: A + 1)
Array[2] (地址: A + 2)
Array[3] (地址: A + 3)
Array[4] (地址: A + 4)

本质:解决数据结构(如数组)的"内部访问"问题。
特点:Rx 由用户控制,程序运行中频繁改变

8. 相对寻址 (Relative)

  • 定义: 将指令中的形式地址(A)与程序计数器(PC) 的当前内容相加,得到有效地址。A通常称为位移量(displacement)。
  • 公式: EA=A+(PC)
  • 优点:
    1. 生成的代码是位置无关的,便于程序在内存中的浮动。
    2. 常用于转移指令,A的位数可以较短,因为转移通常在当前指令附近。

9. 页面寻址 (Paged)

  • 定义: 将内存空间划分为大小相等的"页",地址由页号页内地址组成。指令的地址码只提供页内地址,页号则由其他方式(如页寄存器、当前页、0号页)提供。
  • 特点: 是一种二维地址结构,是虚拟存储系统的基础。

页面寻址 (Paged Addressing) 原理

原理:物理地址 = 页面起始地址 (高位) + 页内偏移 (低位)

OP (操作码)
A (页内偏移: 800H)
指令只提供这部分 (12位)
当前页面寄存器 (Page Register)
#5

提供地址的高 4 位

拼接生成的物理地址 (EA)
0101|100000000000
十六进制: 5800H
物理内存分布 (分为16页)
页 0
页 1
页 2
页 3
页 4
当前激活页
页 6
页 7
页 8
页 9
页 10
页 11
页 12
页 13
页 14
页 15
页内偏移量: 50.0%
为什么需要它? 如果直接寻址 64KB 内存需要 16 位地址,指令太长。页面寻址让指令只需 12 位,剩下 4 位靠寄存器"补齐"。
地址如何拼接? 通常不是相加,而是直接**拼接**。页号占高位,页内偏移占低位,效率极高。
它的局限性? 如果程序需要访问另一页的数据,必须先修改页面寄存器的内容,这增加了操作步骤。

核心考点

易考点

  • 各种寻址方式的有效地址(EA)计算。这是必考内容。

难点辨析

  • 间接寻址 vs. 寄存器间接寻址: 都是间接,但一个地址在内存,一个在寄存器。
  • 变址寻址 vs. 基址寻址: 公式相同但用途和设计思想完全不同,必须能够清晰区分。
  • 相对寻址: 要注意PC的值是在指令执行的哪个阶段被使用(是当前指令地址还是下一条指令地址)。

综合题

  • 习题中常出现结合多种寻址方式的复杂访存过程,例如:一条指令采用变址间接寻址,要求写出完整的访存取数过程。