ARM架構 AArch64 基礎知識介紹

介紹

  1. aarch64是 ARM 架構的 64 位版本,它是 ARMv8 架構的一部分,被設計用來提供更高的性能和更大的地址空間,同時保持與 32 位 ARM 架構的兼容性。
  2. AArch64 是 ARMv8 的 64 位指令集架構(ISA),它提供了豐富的指令集來支持高性能計算。
  3. Armv8-A支持三種指令集:A32、T32和A64;在AArch64執行狀態下執行時使用A64指令集。它是一個固定長度的32位指令集,名稱中的64指的是AArch64執行狀態對該指令的使用。它不是指內存中指令的大小。A32和T32指令集也分別被稱為Arm和Thumb。
  4. 特點
    • 64位寄存器:提供了更多的寄存器,每個寄存器都是 64 位寬。
    • 更大的地址空間:支持超過 4GB 的內存地址空間。
    • 改進的指令集:包括新的指令和對現有指令的擴展,以提高性能和效率。
    • SIMD 擴展:高級 SIMD ( neon) 擴展,提供對單指令多數據(SIMD)操作的支持,增強了圖形和多媒體應用的性能。
    • 虛擬化支持:提供了硬件虛擬化功能,使得 AArch64 架構的處理器可以更有效地運行虛擬機。
    • 節能特性:包括多種節能技術,如動態調頻和電壓調整(DVFS)。
    • 安全性增強:包括安全啟動和加密功能,提高了系統的安全性。

