ARMV8的64位指令

一、介紹

ARMv8 體系結構最大的改變是增加了一個新的 64 位的指令集,這是早前 ARM 指令集
的有益補充和增強。它可以處理 64 位寬的寄存器和數據并且使用 64 位的指針來訪問內存。這
個新的指令集稱為 A64 指令集,運行在 AArch64 狀態。 ARMv8 兼容舊的 32 位指令集——A32
指令集,它運行在 AArch32 狀態。注意:A64 指令集的指令寬度是 32 位,而不是 64 位。
?

二、分類

A64 指令集可以分成如下幾類:

  • ? 內存加載和存儲指令;
  • ? 多字節內存加載和存儲指令;
  • ? 算術和移位指令;
  • ? 移位操作指令;
  • ? 位操作指令;
  • ? 條件操作指令;
  • ? 跳轉指令;
  • ? 獨占訪存指令;
  • ? 內存屏障指令;
  • ? 異常處理指令

A64 指令匯編需要注意的地方如下:
?A64 支持指令助記符和寄存器名全是大寫字母或者全是小寫字母的書寫方式。不過,程序和數據標簽是區分大小寫的。
?在使用立即操作數時前面可以使用“#”或者不使用“#”。
? 通用寄存器前面使用“w”表示僅使用通用寄存器的低 32 位,“x”表示 64 位通用寄存器。

三、A64 指令編碼格式

A64 指令集中每條指令的寬度為 32 位, 其中第 24~28 位用來識別指令的分類, 如圖 3.1 所示。

表中, x 表示該位可以是 1 或者 0。以加載與存儲指令為例,第 25 位必須為 0,第 27 位為
1,其他 3 位可以是 0 或者 1。
當根據 op0 字段確定了指令的分類之后,還需要進一步確定指令的細分類別。以加載與存
儲指令為例,加載與存儲指令的格式如圖 3.2 所示。

如圖 3.2 所示,加載與存儲指令格式可以細分為 op0、 op1、 op2、 op3 以及 op4 這幾個字段。
這些字段不同的編碼又可以對加載與存儲指令繼續細分,如表 3.2 所示

?為什么指令的編碼寬度只有 32 位?
因為 A64 指令集基于寄存器加載和存儲的體系結構設計,編碼寬度32位足夠了。使用op1+op2字段,一共五位。在指令編碼中使用 該5 位寬,這樣一共可以索引 32(25 = 32)個通用寄存器。ARM64 一共有 31 個通用寄存器,即 X0~X30,另外,在下面的條件下,我們還可以描述第 31 個寄存器。

  • ? 當使用寄存器作為基地址時,把 SP(棧指針)寄存器當作第 31 個通用寄存器。
  • ? 當用作源寄存器操作數時,把 XZR 當作第 31 個通用寄存器
    ?

四、具體的指令

MOV:數據傳送指令,將一個寄存器的值復制到另一個寄存器。
?? ?MOV R0, R1 ; 將R1的值復制到R0

LDR:從內存加載數據到寄存器

?? ?LDR R0, [R1] ; 將R1指向的內存地址中的值加載到R0

算術運算指令

ADD:加法指令,將兩個寄存器的值相加,結果存入第三個寄存器。
?? ?ADD R0, R1, R2 ; R0 = R1 + R2

SUB:減法指令,從一個寄存器中減去另一個寄存器的值,結果存入第三個寄存器。
?? ?SUB R0, R1, R2 ; R0 = R1 - R2

?BIC: 指定位清零指令
????????? BIC{S}<c> <Rd>, <Rn>, #<const>;將rn中的字數據const為1的比特清零,把結果放入rd?? ?

orr:? 指定位置位指令:

????????ORR{S}<c> <Rd>, <Rn>, #<const>
S后綴

匯編指令的s后綴,幾乎所有的匯編指令都可以在指令后面加上s后綴,s后綴的含義是在指令執行過程中會更新cpsr寄存器的N,V,C,Z位

N:在結果是有符號的二進制補碼情況下,如果結果為負數,則N=1;如果結果為非負數,則N=0

Z:如果結果為0,則Z=1;如果結果為非零,否則Z=0

C:是針對無符號數最高有效位向更高位進位時C=1;減法中運算結果的最高有效位從更高位借位時C=0

V:該位是針對有符號數的操作,會在下面兩種情形變為1,兩個最高有效位均為0的數相加,得到的結果最高有效位為1;兩個最高有效位均為1的數相加,得到的結果最高有效位為0;除了這兩種情況以外V位為0
?

