ARMv8架構01 - ARM64架構寄存器基礎

一 、ARM64架構基礎

1 ARMv8 A 架構介紹

ARMv8 - A是ARM公司發布的第一代支持64位處理器的指令集和架構。它在擴充64位寄存器的同時提供對上一代架構指令集的兼容,因而能同時提供運行 32位 和 64位應用程序的執行環境。

  • 超大物理地址空間(large Physical Address),提供超過4GB物理內存的訪問。
  • 64位寬的虛擬地址空間(64-bit Virtual Addressing)
  • 提供31個64位寬的通用寄存器,可以減少對棧的訪問,從而提高性能。
  • 提供16KB 和 64KB的頁面,有助于降低TLB的未命中率。
  • 全新的異常處理模型,有助于降低操作系統 和 虛擬化的實現復雜度。
  • 全新的加載 - 獲取,存儲 - 釋放指令 (Load - Acquire, Store - Release Instructions)。

2 ARMv8 A 基礎概念

2.1 處理器單元

處理器處理事務的過程抽象為處理單元。(PE:Processing Element)

2.2 執行狀態

AArch64: 64位的執行狀態
  • 提供31個64位通用寄存器。
  • 提供64位的程序計數寄存器 PC、棧指針寄存器SP、異常鏈接寄存器ELR。
  • 提供AArch64指令集
  • 定義Armv8異常模型,支持4個異常等級,El0 ~ EL3
  • 提供64位的內存模型
  • 定義一組處理器狀態(PSTATE)用來保存PE的狀態。
AArch32:32位的執行狀態 ---- 待分析

2.3 ARMv8 指令集

ARMv8架構根據不同的執行狀態提供不同指令集的支持。
A64指令集:運行在AArch64狀態,提供64位指令集支持。
A32指令集:運行在AArch32狀態,提供32位指令集支持。
T32指令集:運行在AArch32狀態,提供16和32位指令集支持。

2.4 系統寄存器命名

系統寄存器 提供控制和狀態。
在AArch64 狀態下,很多系統寄存器會根據不同的異常等級,提供不同的變種寄存器。

  • 命名規則:<register_name>_ELx where x is 0, 1, 2, or 3 。
  • 比如:SP_EL0 表示在EL0下的棧指針寄存器,SP_EL1表示在EL1下的棧指針。
  • 系統寄存器 描述在ARv8.6手冊的D13章。

3 ARMv8 A 運行狀態 & 異常等級

ARMv8 處理器支持兩種運行狀態 – AArch64 狀態 和AArch32 狀態。

3.1 異常等級

AArch64架構的一場等級(Exception level)確定了處理當前運行的特權級別。類似ARMv7 架構中的特權等級。
EL0:用戶特權,用于運行普通用戶程序
EL1:系統特權,通常用于運行操作系統
EL2;運行虛擬化擴展的虛擬監控程序 (Hypervisor)
EL3:運行安全世界中的安全監控器(secure monitor)

3.2 數據寬度 & 指令對齊

數據寬度

  • ARMv8 架構支持如下幾種數據寬度。
    字節(byte): 8位&16進制2位 / 1字節
    半字(halfword):16位 / 2字節
    字(word):32位 / 4字節
    4字節(quadword): 128位 / 16字節
  • 通用寄存器:支持64bit和32bit的通用寄存器
  • SIMD/FP寄存器:支持128bit寄存器
    不對齊訪問
    一種是指令對齊,另一種是數據對齊
  • Arm64 指令集要求指令存放的位置必須以字(word)- 4字節為單位對齊。
  • 訪問存儲位置不是以字為單位對齊的指令會導致PC對齊異常(PC aligment fault)。
  • 對于數據訪問,需要區分不同的內存類型。對內存類型是設備內存的不對齊訪問會觸發對齊異常。
  • 對于訪問普通內存,除了使用獨占之另外,還可以使用其他的用于加載和存儲單個或多個寄存器的所有指令。
  • 如果訪問地址和要訪問的數據元素大小不對齊,根據一下進行處理:
  • 若對應的異常等級中的SCTLR_ELx 寄存器的 A域 設置為1,則說明打開地址對齊檢查功能,會觸發對齊異常。
  • 若對齊的異常等級中的SCTLR_ELx 寄存器的 A域 設置為0,則說明處理器支持不對齊訪問。
  • 當然處理器支持的不不對齊訪問也有一些限制
  • 不能保證單次訪問原子地完成,有可能復制多次。
  • 不對齊訪問 比 對齊訪問需要更多的處理時間。
  • 不對齊的地址訪問,可能會引發中止(abort)。
    二、ARMv8 寄存器

