2. ARM处理器概论

分清两个核心:PC寄存器存的是【地址】,不是普通数据值💡

1. 一句话定死:PC = 存放「指令内存地址」的寄存器

CPU要去内存哪个位置取指令 ,全看PC里存的地址数字。

内存格子编号=地址(0x2004、0x2008......),格子里装的才是指令/数据(值)。

PC永远存格子编号(地址),不存格子里的内容。

2. 拿 0x2007 举例拆解

  1. 你写入PC的数字:0x2007(这是你想要跳转的目标地址)
    你代码:MOV PC,#0x2007 → 你以为:去内存编号0x2007的格子拿指令
  2. ARM硬件规则生效:砍掉bit1:0,丢弃低2位
    0x2007 → 抹掉末尾2bit → 0x2004
  3. 最终生效:CPU实际访问地址 = 0x2004
    CPU无视你给的0x2007,强行去地址0x2004的内存取指令。

关键:

  • 0x2007:你代码给PC的目标地址(无效地址,ARM指令不能放这)
  • 0x2004:硬件修正后、CPU真实访问的有效地址

0x2005/0x2006/0x2007 这3个地址:ARM模式下不允许存放指令,只有0x2004、0x2008能存ARM指令,硬件自动兜底修正地址。

3. 区分【地址】和【存储的值】极简比喻

  • 地址 = 房间门牌号(0x2004)
  • 值 = 房间里面放的东西(ARM机器指令)
  • PC:专门记门牌号的小本本

你在本本上写门牌2007号,但ARM规定:只有门牌是4倍数的房间才有指令 ,2005/2006/2007是空房间,门卫(硬件)直接把门牌改成2004,CPU去2004房间拿指令。

4. 正确用法

想跳到地址0x2004 取指令 → 代码就给PC赋值0x2004,低位bit1:0=00,硬件不修改,正常跳转。


补充:bit31:2、bit1:0再简化

PC一共32位:

  • bit31~bit2:真正用来生成有效地址的位(门牌号主体)
  • bit1~bit0:无效位,不管填0/1,硬件直接扔掉作废(门牌末尾两位不算数)
相关推荐
女神下凡20 小时前
芯参谋(77):裸机(无 OS)存储驱动开发指南
arm开发·单片机·嵌入式硬件·设计规范·1024程序员节
女神下凡21 小时前
芯参谋(76):电源监控复位芯片电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
陌上花开缓缓归以21 小时前
liteos 内存分布
arm开发
u0109053592 天前
(永久免费)树莓派 / 香橙派等开发板,安装神卓互联巴比达内网穿透安装教程(Linux ARM 版 V9.4.1)
linux·运维·arm开发
打工仔折腾 AI2 天前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
工控存储研习3 天前
嵌入式设备启动时间优化:从上电到应用就绪,每一毫秒怎么抠
arm开发
a5986523 天前
云手机怎么选?ARM服务器原生架构和X86模拟器差别很大
服务器·arm开发·智能手机
李某学编程3 天前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
XMAIPC_Robot4 天前
基于 i.MX95 平台在新一代工业控制器中的应用 — 工业车载平板、半导体设备主控方案解析
arm开发·人工智能·机器学习·fpga开发·rk3588+fpga·i.mx95
女神下凡4 天前
芯参谋(71):全桥电机驱动电路设计指南
arm开发·stm32·单片机·嵌入式硬件·硬件工程·设计规范·1024程序员节