寄存器

  1. 寄存器
  • 寄存器是中央處理器(CPU)內部的一小部分高速存儲資源,用于快速訪問和處理數據。它們在計算機體系結構中起著至關重要的作用。
  • 寄存器(Register)是 CPU 內部的存儲單元。可以用來暫存程序指令,數據和內存地址。因為存在于 CPU 內部,所以它的讀寫速度要比內存快得多。
  • 在寄存器和內存之間,還有一層存儲介質叫緩存(Cache)。緩存也在 CPU 內部,訪問速度比寄存器慢,比內存快。對于程序而言緩存是透明的,不可操作。
  1. 寄存器與內存關系
  • 寄存器和內存是計算機體系結構中的兩種基本存儲資源,它們在程序執行和數據處理中扮演著不同但互補的角色。
  • 寄存器是 CPU 內部的一小部分高速存儲資源,其訪問速度遠遠快于主存(RAM)。內存則作為計算機的主要存儲介質,容量較大但訪問速度較慢。
  • 寄存器用于暫存指令、數據和地址,供 CPU 快速處理。內存則用于存儲程序的指令代碼、大量數據和中間計算結果。
  • 寄存器可以被 CPU 直接訪問,而內存則需要通過地址總線間接訪問。
  • 寄存器的數據寬度通常是固定的,如 32 位或 64 位,而內存可以存儲任意大小的數據。
  • 寄存器和內存之間的數據交換是通過數據總線進行的。CPU 使用 LOAD 和 STORE 指令將數據從內存加載到寄存器,或從寄存器存儲到內存。
  • 寄存器作為 CPU 內部的快速存儲資源,經常用于暫存從內存中讀取的數據或指令,以及待寫入內存的數據;所以寄存器和內存之間的關系就是傳遞這幾種類型的數據,以便于
    CPU 進行計算。
    在這里插入圖片描述
  1. 寄存器與匯編語言
  • 匯編語言是一種用于電子計算機、微處理器、和其他可編程設備低級編程的編程語言。它是機器語言的文本表示形式,幾乎與機器碼一一對應,但提供了一些助記符來增強可讀性。
  • 匯編語言提供了直接操作 CPU 寄存器的能力。程序員可以通過匯編指令來控制寄存器中的數據,進行加載、存儲、算術運算、邏輯運算等操作。
  • 匯編語言中的每條指令通常都直接映射到 CPU 的指令集架構上。這意味著匯編語言中的指令直接體現了 CPU 能夠對寄存器執行的操作。
  • 在匯編層面,函數參數和返回值通常通過寄存器傳遞,以減少內存訪問的開銷。
  • 不同的 CPU 架構有不同的寄存器集和專用寄存器,匯編語言允許程序員利用這些特性來編寫高效的代碼。
  1. 通用寄存器
  • 通用寄存器是一組用于存儲數據和地址的寄存器,它們在處理程序中扮演著核心角色。
  • 作用
    • 通用寄存器用于存儲臨時數據、計算結果和變量;
    • 在函數調用時,前幾個參數通常通過 X0 到 X7 寄存器傳遞。返回值通常存儲在 X0 寄存器中;
    • 通用寄存器參與算術(如加、減、乘、除)和邏輯(如 AND、OR、NOT、XOR)運算;
    • 寄存器用于提供內存訪問指令中的基地址、偏移量或索引;
    • 某些通用寄存器(如 X8 到 X17)可以作為調用者保存的寄存器,在函數調用中保持不變,或用于存儲局部變量;
    • 雖然 AArch64 沒有單獨的狀態寄存器,但通用寄存器可以用于存儲和傳遞狀態信息,如條件標志;
    • 通用寄存器用于存儲系統調用的編號和參數,以及在異常或中斷處理中保存上下文;
  • 大多數A64指令都在寄存器上操作。AArch64架構提供了31個通用寄存器。每個寄存器都可以用作64位X寄存器(X0~X30)或32位W寄存器(W0~W30)。這是查看同一寄存器的兩種不同方式。例如,下邊這個寄存器圖顯示W0是X0的低32位,W1是X1的低32位。
    在這里插入圖片描述
  • 每個通用寄存器都是 64 位寬,這意味著它們可以存儲 64 位(8 字節)的整數數據。
  • x0 - x30 是31個通用整形寄存器。每個寄存器可以存取一個64位大小的數。 當使用 x0 - x30 訪問時,它就是一個64位的數。當使用 w0 - w30 訪問時,訪問的是這些寄存器的低32位。
    在這里插入圖片描述
  • 對于數據處理指令,X或W的選擇決定了操作的size。使用X寄存器將導致64位的計算,使用W寄存器將導致32位的計算。
    • 32位整數加法:ADD W0, W1, W2
    • 64位整數加法:ADD X0, X1, X2
  1. 其他寄存器
  • 零寄存器:XZR和WZR,總是讀取為0并忽略寫入。XZR是64位的零寄存器,WZR是32位的零寄存器。
  • 棧指針(stack pointer,SP)寄存器:棧指針寄存器是實現程序的運行時棧管理的關鍵組件,對于維護程序的執行流程和狀態管理至關重要。
  • 鏈接寄存器(Link Register,LR):在計算機體系結構中是一個專用寄存器,主要用于存儲函數調用的返回地址;在 AArch64 架構中,LR 通常被命名為 X30,而在其他架構中,它可能是一個單獨的寄存器。
  • 程序計數器(PC):是 cpu 內部一個特殊的寄存器,程序計數器是 CPU 執行指令的基礎,它確保了指令能夠按正確的順序被取出和執行。
  1. 浮點寄存器
  • AArch64架構引入了SIMD(Single Instruction, Multiple Data)操作,通過矢量寄存器(Vector Registers)來支持高級的浮點運算和數據處理;
  • AArch64提供了32個128位寬的浮點寄存器,編號從V0~V31;
  • 每個浮點寄存器都是128位寬,足以存儲兩個64位的雙精度浮點數或四個32位的單精度浮點數;
  1. NEON 寄存器
  • 128 位寬,與浮點寄存器重疊使用,編號從 Q0 ~ Q31;
  • AArch64 架構的 SIMD 指令集稱為 NEON。NEON 寄存器(Q0 到 Q31)實際上是浮點寄存器的另一種視圖,用于訪問 SIMD 功能。
  • 在 AArch64(ARMv8-A)架構中,浮點寄存器和 NEON 寄存器實際上是同一組寄存器,它們共用相同的物理寄存器集合,但是以不同的方式使用和訪問。
  • AArch64 提供了一組共用的 128 位寄存器,用于浮點和 SIMD(單指令多數據)操作。
  • NEON 是 ARM 的 SIMD 指令集,用于處理向量運算。NEON 寄存器用于 SIMD 操作,可以對多個數據元素執行并行操作。
  1. SVE 寄存器
  • 在 AArch64 架構中,Scalable Vector Extension(SVE)引入了新的寄存器類型,這些寄存器與傳統的通用寄存器和浮點寄存器不同。
  • SVE引入了可變長度的矢量寄存器,這些寄存器可以從128位擴展到2048位,以適應不同的計算需求;
  • SVE寄存器(Z0-Z31)在低位與AArch64的SIMD&FP寄存器(V0-V31)共享硬件資源,但SVE提供了更高級的SIMD功能和更大的數據處理能力;
  • 在 ARMv9 架構上發布的 SVE2 是 SVE 指令集的超集和擴展,提供了更多的指令和特性。
  1. 系統寄存器
  • 控制 CPU 的各種系統級功能和行為;
  • 系統寄存器不能直接用于數據處理或load/store指令。相反,需要將系統寄存器的內容讀入通用寄存器X,對其進行操作,然后將其寫回系統寄存器。有兩個專門用來訪問系統寄存器的指令MRS和MSR。
  • 主要的系統寄存器:
    • 系統控制寄存器:SCTLR_ELx,用于控制系統行為,如緩存、頁表遍歷等;
    • 內存管理寄存器:TTBR0_ELx / TTBR1_ELx、TCR_ELx、VTTBR_EL2;
    • 異常鏈接寄存器:ELR_ELx;
    • 保存處理狀態寄存器:SPSR_ELx;
    • 中斷控制寄存器:DAIF、ICC_*;
    • 性能計數器寄存器:
    • 電源管理控制寄存器:
    • 虛擬化控制寄存器:
    • 安全控制寄存器:SCR_EL3
    • 調試和跟蹤控制寄存器
    • 系統寄存器訪問控制
    • 浮點控制寄存器:FPCR
  • 系統寄存器命名:系統寄存器通常帶有 _ELx 后綴,其中 x 表示異常級別(如 EL1、EL2、EL3)