4 通用寄存器

AArch64 運行狀態支持31個64位通用寄存器,分別是x0 ~ x30寄存器,而AArch32運行狀態支持16個32位的通用寄存器。

  • x0 ~ x30 :通用寄存器

  • <x0 - x7 傳參和結果> <x8 間接結果寄存器> <x9 - x15 調用函數需要保存,臨時寄存器>

  • <x16 - x18 平臺寄存器> <x19 - x28 被調用函數需保存> <x29/ FP 棧楨寄存器> <X30/LR 鏈接寄存器>

  • SP :棧指針寄存器

  • PC :程序計數寄存器

  • 在AArch64 運行狀態下,使用 x 表示64位通用寄存器,比如:x0,x20等。

  • W表示低32位的寄存器,比如W0 表示 X0寄存器的低32位數據,W1表示 X1寄存器的低32位數據

5 處理器狀態寄存器組(Processor State)

在ARMv7 中使用CPSR來表示當前處理器的狀態,而在AArch64架構中使用處理狀態寄存器組,簡稱PSTATE。

5.1 條件標志位 - NZCV (The Condition flags)

  • 舉例
    cmp 指令:使用cmp指令來比較兩個變量的大小,它會做減法運算,并且影響PASTAT寄存器的C標志位。
    小伙伴可以使用“updates the condition” 關鍵字來搜索哪些指令會影響pstate的條件標志位

5.2 異常掩碼標志位

0 :表示enable,沒有屏蔽這個異常
1 :表示disable, 屏蔽這個異常

5.3 執行狀態控制位

5.4 處理器狀態寄存器訪問

在EL0訪問pstate的問題,部分pstate的域可以通過特殊寄存器來訪問,
部分pstate域在EL0里不能被訪問,比如CurrenEL。

6 特殊寄存器

ARMv8架構除了支持31個通用寄存器之外,還提供多個特殊的寄存器。

零寄存器(Zero Register)
WZR寄存器是32位的零寄存器,XZR是64位的零寄存器。
棧指針(Stack Pointer)

  • SP_EL0:EL0下的棧指針寄存器。
  • SP_EL1:EL1下的棧指針寄存器。
  • SP_EL2:EL2下的棧指針寄存器。
  • SP_EL3:EL3下的棧指針寄存器。
    當處理器運行在比EL0高級別的異常等級時,處理器可以訪問:
  • 當前異常等級對應的棧指針SP_ELn
  • EL0對應的棧指針SP_EL0寄存器可以當做一個臨時寄存器,比如:Linux 內核使用這種臨時寄存器存放進程的 task_struct 數據結構的指針。
  • EL0時,處理器只能訪問SP_EL0寄存器,而不能訪問其他高等級的SP寄存器。
    PC指針(Program Counter)
    PC(Program Counter)寄存器通常用來指向當前運行指令的下一條指令的地址,用于控制程序種指令的執行順序,但是編程人員不能通過指令來直接訪問。
    異常鏈接寄存器(Exception Link Register,ELR)
    異常鏈接寄存器(Exception Link Register),用來存放異常返回地址。
    保存處理狀態寄存器(Saved Process Status Register,SPSR)
    當我們進行異常處理時,處理器的處理狀態會保存到 保存處理狀態寄存器(SPSR) 中。這種寄存器類似ARMv7中的CPSR。
    當異常將要發生時,處理器會把 處理器狀態寄存器 (PSTATE) 的值保存到 保存處理狀態寄存器(SPSR)中.
    當異常處理完成并返回時。再把 保存處理狀態寄存器(SPSR)中的值恢復 到 處理器狀態寄存器 (PSTATE)中。
    M[4] :處理器異常處理過程中處于哪種運行模式下,若為0 表示AArch64
    M[3:0] : 異常模式

