ARM彙編指令集_學習筆記(1)

来源:https://www.cnblogs.com/duxie/archive/2018/12/06/10080064.html
-Advertisement-
Play Games

ARM處理器是一種16/32位的高性能、低成本、低功耗的嵌入式RISC微處理器,由ARM公司設計,然後授權給各半導體廠商生產。它目前已經成為應用最為廣泛的嵌入式處理器。 ...


一、什麼是ARM彙編?

  • 運行在ARM處理器上的彙編語言就叫ARM彙編。
  • C程式運行在X86平臺,底層就是X86彙編;運行在ARM平臺,底層就是ARM彙編。ARM彙編與X86彙編有顯著區別。
  • X86屬於CISC(複雜指令集);ARM屬於RISC(精簡指令集)。

二、CISC存在的問題:

指令系統龐大,指令功能複雜,指令格式、定址方式多;執行速度慢;功耗大;難以優化編譯;編譯程式複雜;80%的指令在20%的運行時間使用;無法相容等。

三、RISC特點:

  1. 簡單的指令集---RISC指令集只提供很有限的操作,基本上單周期指向每條指令,其指令長度也是固定的(一般4個位元組)。CISC指令複雜豐富,功耗大,長度不固定(1到6個位元組)。
  2. Load-Store架構---在RISC中,CPU並不會對記憶體中的數據進行操作,所有的計算都要求在寄存器中完成。而寄存器和記憶體的通信則由單獨的指令來完成。而在CISC中,CPU是可以直接對記憶體進行操作的。
  3. 更多的寄存器---和CISC相比。基於RISC的處理器有更多的通用寄存器可以使用,且每個寄存器都可以進行數據存儲或者定址。
  4. RISC指令集能夠非常有效的適合於採用流水線、超流水線和超標量技術,從而實現指令級併進行操作,提高處理器性能。

四、CISC VS RISC

RISC與CISC的主要特征對比
比較內容 CISC RISC
指令系統 複雜、龐大 簡單、精簡
指令數目 一般大於200 一般小於100條
指令格式 一般大於4 一般小於4種
指令字長 不固定 等長
可訪存指令 不加限制 只有LOAD/STORE指令
指令使用頻率 相纏很大   相差不大
指令執行時間 相差很大 絕大多數在一個周期內完成
優化編譯實現 很難 較容易
程式源代碼長度 較短 較長
控制器實現方式 絕大多數為微程式控制 絕大多數為硬佈線控制
軟體系統開發時間 較短   較長

五、什麼是寄存器?

寄存器(register)是CPU的一個組成部分,裡面存放著指令、數據和地址等供CPU計算使用,速度比較快。寄存器分為通用寄存器(完成通用的計算功能,誰都可以使用),和專用寄存器(狀態寄存器,下一條執行指令寄存器,棧寄存器等,不能隨便修改)。 

六、ARM微處理器的工作狀態一般有兩種,並可在兩種狀態之間切換。

  • 第一種為ARM狀態,此時處理器執行32位字對齊的ARM指令;第二種為Thumb狀態,此時處理器執行16位的、半字對齊的Thumb指令。
  • 在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且,處理器工作狀態的轉變並不影響處理器的工作模式和相應寄存器中的內容。但ARM微處理器在開始執行代碼時,應該處於ARM狀態。
  • 進入Thumb狀態:當操作數寄存器的狀態位(位0)為1時,可以採用執行BX指令的方法,使微處理器從ARM狀態切換到Thumb狀態。此外,當處理器處於Thumb狀態時發生異常(如IRQ、FIQ、Undef、Abort、SWI等),則異常處理返回時,自動切換到Thumb狀態。
  • 進入ARM狀態:當操作數寄存器的狀態位為0時,執行BX指令時可以使微處理器從Thumb狀態切換到ARM狀態。此外,在處理器進行異常處理時,把PC指針放入異常模式鏈接寄存器中,並從異常向量地址開始執行程式,也可以使處理器切換到ARM狀態。
  • ARM 指令:當前執行的 PC 和與看到的 PC 相差 8,即看彙編時,需要 pc+8 才是真正的 pc;
    Thumb 指令:當前執行的 PC 和與看到的 PC 相差 4即 看彙編時,需要 pc+4 才是真正的 pc。(下圖為ARM指令流水線 )

 

