0 %

指令寻址方式详解

2026-01-06 10:03:17

指令寻址方式详解:从顺序执行到跳跃控制

一、什么是指令寻址?

在 CPU 执行程序的过程中,必须知道下一条指令在哪儿,这就涉及到“指令寻址”问题。

📌 关键概念:

程序计数器(PC,Program Counter):一个专门用来记录下一条将要执行的指令地址的寄存器。指令寻址:就是 CPU 确定下一条指令存放位置的方式。

二、基本机制:PC 自动“加一”

✅ 默认情况

当 CPU 正常执行程序时,每执行完一条指令,PC 自动“加一”,指向下一条指令。

这种方式称为 顺序寻址(Sequential Addressing)就像在读书:读完一行自然看下一行。

示例:

假设指令存储在内存地址:

地址: 0 1 2 3 ...

内容: 指令1 指令2 指令3 ...

PC 初始为 0:

取出指令1,执行PC 自动 +1 → 指向 1取出指令2,执行PC 再 +1 → 指向 2

三、为什么加的是“1”?理解双引号的“1”

在课程讲义中经常说:“取完一条指令之后 PC 加 1”,但这个 “1” 打了双引号。为什么?

原因是:“1” 实际上不是固定的数值,它依赖于以下两个系统参数:

条件加多少?原因说明主存按字编址每条指令占1个字PC 加 1 就能指向下一条指令主存按字节编址每条指令占2字节PC 加 2 才能跳过当前指令变长指令字结构指令长短不定PC 加 当前指令的字节数

四、顺序寻址的三种场景

1️⃣ 定长 + 按字编址(最简单)

每条指令固定 1 个存储字主存地址每次只需 +1

🧪 例子:PC=0,执行完后变为1 → 指向下一条

2️⃣ 定长 + 按字节编址

每条指令占 2 字节主存按字节计地址 → 必须 PC 加 2

🧪 例子:

地址 内容

0~1 指令1

2~3 指令2

PC=0,执行完指令1后 → PC=2 → 正确跳过两个字节

3️⃣ 变长指令 + 按字节编址

不同指令长度不一CPU 需 先取第一字节,解析出该指令总长度 → 然后 PC += 长度

🧪 例子:

地址 指令(长度) 实际占字节数

0 LOAD A,B 4字节

4 ADD A,C 3字节

CPU:

先取地址0的首字节,判断该指令长度为4 → PC 加 4然后执行地址4的指令

五、跳跃寻址(Jump Addressing)

有些情况,我们不希望顺序执行下一条,而是跳到另一个地方继续执行,怎么办?

✅ 这就是跳跃寻址的应用场景!

跳跃寻址依赖于 转移类指令,例如:

JMP addr:跳转到指定地址CALL func:函数调用RET:函数返回

🧠 示例:无条件跳转指令 JMP 7

设当前程序片段如下:

地址指令0LOAD A1ADD B2JMP 73SUB C7STORE A执行流程:

PC=0,执行 LOAD A → PC++PC=1,执行 ADD B → PC++PC=2,执行 JMP 7 → 直接改写 PC = 7PC=7,执行 STORE A

📌 注意:执行 JMP 指令时,PC 的自动加一被“覆盖”,转而由跳转地址决定。

六、统一总结:两种指令寻址方式对比

分类顺序寻址跳跃寻址是否依赖 PC 自增是(自动加)否(跳转时由指令改写)执行流程线性,逐条执行非线性,允许跳跃到任意位置例子LOAD, ADD, STOREJMP, CALL, RET适用场景大多数普通指令控制流程转移、循环、函数调用

七、课程重点提醒:“加一”≠真的是加1

在学习过程中,我们常说“执行完指令后 PC 加一”,但你应该牢记:

加的是 “当前指令长度”(可能是1、2、3、4字节)还取决于 主存的编址单位(按字 or 字节)

这个“加一”,是带双引号的“一”。

Posted in 世界杯小组赛分组
Copyright © 2088 2034年世界杯_足球中国世界杯预选赛 - qdhuaxue.com All Rights Reserved.
友情链接