通過msr/mrs指令來訪問
CurrentEL寄存器
聊聊SOC啟動(七) SPL啟動分析 - 知乎 (zhihu.com)
處理器狀態PSTATE中的EL字段保存了當前異常等級。使用MRS指令可以讀取當前異常等級。
0: 表示EL0 (0<<2)
1: 表示EL1 (1<<2)
2: 表示EL2 (2<<2)
3: 表示EL3 (3<<2)
#define CurrentEL_EL1 (1 << 2)
#define CurrentEL_EL2 (2 << 2)
#define CurrentEL_EL3 (3 << 2)

DAIF寄存器

  • 表示處理器狀態PSTATE中的{D, A, I, F}字段
    SPSel寄存器
  • 表示處理器狀態PSTATE中的SP字段,用來在SP_EL0和SP_ELn中選擇棧指針寄存器

7 系統寄存器

ARMv8 架構定義了其他相關系統寄存器,通過訪問和設置這些系統寄存器來完成對處理器不同的功能配置。

  • ARmv8 架構支持7大類系統寄存器
  • 通用系統控制寄存器
  • 調試寄存器
  • 性能監控寄存器
  • 活動監控寄存器
  • 統計擴展寄存器
  • RAS寄存器
  • 通用定時器寄存器
  • 系統寄存器命名規范
  • 系統寄存器支持不同異常等級下的訪問,通常系統寄存器可使用< Reg_ELn > 的方式來表示:
  • Reg_EL1:處理器處于EL1、EL2、EL3時可以訪問該寄存器
  • Reg_EL2: 處理器處于EL2、EL3是可以訪問該寄存器
  • 系統寄存器訪問指令
  • 程序可以通過MSR和MRS指令訪問系統寄存器,比如:
  • mrs x0, TTBR0_EL1 //把TTBR0_EL1寄存器的值復制到X0寄存器
  • msr TTBR0_EL1, x0 //把x0寄存器的值拷貝到TTBR0_EL1寄存器

三、ARM64 指令集
… 待梳理
五、ARM64 內存管理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95285.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95285.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95285.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

flutter專欄--深入剖析你的第一個flutter應用

使用fvm管理flutter版本 如果你有使用多版本flutter的需求&#xff0c;那么fvm將會給你提供較大的幫助。下面我列舉一下mac flutter3.35.2的版本的操作命令&#xff0c;完成之后&#xff0c;你將可以隨意切換flutter版本 # 下載fvm相關的依賴 brew tap leoafarias/fvm brew …

MongoDB 聚合查詢超時:索引優化與分片策略的踩坑記錄

人們眼中的天才之所以卓越非凡&#xff0c;并非天資超人一等而是付出了持續不斷的努力。1萬小時的錘煉是任何人從平凡變成超凡的必要條件。———— 馬爾科姆格拉德威爾 &#x1f31f; Hello&#xff0c;我是Xxtaoaooo&#xff01; &#x1f308; “代碼是邏輯的詩篇&#xff…

Augmentcode免費額度AI開發WordPress商城實戰

Augment AI開發WordPress商城實戰&#xff1a;從零構建到免費額度續杯完整指南 前言 在AI編程工具日益普及的今天&#xff0c;如何高效利用這些工具來開發實際項目成為了開發者關注的焦點。本文將詳細介紹如何使用Augment AI從零開始構建一個功能完整的WordPress商城系統&#…