數據處理指令

  1. 算術運算指令
  • 加法:ADD、ADDS、ADDG
  • 減法:SUB、SUBS、SUBP、SUBG、SUBPS 等
  • 乘法:MUL、MADD、MNEG等
  • 除法:UDIV、SDIV等
  1. 邏輯運算指令
  • 邏輯與:AND
  • 邏輯或:ORR
  • 邏輯異或:EOR
  • 位清除:BIC
  1. 移位運算指令
  • 邏輯左移:LSL
  • 邏輯右移:LSR
  • 算術右移:ASR
  • 循環右移:ROR
  1. 比較指令
  • 比較:CMP
  • 負向比較:CMN
  1. 浮點操作指令:浮點操作遵循與整數數據處理指令相同的格式,并使用浮點寄存器。與整數數據處理指令一樣,操作的大小決定了所使用的寄存器的大小。浮點指令的operation總是以 F 開頭。
  • 浮點加法:FADD
  • 浮點減法:FSUB
  • 浮點乘法:FMUL
  • 浮點除法:FDIV
  • 浮點平方根:FSQRT

數據加載與存儲指令

在 AArch64 架構中,數據加載與存儲指令用于在處理器和內存之間移動數據。

  1. 加載寄存器:
  • LDR: 從內存中加載數據到寄存器。它可以用于加載字節、半字、字或雙字數據。
  1. 存儲寄存器:
  • STR: 將數據從寄存器存儲到內存。與 LDR 相對應,它也可以用于存儲不同大小的數據。

c++ 中使用匯編方法

  1. 內聯匯編
  2. 外部匯編文件
  3. 內聯匯編與 c++混用
  4. 使用宏定義

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

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

相關文章

