baron · 7月10日

Armv8的The current Program Counter (PC)介绍

快速连接

👉👉👉【精选】Armv8/Armv9架构入门到精通-目录 👈👈👈

术语:PC-relative address -- pc相对地址

1、The current Program Counter (PC)介绍

The current Program Counter (PC)不能当作通用寄存器,因此也不能用作算术指令的源或目标,或用作加载/存储指令的基址、索引或传输寄存器。

  • 读取 PC 的方法是:PC 相对地址的指令(ADR, ADRP, literal load, and direct branches),以及branch-and-link指令(BL 和 BLR)
  • 修改程PC的方法是使用显式控制流指令:条件分支、无条件分支、异常生成和异常返回指令

在 PC 被指令读取以计算 PC 相对地址的情况下,它的值是指令的地址,即与 A32 和 T32 不同,没有 4 或 8 字节的隐含偏移量。

原文:image.png

2、adrp和adr

adrp地址读取指令,它将基于PC的相对偏移的地址读到目标寄存器中ADR指令使用格式:adr register exper

编译时,首先会计算出当前PC到exper的偏移量#offsettoexper 然后会用ADD或SUB指令,来替换这条指令;例如等效于:ADD register,PC,#offsettoexper register就是exper的地址;

ADRP指令使用格式:adrp register exper

编译时,首先会计算出当前PC到exper的偏移量#offsettoexper pc的低12位清零,然后加上偏移量,给register 得到的地址,是含有label的4KB对齐内存区域的base地址;

3、使用示例

(1)、以下演示读取PC指针示例,使用adr、adrp指令,就可以等效于armv7及其之前的 mov x0 pcmov x0 r15指令

image.png

(2)、而对于修改PC的值(或者说跳转),在Armv8 aarch64已经没有 mov pc x0这样的之类。如果想跳转,可以通过b bl br blr eret这样的之类进行.

关注"Arm精选"公众号,备注进ARM交流讨论区。
图片1.png

推荐阅读
关注数
9461
内容数
206
以易懂、渐进、有序的方式,深入探讨ARMv8/ARMv9架构的核心概念。我们将从基础知识开始,逐步深入,覆盖最新的架构,不再纠缠于过时技术。本系列内容包含但不限于ARM基础、SOC芯片基础、Trustzone、gic、异常和中断、AMBA、Cache、MMU等内容,并将持续更新。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息