參考:

參考:

ARM匯編指令_arm指令-CSDN博客

ARM指令集詳解-CSDN博客

匯編指令入門級整理-CSDN博客

ARM全匯編指令(詳細)整理附實例快速掌握_arm指令集-CSDN博客

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

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

相關文章

線性代數之矩陣特征值與特征向量的數值求解方法

文章目錄 前言1. 冪迭代法&#xff08;Power Iteration&#xff09;冪法與反冪法求解矩陣特征值冪法求最大特征值編程實現補充說明 2. 逆冪迭代法&#xff08;Inverse Iteration&#xff09;移位反冪法 3. QR 算法&#xff08;QR Algorithm&#xff09;——稠密矩陣理論推導編程…

VScode:運行程序停止后,頻繁出現終端進程被終止

VScode里面powershell被迫關閉 bug場景排查原因解決辦法 bug場景 系統&#xff1a;Windows IDE&#xff1a;Visual Studio Code 停止運行程序后&#xff0c;按向上箭頭想要執行上一步命令&#xff0c;忽然終端頁面強行關閉&#xff0c;并報錯如下&#xff1a; 終端進程 &quo…

[MERN] 使用 socket.io 實現即時通信功能

[MERN] 使用 socket.io 實現即時通信功能 效果實現如下&#xff1a; MERN-socket.io 實現即時聊天 Github 項目地址:https://github.com/GoldenaArcher/messenger-mern 項目使用了 MERN(MongoDB, Express, React, Node.js) socket.io 實現即時通信功能&#xff0c;并且使用了…

【菜鳥飛】Conda安裝部署與vscode的結合使用

介紹 Conda 是一個跨平臺的開源工具&#xff0c;用于管理軟件包和環境。最初由 Anaconda 公司開發&#xff0c;它的設計目標是支持數據科學和機器學習領域&#xff0c;但其功能不僅局限于此。 以下是 Conda 的核心特點&#xff1a; 包管理&#xff1a;安裝、更新、卸載各種庫…

《Android應用性能優化全解析:常見問題與解決方案》

目錄 一、UI卡頓/掉幀 二、內存泄漏&#xff08;Memory Leak&#xff09; 三、ANR&#xff08;Application Not Responding&#xff09; 四、列表滑動卡頓&#xff08;RecyclerView/ListView&#xff09; 五、冷啟動耗時過長 六、內存抖動&#xff08;Memory Churn&#x…

【MySQL是怎么運行的】0、名詞解釋

聚簇索引&#xff1a;聚簇索引和數據在一起&#xff0c;又名主鍵索引&#xff0c;是主鍵id構建的一顆B樹&#xff0c;非葉節點是主鍵id&#xff0c;葉子節點是真實數據。其他索引統稱二級索引&#xff0c;也稱為非聚簇索引。覆蓋索引&#xff1a;查找的數據就在索引樹上&#x…

深入解析 TCP 協議【真題】

傳輸控制協議&#xff08;TCP&#xff09;解析與題目解析 題目解析 關于傳輸控制協議&#xff08;TCP&#xff09;表述不正確的是&#xff1f; A. 主機尋址 B. 進程尋址 C. 流量控制 D. 差錯控制 TCP&#xff08;Transmission Control Protocol&#xff09;是面向連接、可靠傳…

單例模式的五種實現方式

1、餓漢式 ①實現&#xff1a;在類加載的時候就初始化實例 ②優點&#xff1a;線程安全 ③缺點&#xff1a;實例在類加載的時候創建&#xff0c;可能會浪費資源 //餓漢式 public class EagerSingleton{private EagerSingleton(){} //私有構造方法private static EagerSingle…

SwiftUI 讓視圖自適應高度的 6 種方法(四)

概覽 在 SwiftUI 的世界里&#xff0c;我們無數次都夢想著視圖可以自動根據布局上下文“因勢而變”?。大多數情況下&#xff0c;SwiftUI 會將每個視圖尺寸處理的井井有條&#xff0c;不過在某些時候我們還是得親力親為。 如上圖所示&#xff0c;無論頂部 TabView 容器里子視圖…

小程序SSL證書過期怎么辦?