2023 最新版IntelliJ IDEA 2023.1創建Java Web前(vue3)后端(spring-boot3)分離 項目詳細步驟(圖文詳解)

文章目錄 🚩 接上篇🏳?🌈 項目構建所需的相關工具JavaIDEAmavenNodeJSVueVisual Studio Code 🌌 后端項目創建詳細步驟🛫 1、開始創建新項目🛫 2、輸入項目名稱、選擇項目存儲位置、項目管理工具&#xff…

昇思25天學習打卡營第4天|yulang

今天主要了解了數據集 Dataset,主要包含了:數據集加載、數據集迭代、數據集常用操作、 可隨機訪問數據集、可迭代數據集、生成器。對于生成器很好理解,用代碼來造數據,可以動態地生成數據。主要作用數據集通常被用于訓練模型

tampermonkey插件下載國家標準文件

#創作靈感# 最近在一個系統招標正文中看到了一些國家標準,想要把文章下載下來,方便查閱,但是“國家標準全文公開系統”網站只提供了在線預覽功能,沒有提供下載功能,但是公司又需要文件,在網上找了一些辦法&…

gin項目部署到服務器并后臺啟動

文章目錄 一、安裝go語言環境的方式1.下載go安裝包,解壓,配置環境變量2.壓縮項目上傳到服務器并解壓3.來到項目的根目錄3.開放端口,運行項目 二、打包的方式1.在項目的根目錄下輸入以下命令2.把打包好的文件上傳到服務器3.部署網站4.ssl證書 …

C++字體庫開發之字體回退三