【C++八股文】數據結構篇

一、單例模式優化實現 原代碼問題分析 ?內存序重排序風險?&#xff1a;雙重檢查鎖在C中可能因指令重排導致半初始化對象被訪問?鎖粒度過大?&#xff1a;每次獲取實例都需要加鎖&#xff0c;影響性能?線程安全性不足?&#xff1a;未考慮C11前的內存模型問題 改進方案&a…

并發編程——15 線程池ForkJoinPool實戰及其工作原理分析

1 一道算法題引發的思考及其實現 1.1 算法題 問&#xff1a;如何充分利用多核 CPU 的性能&#xff0c;快速對一個2千萬大小的數組進行排序&#xff1f; 這道題可以通過歸并排序來解決&#xff1b; 1.2 什么是歸并排序&#xff1f; 歸并排序&#xff08;Merge Sort&#xff…

Kafka面試精講 Day 6:Kafka日志存儲結構與索引機制

【Kafka面試精講 Day 6】Kafka日志存儲結構與索引機制 在“Kafka面試精講”系列的第6天&#xff0c;我們將深入剖析 Kafka的日志存儲結構與索引機制。這是Kafka高性能、高吞吐量背后的核心設計之一&#xff0c;也是中高級面試中的高頻考點。面試官常通過這個問題考察候選人是否…

Linux 字符設備驅動框架學習記錄(三)

Linux字符設備驅動開發新框架詳解 一、新舊驅動框架對比 傳統字符設備驅動流程 手動分配設備號 (register_chrdev_region)實現file_operations結構體使用mknod手動創建設備節點 新式驅動框架優勢 自動設備號分配&#xff1a;動態申請避免沖突自動節點創建&#xff1a;通過class…

《計算機網絡安全》實驗報告一 現代網絡安全挑戰 拒絕服務與分布式拒絕服務攻擊的演變與防御策略(1)

目 錄 摘 要 一、研究背景與目的 1.1 介紹拒絕服務&#xff08;DoS&#xff09;和分布式拒絕服務&#xff08;DDoS&#xff09;攻擊的背景 &#xff08;1&#xff09;拒絕服務攻擊&#xff08;DoS&#xff09;  &#xff08;2&#xff09;分布式拒絕服務攻擊&#xff0…

深度學習篇---模型組成部分

模型組成部分&#xff1a;在 PyTorch 框架下進行圖像分類任務時&#xff0c;深度學習代碼通常由幾個核心部分組成。這些部分中有些可以在不同網絡間復用&#xff0c;有些則需要根據具體任務或網絡結構進行修改。下面我將用通俗易懂的方式介紹這些組成部分&#xff1a;1. 數據準…

關于ANDROUD APPIUM安裝細則

1&#xff0c;可以先參考一下連接 PythonAppium自動化完整教程_appium python教程-CSDN博客 2&#xff0c;appium 需要對應的版本的node&#xff0c;可以用nvm對node 進行版本隔離 3&#xff0c;對應需要安裝android stuido 和對應的sdk &#xff0c;按照以上連接進行下載安…

八、算法設計與分析

1 算法設計與分析的基本概念 1.1 算法 定義 &#xff1a;算法是對特定問題求解步驟的一種描述&#xff0c;是有限指令序列&#xff0c;每條指令表示一個或多個操作。特性 &#xff1a; 有窮性&#xff1a;算法需在有限步驟和時間內結束。確定性&#xff1a;指令無歧義&#xff…

機器學習從入門到精通 - 神經網絡入門:從感知機到反向傳播數學揭秘