七、ARM微處理器支持7種運行模式。

  1. 用戶模式(USR):ARM處理器正常的程式執行狀態。
  2. 快速中斷模式(FIQ):用於高速數據傳輸或通道處理。
  3. 外部中斷模式(IRQ):用於通用的中斷處理。
  4. 管理模式(SVC):操作系統使用的保護模式。
  5. 數據訪問終止模式(ABT):當數據或指令預取終止時進入該模式,可用於虛擬存儲及存儲保護。
  6. 系統模式(SYS):運行具有特權的操作系統任務。
  7. 未定義指令中止模式(UND):當未定義的指令執行時進入該模式,可用於支持硬體協處理器的軟體模擬。
  • ARM微處理器的運行模式可以通過軟體改變,也可以通過外部中斷或異常處理改變。大多數的應用程式運行在用戶模式下,當處理器運行在用戶模式下時,某些被保護的系統資源是不能被訪問的。
  • 除用戶模式以外,其餘的所有6種模式稱之為非用戶模式,或特權模式;其中除去用戶模式和系統模式以外的5種又稱為異常模式,常用於處理中斷或異常,以及需要訪問受保護的系統資源等情況。

八、ARM寄存器

ARM處理器共有37個寄存器。其中包括:31個通用寄存器,包括程式計數器(PC)在內。這些寄存器都是32位寄存器。以及6個32位狀態寄存器

未分組寄存器:它們都共用R0到R7的通用寄存器,即只有一個寄存器;
分組寄存器:R8-R12 :兩個(FIQ擁有自己獨立的R8-R12的通用寄存器,其它六種處理模式共用R8-R12的通用寄存器。);

所謂的分組寄存器,是指一個寄存器在不同模式下有對應不同的寄存器,比如SP,在abort模式下sp_abt,在undefined模式下是sp_und,在irq模式下是sp_irq,進入各種模式後會自動切換映射到各個模式下對應的寄存器。
1 個固定的程式計數器 : PC (又稱 R15),總是指向正在取值的指令,類似於X86的EIP寄存器。
當前程式狀態寄存器 :CPSR。不能被同時訪問,一種模式下最多同時訪問 18 個寄存器。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • create table,show tables,describe table,DROP TABLE,ALTER TABLE ,怎麼使用? ...
  • 先決條件 先運行mongodb肯定是必須的,然後導入以下包: MongoClient MongoClient()實例表示到資料庫的連接池; 你將只需要MongoClient類的一個實例,即使有多個線程也是一樣。 重要: 通常,您只能為給定的MongoDB部署(例如獨立,副本集或分片群集)創建一個Mo ...
  • create database ,drop database ,show Databases,use 資料庫 ,怎麼使用? ...
  • [TOC] 安裝依賴 (1)cmake是新版MySQL的編譯工具 安裝boost 如果安裝的MySQL5.7及以上的版本,在編譯安裝之前需要安裝boost,因為高版本mysql需要boots庫的安裝才可以正常運行。否則會報 錯誤 1. 切換到 目錄,然後在這個目錄下下載boost MySQL5.7. ...
  • 大數據已經成為時代發展的趨勢,很多人紛紛選擇學習大數據,想要進入大數據行業。大數據技術體系龐大,包括的知識較多,系統的學習大數據可以讓你全面掌握大數據技能。學習大數據需要掌握哪些知識?我還是要推薦下我自己創建的大數據資料分享群142973723,這是大數據學習交流的地方,不管你是小白還是大牛,小編都 ...
  • 源碼:https://github.com/HannahLihui/StudentManager-SSM/tree/master/SSM-git/StudentManager-SSM-master 1.前端有一個img引入,這裡this.src=this.src+'?'就會調用映射到後臺的check ...
  • [20181206]關於一致性讀取3.txt--//簡單演示一致性讀取以及如何讀取undo重構數據塊的.我不想轉儲對應的undo塊,解析那些複雜的過程.1.環境:SCOTT@book> @ ver1PORT_STRING VERSION BANNER x86_64/Linux 2.4.xx 11.2 ...
  • MongoDB DBA 實踐 (1)電腦安裝環境: (2)MongoDB官網:https://www.mongodb.com/ 點擊Download後需要等一會才會下載。 下載完成為: 然後運行 一直按next,直至安裝完成。 (3)設置環境變數 查看mongoDB Service (4)測試mo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...