代碼片段 class FontCoverage { public: using SP std::shared_ptr<FontCoverage>; virtual ~FontCoverage() default; virtual void set(int index, FontTypes::CoverageLevel level) 0; virtual FontTypes::Coverag…

004 線程的狀態

文章目錄 Java線程可能的狀態&#xff1a; 狀態名稱說明NEW初始狀態&#xff0c;線程被構建&#xff0c;但是還沒有調用start()方法RUNNABLE運行狀態&#xff0c;Java線程將操作系統中的就緒和運行兩種狀態籠統地稱作"運行中"BLOCKED阻塞狀態&#xff0c;表示線程阻…

職場辦公受歡迎的電腦桌面便簽,手機電腦同步的備忘錄

在快節奏的職場生活中&#xff0c;有效的時間管理和信息記錄變得尤為重要。為了幫助大家更好地應對工作挑戰&#xff0c;好用的電腦桌面便簽和手機電腦同步的備忘錄&#xff0c;好用便簽應運而生&#xff0c;成為了當前職場辦公中的得力助手。 好用便簽是一款備受青睞的電腦桌…

阿里云物聯網應用層開發:第三部分,微信小程序和web客戶端實現

文章目錄 嗶哩嗶哩視頻教程1、阿里云物聯網平臺對接微信小程序2、阿里云物聯網平臺對接web客戶端2-1MQTT服務器編寫2-2 web端Servlet部分編寫備注嗶哩嗶哩視頻教程 【阿里云物聯網綜合開發,STM32+ESP8266+微信小程序+web客戶端一篇教程詳細講解】 https://www.bilibili.com/v…

.NET下的開源OCR項目:解鎖圖片文字識別的新篇章

在數字化時代&#xff0c;從圖片中高效準確地提取文字信息已成為眾多應用場景的迫切需求。OCR&#xff08;Optical Character Recognition&#xff0c;光學字符識別&#xff09;技術正是滿足這一需求的關鍵技術。對于.NET開發者而言&#xff0c;幸運的是&#xff0c;存在多個開…

c# 的 goto

搞循環感覺沒什么必要 int number 0; Console.WriteLine("請輸入一個數字&#xff08;輸入-1結束&#xff09;:"); start: // 標簽 number int.Parse(Console.ReadLine()); if (number -1) { Console.WriteLine("程序結束。"); } else { Cons…

接私活兒神器,一款功能強大的 SaaS 快速開發平臺

今天&#xff0c;推薦一個微服務 SaaS 快速開發平臺系統項目&#xff0c;筆者第一次使用就有點上頭&#xff0c;愛不釋手&#xff0c;必須要推薦給大家。 這是我目前見過最好的微服務 SaaS 快速開發平臺系統項目。功能完整&#xff0c;代碼結構清晰。值得推薦。 項目介紹 本…

nginx部署多個項目;vue打包項目部署設置子路徑訪問;一個根域名(端口)配置多個子項目

本文解決&#xff1a; vue打包項目部署設置子路徑訪問&#xff1b;nginx部署多個子項目&#xff1b;一個ip/域名 端口 配置多個子項目&#xff1b;配置后&#xff0c;項目能訪問&#xff0c;但是刷新頁面就丟失的問題 注&#xff1a;本文需要nginx配置基礎。基礎不牢的可見文…

昇思學習打卡-6-基于MindSpore的GPT2文本摘要

第一次近距離接觸GPT&#xff0c;了解了tokenizers這個分詞庫&#xff0c;感覺NLP和CV對比起來&#xff0c;處理流程基本一致&#xff0c;都是數據集加載和處理&#xff0c;模型構建、選擇學習率、模型訓練&#xff0c;進而可以使用模型進行推理。 不同的是&#xff0c;NLP可能…

致力于打造一個操作最簡單、功能最全面、創意最豐富的聊天記錄管理工具

管理您的聊天數據 下載&#xff1a;https://download.csdn.net/download/mo3408/89497474 提供數據獲取、導出、分析全棧式解決方案 獲取信息 一鍵式操作&#xff0c;數據信手拈來 導出聊天記錄 批量導出、自定義時間、消息類型任意選、Word、Excel、HTML、TXT想要哪個勾哪個…

在地圖上根據經緯度,畫一個矩型圍欄,設置每個點的經緯度

在做一個需求時有一個小點就是添加一個配送區域(5公里直徑內的)矩形圍欄 我做的比較簡單 大家看看有沒有幫助, 也是精簡代碼。測試效果上相對是精準的 //谷歌&#xff0c;根據經緯度獲取以它為中心半徑為5公里內的矩形的四個點經緯度getDefalutPoints (lng: number, lat: num…

np.argsort

函數解釋 np.argsort是NumPy庫中的一個函數&#xff0c;用于對數組進行排序并返回排序后的索引。它不會直接對數組進行排序&#xff0c;而是返回一個數組&#xff0c;這個數組中的元素是原數組中元素按升序排序后的索引。 numpy.argsort(a, axis-1, kindNone, orderNone) 參…

adb push 報錯 ...error: failed to copy...

一、現象&#xff1a; 原因&#xff1a;沒有權限導致的 二、解決方法&#xff1a; adb root adb remount #重新加載文件系統三、再次嘗試&#xff1a;adb push xxx.apk /system/app 結果&#xff1a;成功

貓咖老板教你一招解決貓浮毛問題,質量好的貓用空氣凈化器分享

作為一名貓咖店老板&#xff0c;我經常被朋友問到關于寵物空氣凈化器的各種問題。有人認為這是個神器&#xff0c;而有人則認為這完全是花錢買智商稅。其實我剛開始對購買寵物空氣凈化器也持懷疑態度&#xff0c;心想這么多錢花下去真的有效嗎&#xff1f;但使用后&#xff0c;…

如何在Java項目中實現領域驅動設計(DDD)

如何在Java項目中實現領域驅動設計&#xff08;DDD&#xff09; 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 領域驅動設計概述 領域驅動設計&#xff08;…

Axure教程:App側邊抽屜菜單交互制作

今天給大家示范一下抽屜菜單在Axure中的做法。在抽屜式菜單中&#xff0c;要實現兩個交互效果&#xff0c;分別是&#xff1a; 交互一 抽屜菜單中1、2級菜單項的伸縮效果 實現邏輯&#xff1a;設置動態面板的切換狀態及“推動/拉動原件”實現 交互二 菜單項的選中狀態切換 …