機器學習從入門到精通 - 神經網絡入門&#xff1a;從感知機到反向傳播數學揭秘開場白&#xff1a;點燃你的好奇心 各位&#xff0c;有沒有覺得那些能識圖、懂人話、下棋碾壓人類的AI特別酷&#xff1f;它們的"大腦"核心&#xff0c;很多時候就是神經網絡&#xff01;…

神經網絡模型介紹

如果你用過人臉識別解鎖手機、刷到過精準推送的短視頻&#xff0c;或是體驗過 AI 聊天機器人&#xff0c;那么你已經在和神經網絡打交道了。作為深度學習的核心技術&#xff0c;神經網絡模仿人腦的信息處理方式&#xff0c;讓機器擁有了 “學習” 的能力。一、什么是神經網絡&a…

蘋果開發中什么是Storyboard?object-c 和swiftui 以及Storyboard到底有什么關系以及邏輯?優雅草卓伊凡

蘋果開發中什么是Storyboard&#xff1f;object-c 和swiftui 以及Storyboard到底有什么關系以及邏輯&#xff1f;優雅草卓伊凡引言由于最近有個客戶咨詢關于 蘋果內購 in-purchase 的問題做了付費咨詢處理&#xff0c;得到問題&#xff1a;“昨天試著把您的那幾部分code 組裝成…

孩子玩手機都近視了,怎樣限制小孩的手機使用時長?

最近兩周&#xff0c;我給孩子檢查作業時發現娃總是把眼睛瞇成一條縫&#xff0c;而且每隔幾分鐘就會用手背揉眼睛&#xff0c;有時候揉得眼圈都紅了。有一次默寫單詞&#xff0c;他把 “太陽” 寫成了 “大陽”&#xff0c;我給他指出來&#xff0c;他卻盯著本子說 “沒有錯”…

醫療AI時代的生物醫學Go編程:高性能計算與精準醫療的案例分析(六)

第五章 案例三:GoEHRStream - 實時電子病歷數據流處理系統 5.1 案例背景與需求分析 5.1.1 電子病歷數據流處理概述 電子健康記錄(Electronic Health Record, EHR)系統是現代醫療信息化的核心,存儲了患者從出生到死亡的完整健康信息,包括 demographics、診斷、用藥、手術、…

GEM5學習(2):運行x86Demo示例

創建腳本 配置腳本內容參考官網的說明gem5: Creating a simple configuration script 首先根據官方說明創建腳本文件 mkdir configs/tutorial/part1/ touch configs/tutorial/part1/simple.py simple.py 中的內容如下&#xff1a; from gem5.prebuilt.demo.x86_demo_board…

通過 FinalShell 訪問服務器并運行 GUI 程序,提示 “Cannot connect to X server“ 的解決方法

FinalShell 是一個 SSH 客戶端&#xff0c;默認情況下 不支持 X11 圖形轉發&#xff08;不像 ssh -X 或 ssh -Y&#xff09;&#xff0c;所以直接運行 GUI 程序&#xff08;如 Qt、GNOME、Matplotlib 等&#xff09;會報錯&#xff1a; Error: Cant open display: Failed to c…

1.人工智能——概述

應用領域 替代低端勞動&#xff0c;解決危險、高體力精力損耗領域 什么是智能制造&#xff1f;數字孿生&#xff1f;邊緣計算&#xff1f; 邊緣計算 是 數字孿生 的 “感官和神經末梢”&#xff0c;負責采集本地實時數據和即時反應。瑣碎數據不上傳總服務器&#xff0c;實時進行…

傳統園區能源轉型破局之道:智慧能源管理系統驅動的“源-網-荷-儲”協同賦能

傳統園區能源結構轉型 政策要求&#xff1a;福建提出2025年可再生能源滲透率≥25%&#xff0c;山東強調“源網荷儲一體化”&#xff0c;安徽要求清潔能源就地消納。系統解決方案&#xff1a;多能協同調控&#xff1a;集成光伏、儲能、充電樁數據&#xff0c;通過AI算法動態優化…