SSL證書就像小程序的“安全鎖”&#xff0c;一旦過期&#xff0c;用戶訪問時會被提示“不安全”&#xff0c;輕則流失客戶&#xff0c;重則數據泄露&#xff01;作為企業負責人&#xff0c;如何快速解決證書過期問題&#xff1f;又該如何避免再次踩坑&#xff1f;這篇指南給你答…

ClickHouse優化技巧實戰指南:從原理到案例解析

目錄 ?ClickHouse優化核心思想?表結構設計優化?查詢性能優化技巧?數據寫入優化方案?系統配置調優實戰?高可用與集群優化?真實案例解析?總結與建議 1. ClickHouse優化核心思想 ClickHouse作為OLAP領域的明星引擎&#xff0c;其優化需遵循列式存儲特性&#xff0c;把握…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_02帶邊框和斑馬紋的固定表頭表格

前言&#xff1a;哈嘍&#xff0c;大家好&#xff0c;今天給大家分享一篇文章&#xff01;并提供具體代碼幫助大家深入理解&#xff0c;徹底掌握&#xff01;創作不易&#xff0c;如果能幫助到大家或者給大家一些靈感和啟發&#xff0c;歡迎收藏關注哦 &#x1f495; 目錄 Deep…

服務自動被kill掉的原因和查看

服務在運行一段時間后被自動kill掉可能是由多種原因引起的,包括系統資源限制、進程管理策略、應用程序錯誤等。以下是一些常見的原因以及定位問題的過程: 常見原因 系統資源限制: 內存不足:如果服務消耗了過多的內存,系統可能會kill掉該進程以釋放內存資源。CPU使用過高:…

基礎算法——順序表

一、詢問學號 題?來源&#xff1a;洛? 題?鏈接&#xff1a;P3156 【深基15.例1】詢問學號 - 洛谷 難度系數&#xff1a;★ 1. 題目描述 2. 算法原理 直接? vector 或者數組模擬即可。 3. 參考代碼 #include <iostream> #include <vector>using namespace st…

Ubuntu用戶安裝cpolar內網穿透

前言 Cpolar作為一款體積小巧卻功能強大的內網穿透軟件&#xff0c;不僅能夠在多種環境和應用場景中發揮巨大作用&#xff0c;還能適應多種操作系統&#xff0c;應用最為廣泛的Windows、Mac OS系統自不必多說&#xff0c;稍顯小眾的Linux、樹莓派、群輝等也在起支持之列&#…

C#實現高性能異步文件下載器(支持進度顯示/斷點續傳)

一、應用場景分析 異步文件下載器用處很大&#xff0c;當我們需要實現以下功能時可以用的上&#xff1a; 大文件下載&#xff08;如4K視頻/安裝包&#xff09; 避免UI線程阻塞&#xff0c;保證界面流暢響應多任務并行下載 支持同時下載多個文件&#xff0c;提升帶寬利用率后臺…

Oracle比較好的幾本書籍

1.《Oracle專家高級編程》 2.《Oracle高效設計》 3.《Oracle9i&10g&11g編程藝術深入數據庫體系結構》 4.《讓Oracle跑的更快》(1/2) ....... n.《Oracle官方文檔的閱讀》下面包括這幾個部分&#xff0c;可以跟進研讀一下&#xff1a; &#xff08;1&#xff09;《…

js和java中方法重載(js本身是不支持方法重載,方便對比學習)

js如果需要實現方法重載 示例 1&#xff1a;根據參數數量實現重載 function overloadExample() {if (arguments.length 1) {console.log(一個參數:, arguments[0]);} else if (arguments.length 2) {console.log(兩個參數:, arguments[0], arguments[1]);} else {console.l…

Android : Camera之CHI API

來自&#xff1a; https://www.cnblogs.com/szsky/articles/10861918.html 一、CAM CHI API功能介紹&#xff1a; CHI API建立在Google HAL3的靈活性基礎之上&#xff0c;目的是將Camera2/HAL3接口分離出來用于使用相機功能&#xff0c;它是一個靈活的圖像處理驅動程序&#…

Netty基礎—2.網絡編程基礎四

大綱 1.網絡編程簡介 2.BIO網絡編程 3.AIO網絡編程 4.NIO網絡編程之Buffer 5.NIO網絡編程之實戰 6.NIO網絡編程之Reactor模式 5.NIO網絡編程之Buffer (1)Buffer的作用 Buffer的作用是方便讀寫通道(Channel)中的數據。首先數據是從通道(Channel)讀入緩沖區&#xff0c;從…