2026/4/6 9:18:35
网站建设
项目流程
安顺网站设计,有了源代码如何做网站,企业在网站建设后期需要做什么,wordpress 常规选项一、先明确两个核心概念执行地址#xff1a;CPU 当前正在执行#xff08;Execute#xff09;的指令地址#xff08;如正在运算的ADD指令地址#xff09;PC 指针#xff1a;CPU 下一个要取指#xff08;Fetch#xff09;的指令地址#xff08;…一、先明确两个核心概念执行地址CPU 当前正在执行Execute的指令地址如正在运算的ADD指令地址PC 指针CPU 下一个要取指Fetch的指令地址告诉 CPU 下条指令在哪PC 天然指向执行地址的后面差异仅在于偏移多少——由流水线和架构决定。二、根本原因流水线 架构规范1. 流水线机制并行执行的必然结果ARM 用 3 级流水线取指→译码→执行实现指令并行当指令 A执行地址在执行时指令 B 在译码指令 C 在取指PC 此时指向指令 C 的地址。例经典 ARM32 位指令中执行地址0x00A→ PC0x08C偏移 8但 Cortex-M3/M4 有额外规范。2. 架构规范Cortex-M3/M4 的强制偏移Cortex-M3/M4 仅支持 Thumb/Thumb-2 指令集16/32 位指令ARMv7-M 架构强制规定无论指令是 16 位还是 32 位PC 执行地址 4。执行 16 位指令地址0x00→ PC0x04执行 32 位指令地址0x00→ PC0x04目的是简化开发无需判断指令长度偏移规则统一。三、Cortex-M3/M4 实战正确获取执行地址1. 手动计算PC - 4因PC 执行地址 4减 4 即得真实执行地址; 获取当前执行地址存入R0GetCurrentAddr:MRS R0, PC ; R0 PC执行地址4SUB R0, R0, #4 ; R0 执行地址正确BX LR2. 用伪指令避免手动算偏移日常开发优先用ADR/LDR label编译器自动处理 PC 偏移ADR R0, DataBuf ; 短距离自动生成PC相对寻址修正偏移LDR R1, ConfigAddr ; 长距离从字面池读地址无需关心PCDataBuf: DCD 0x11223344ConfigAddr: DCD 0x00001234四、3 个必避误区误区 1按指令长度算偏移16 位 2、32 位 4→ 错Cortex-M 强制 4误区 2混用架构规则把经典 ARM 的 8 套到 Cortex-M→ 错Cortex-M 只 4误区 3手动算偏移不用伪指令→ 错ADR/LDR label更稳定避免代码修改后偏移失效五、总结PC≠执行地址是 ARM效率流水线并行与易用性架构规范的平衡结果。对 Cortex-M3/M4 开发者只需记住PC 执行地址 4获取执行地址用PC-4日常用伪指令处理地址