4-1_地址空间_RISC与CISC_学习笔记

4-1 地址空间与 RISC、CISC · 学习笔记

所属课程:韦东山《ARM架构与编程》(百问网 · 单片机核心课程 ARM 架构篇)

所在章节:第 4 章 ARM 芯片基础(本章第 1 节)

讲师:韦东山

原视频:4-1_地址空间_RISC与CISC

整理日期:2026-09-29

目录

  • 摘要
  • 一、本节在课程中的位置
  • 二、核心命题
  • 三、知识点展开
    • [3.1 ARM 中的寄存器访问:像访问内存一样](#3.1 ARM 中的寄存器访问:像访问内存一样)
    • [3.2 地址空间:CPU 眼中的世界](#3.2 地址空间:CPU 眼中的世界)
    • [3.3 RISC:精简指令集计算机](#3.3 RISC:精简指令集计算机)
    • [3.4 CISC:复杂指令集计算机](#3.4 CISC:复杂指令集计算机)
    • [3.5 RISC 与 CISC 对比总表](#3.5 RISC 与 CISC 对比总表)
  • 四、常见误区
  • 五、本节结论与延伸
  • [附录 A:术语速查](#附录 A:术语速查)
  • [附录 B:自查清单](#附录 B:自查清单)

摘要

本节阐释 ARM 统一编址模型:内存与外设寄存器同处一个地址空间,CPU 的地址经内存控制器译码分派,故访问寄存器如同访问内存。进而对比两类指令集:RISC 仅以 Load/Store 访存、运算在 CPU 内完成、指令精简单周期;CISC 指令强而复杂,靠微程序实现。


一、本节在课程中的位置

本节是第 4 章的第一节,属于从"会用外设"到"理解芯片"的转折点:

  • 承上:前面章节围绕 51/STM32 外设编程(GPIO、UART、定时器、RTC/LCD 等),侧重"照手册操作寄存器"。
  • 本节起 :课程转入 ARM 架构层面,先回答两个最根本的问题------CPU 眼中的世界(地址空间)是什么样的?ARM 属于哪类指令集(RISC)?
  • 启下:后续小节将依次展开 CPU 内部构造(Cortex-M3/M4 内核、通用寄存器 R0~R12、ALU)、程序运行过程、Thumb/Thumb-2 指令集与汇编编程。

一句话定位:本节建立"地址空间"与"指令集风格"两个心智模型,是理解后续一切寄存器操作与汇编代码的前提。

二、核心命题

  1. ARM 如何访问寄存器? ------ 与访问内存完全同一套方法(统一编址,内存映射 I/O)。
  2. ARM 与 x86 的地址空间组织有何不同? ------ ARM 内存与 I/O 统一编址;x86 内存空间与 I/O 空间分离,需不同指令访问。
  3. RISC 与 CISC 的本质差异是什么? ------ RISC"运算在 CPU 内、访存只有 Load/Store";CISC 用复杂指令(内部微程序)把多个微操作打包成一条指令。

三、知识点展开

3.1 ARM 中的寄存器访问:像访问内存一样

在 ARM 体系中,外设控制器的寄存器与内存处于同一个地址空间,因此访问寄存器不需要专门的指令,用 C 语言的指针即可:

c 复制代码
/* 访问内存中的变量 */
int a;
unsigned int *p = &a;      // p 等于 "a 的地址"
*p = val;                 // 写这个地址,就是写 a
val = *p;                 // 读这个地址,就是读 a

/* 访问外设寄存器:方法完全相同 */
unsigned int *p2 = (unsigned int *)0x40010800;  // 某寄存器的地址
*p2 = val;                // 写这个地址,就是写该寄存器
val = *p2;                // 读这个地址,就是读该寄存器

思维链条:原理图(外设接在哪个控制器上)→ 芯片手册(控制器的寄存器地址与位含义)→ 程序(对地址做读/写)。这条链是嵌入式开发一切"点灯""配串口"操作的通用范式。

3.2 地址空间:CPU 眼中的世界

在 ARM CPU 看来,内存与 I/O 的操作是完全一样的:

  • CPU 发出一个地址,由内存控制器根据地址范围译码,把访问分配给不同设备(Flash/RAM、UART 控制器、USB 控制器、GPIO 控制器等)。
  • 各设备寄存器都在同一个 4GB(32 位)地址空间中编址,这称为统一编址 / 内存映射 I/O(Memory-Mapped I/O)。

但地址空间是分层的,存在"爷---父---子"式的隔代访问关系:

  • CPU 发出的地址可以直达内存控制器上挂接的各设备(第一层地址空间);
  • 若外设是 EMMC 控制器外接的 Flash,则 CPU 的地址到达不了 Flash 本身 ------必须通过 EMMC 控制器间接访问。CPU 看到的 0 地址与 EMMC/Flash 侧的 0 地址不是同一个东西;
  • 即:地址只在同一层空间内有效,不能越级访问。

对比 x86:x86 的内存空间与 I/O 空间是两套独立空间 ,须用不同指令(如 mov 与 in/out)访问,同一数值地址在不同指令下指向不同对象。

3.3 RISC:精简指令集计算机

ARM 属于精简指令集计算机(RISC, Reduced Instruction Set Computing),特点有三:

  1. 对内存只有读、写指令(Load/Store),运算类指令不直接访问内存;
  2. 数据运算在 CPU 内部完成(先装入通用寄存器,再由 ALU 运算);
  3. 指令简单,CPU 复杂度小、便于设计,大部分指令单周期执行、指令长度固定。

以 a = a + b 为例,RISC 需要四步(对应四条指令):

复制代码
① 读内存:把 a 装入寄存器 R0
② 读内存:把 b 装入寄存器 R1
③ CPU 内部运算:ALU 计算 R0 + R1,结果存回 R0
④ 写内存:把 R0 写回 a 所在的地址

3.4 CISC:复杂指令集计算机

x86 属于复杂指令集计算机(CISC, Complex Instruction Set Computing):

  • 指令能力强、更灵活,但更复杂,指令为可变长格式;
  • 复杂指令内部通过**微程序(microprogram)**实现------一条乘法指令实际上在 CPU 内部仍然执行"读 a → 读 b → 计算 a×b → 写回"这四步微操作;
  • 对程序员而言"一条指令搞定一切",但硬件为此付出了复杂度代价。

3.5 RISC 与 CISC 对比总表

对比维度 RISC(ARM) CISC(x86)
指令能力 指令精简,多数指令使用率高 指令能力强,但多数指令使用率低
指令长度 固定长度 可变长格式
执行周期 大部分为单周期指令 复杂指令多周期
访存方式 仅 Load/Store 指令访存,运算在 CPU 内部 指令可直接处理内存中的数据
寻址方式 寻址方式少 支持多种寻址方式
实现方式 硬布线逻辑为主,利于流水线 微程序控制技术
寄存器 大量通用寄存器(如 R0~R12),数据/地址通用 多为特定用途的专用寄存器
设计代价 CPU 复杂度小,易于设计 CPU 复杂度高

四、常见误区

  1. "访问外设寄存器需要特殊指令" ------ 错。ARM 统一编址,读写寄存器与读写内存用同一套 Load/Store 指令,C 层面就是指针解引用。
  2. "地址空间 = 物理内存大小" ------ 错。32 位 ARM 的 4GB 地址空间是编址范围,其中既包含 RAM,也包含大量外设寄存器区域,与实际内存芯片容量无关。
  3. "CPU 的地址可以到达任何硬件" ------ 错。地址空间分层(如 CPU → EMMC 控制器 → Flash),只能逐层访问、不能越级;控制器另一侧的 0 地址与 CPU 侧的 0 地址含义不同。
  4. "RISC = 功能弱" ------ 错。RISC 只是把复杂度从指令集转移到编译器和 CPU 内部寄存器/流水线设计上,"简单指令 + 更多寄存器"反而换来了更高的执行效率与更低的功耗。

五、本节结论与延伸

结论:ARM 架构的两个基石------其一,统一编址的地址空间使"访问外设 == 访问内存",这正是嵌入式 C 程序用指针操作硬件的理论依据;其二,RISC 风格要求"数据先入寄存器、运算在 ALU、结果再写回",这决定了后续汇编编程的基本形态。

延伸到下一节:既然运算都发生在 CPU 内部,下一节将拆开 Cortex-M3/M4 内核,讲解 CPU 内部构造------通用寄存器组 R0~R12、ALU、程序计数器与取指---译码---执行的数据通路,并由此引出 Thumb/Thumb-2 指令集。

附录 A:术语速查

术语 含义
RISC 精简指令集计算机(Reduced Instruction Set Computing),ARM 所属流派
CISC 复杂指令集计算机(Complex Instruction Set Computing),x86 所属流派
统一编址 / 内存映射 I/O 外设寄存器与内存共用一个地址空间的编址方式(Memory-Mapped I/O)
Load/Store RISC 中唯一能访问内存的两类指令:读取 / 写回
ALU 算术逻辑单元,CPU 内部执行加减乘除与逻辑运算的部件
通用寄存器 CPU 内部可同时存放数据与地址的高速存储单元(ARM 的 R0~R12)
微程序 CISC 中实现复杂指令的内部微操作序列,对程序员透明
内存控制器 根据 CPU 发出的地址译码、选择对应设备的部件

附录 B:自查清单

  • 能用 C 指针写出让某 GPIO 寄存器置位/清零的代码,并解释它与访问内存变量为何是同一回事;
  • 能画出"CPU → 内存控制器 → 各外设"的地址分配示意图;
  • 能说出 EMMC 控制器外接 Flash 为什么不能被 CPU 直接按地址访问;
  • 能完整写出 RISC 执行 a = a + b 的四步流程;
  • 能从指令能力、指令长度、寻址方式、实现方式四个维度对比 RISC 与 CISC;
  • 能解释为什么 RISC 需要"更多通用寄存器"这一设计选择。
相关推荐
Vcaker1 小时前
Linux学习36-k8s集群升级及kube-vip高可用
linux·运维·学习
probex_1 小时前
学习笔记:知识图谱落地实践
笔记·学习·知识图谱
AOI小白新手上路1 小时前
4-3_ARM汇编_学习笔记
汇编·arm开发·学习
kkkkkkkkkk_Z2 小时前
新手自学嵌入式 | 学习日记:ARM架构初探与基础概念梳理
arm开发·学习·架构
鬓戈2 小时前
开源中文输入法技术调研与自建方案
学习·开源
摇滚侠2 小时前
《Spring Boot 3:高级与架构设计》第 2 章 IOC 容器的高级机制 编程式驱动 IOC 阅读笔记 7
java·spring boot·笔记
only-lucky2 小时前
QML深入学习七(MVC模块)
学习·mvc
带金箍的至尊宝2 小时前
系统架构设计师笔记 03:CPU 结构、Cache 与总线怎么考
笔记·系统架构
2401_850122042 小时前
高温耐油热缩套管选型:材料、温度和油液要匹配
经验分享·笔记·科技·学习