日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[architecture]-ARMV8的The current Program Counter (PC)介绍

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [architecture]-ARMV8的The current Program Counter (PC)介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈

文章目錄

        • 1、The current Program Counter (PC)介紹
        • 2、adrp和adr
        • 3、使用示例

術語: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 字節的隱含偏移量。

原文:

2、adrp和adr

adrp地址讀取指令,它將基于PC的相對偏移的地址讀到目標寄存器中
ADR指令
使用格式:adr register exper

編譯時,首先會計算出當前PC到exper的偏移量#offset_to_exper
然后會用ADD或SUB指令,來替換這條指令;例如等效于:ADD register,PC,#offset_to_exper
register就是exper的地址;

ADRP指令
使用格式:adrp register exper

編譯時,首先會計算出當前PC到exper的偏移量#offset_to_exper
pc的低12位清零,然后加上偏移量,給register
得到的地址,是含有label的4KB對齊內存區域的base地址;

3、使用示例

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

(2)、而對于修改PC的值(或者說跳轉),在armv8 aarch64已經沒有mov pc x0這樣的之類。如果想跳轉,可以通過b bl br blr eret這樣的之類進行.
這里我們也舉一個實例,在MTK平臺LK跳轉Kernel的過程,就是使用了產生異常和異常返回的方法(smc和eret): LK調用smc跳轉到ATF,ATF調用eret返回到Kernel

  • LK跳轉ATF的實現如下:

  • ATF返回的Kernel的實現如下:

總結

以上是生活随笔為你收集整理的[architecture]-ARMV8的The current Program Counter (PC)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。