硬件開發2-匯編1(ARMv7-A)- 基本概要

一、匯編基本概要

1、ARM數據和指令類型

2、ARM字節順序

????????即可大端存儲也可小端存儲,默認小端存儲(不建議修改)、

? ? ? ? kernel(內核)中的,CPSR(當前程序狀態寄存器)可修改大小端存儲

3、ARM處理器工作模式

? ? ? ? 前七個重要

4、寄存器組織

5、程序狀態寄存器(CPSR)

? ? ? ? 此圖可做概念理解,部分實際參數有問題

6、異常處理

(1)概念

????????異常向量表是ARM處理器中用于處理異常和中斷的核心機制,包含各類異常處理程序的入口地址或跳轉指令。當異常發生時,處理器會自動跳轉到對應向量地址執行處理程序

(2)關鍵功能

????????快速響應異常,保存現場(LR、SPSR),切換處理器模式。

????????提供標準化異常入口,確保系統穩定性和實時性

(2)異常向量表? ??

異常類型向量地址
復位(Reset)0x00000000
未定義指令(Undefined Instruction)0x00000004
軟件中斷(SWI)0x00000008
預取指令異常(Prefetch Abort)0x0000000C
數據異常(Data Abort)0x00000010
保留(Reserved)0x00000014
外部中斷(IRQ)0x00000018
快速外部中斷(FIQ)0x0000001C

二、實現匯編操作

1、格式

????偽操作:它們不是 ARM 處理器實際的指令(如 MOV, ADD 等),而是寫給匯編器看的命令,用于指導匯編器如何工作
area reset, code, readonly
code32
entry

end?? ?

area: 這是最重要的一個偽操作,用于定義一個段。程序、數據、堆棧等都需要被組織在不同的段中
reset: 這是你為這個段起的名字。名字 reset 具有很強的暗示性,通常用于表示復位向量段,即CPU上電或復位后首先執行的第一段代碼所在的位置
code: 指定該段的屬性為代碼,意味著這個段包含可執行的指令
readonly: 指定該段的屬性為只讀。對于代碼段來說,這通常是默認且必須的

?? ?code32: 表示后續指令使用 32位的 ARM 指令集
thumb: 表示后續指令使用 16位的 Thumb 指令集

2、指令?? ?

? ? (1)mov

?? ??? ?MOV{S}<c> <Rd>, #<const>
MOV{S}<c> <Rd>, <Rm>

?? ??? ?MOV instruction ? ??? ??? ??? ?Canonical form


MOV{S} <Rd>, <Rm>, ASR #<n> ASR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, LSL #<n> LSL{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, LSR #<n> LSR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, ROR #<n> ROR{S} <Rd>, <Rm>, #<n>
MOV{S} <Rd>, <Rm>, ASR <Rs> ASR{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, LSL <Rs> LSL{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, LSR <Rs> LSR{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, ROR <Rs> ROR{S} <Rd>, <Rm>, <Rs>
MOV{S} <Rd>, <Rm>, RRX ?? ??? ?RRX{S} <Rd>, <Rm>

  • 注意?? ?
    • (1)與C語言中的賦值運算對比(左值/右值),利于加深理解
    • (2)#<n>/<Rs> 取值范圍 (0 - 31)
    • (3)RRX{S}:擴展右移 (不需要移位量)
    • (4)在計算機中只識別二進制數據,計算機沒有有無符號,浮動點等概念;

? (2)add(加法指令)

????????

????????立即數作為第二操作數:? ? ? ? ? ? ? ?ADD{S}<c> <Rd>, <Rn>, #<const>
寄存器作為第二操作數寄存器:?? ?ADD{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}
寄存器作為第二操作數移位量:?? ?ADD{S}<c> <Rd>, <Rn>, <Rm>, <type> <Rs>

  • 注意??
    • ?{, <shift>} 其中{}代表可選擇,“,”表示在使用時需要在Rm后添加“,” shift 移位量(立即數)
    • ?add r0, #3, #2 :為什么沒有這種形式,C語言int a = 1 + 2; 編譯階段計算, 不需要在機器指令中體現??

? ? (3)sub(減法指令)


立即數作為第二操作數:?? ??? ?SUB{S}<c> <Rd>, <Rn>, #<const>
寄存器作為第二操作數寄存器:?? ?SUB{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}
寄存器作為第二操作數移位量:?? ?SUB{S}<c> <Rd>, <Rn>, <Rm>, <type> <Rs>

(4)立即數(imm)? ? ??

?????????以上指令都有立即數作為第二操作數的情況,準確的說這里所指的是12位立即數imm12

????????12位立即數的條件是:?

????????判斷標準:把某個數展開成2進制,該數必須存在一種循環右移(偶數位),使得移位后高24位全0,低8位即為有效imm8;

(5)ldr(加載指令)


LDR<c> <Rt>, <label>

?(6)sdr(存放指令)

? ?(7)MVN(按位取反移動指令)


MVN{S}<c> <Rd>, #<const>
MVN{S}<c> <Rd>, <Rm>{, <shift>}
MVN{S}<c> <Rd>, <Rm>, <type> <Rs>

?? ?(8)bic(bit clear):指定位置清0


BIC{S}<c> <Rd>, <Rn>, #<const>
BIC{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}
BIC{S}<c> <Rd>, <Rn>, <Rm>, <type> <Rs>??? ??? ?

? ? (9)orr(or):指定位置1


ORR{S}<c> <Rd>, <Rn>, #<const>
ORR{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}
ORR{S}<c> <Rd>, <Rn>, <Rm>, <type> <Rs>


(10)條件判斷標志NZCV

????????CPSR寄存器中條件判斷標志位
N: 符號標志位:上條指令執行結果最高位bit31為1,則 N = 1, 當結果作為有符號解釋時為負值;
Z: 零值標志位:上條指令執行結果為0(即bit0 - bit31 均為0),則 Z = 1;
C: 進位標志位:進行無符號解讀,如果在加法過程中進位或者減法時沒有借位,則為 C = 1,否則 C = 0
V: 溢出標志位:進行有符號解讀,是否發生溢出 -2^31 - 2^31-1(兩個正數加得負數,兩個負數加得正數)
條件碼:eq ge gt le lt al(無條件執行)
equal:等于
not equal:不等于

? ? (11)cmp(compare):比較指令


CMP<c> <Rn>, #<const>
CMP<c> <Rn>, <Rm>{, <shift>}
CMP<c> <Rn>, <Rm>, <type> <Rs>

cmp r0, r1 <==> subs r0, r1
比較兩個數中的最大值

? (12)b bl bx :(跳轉指令)

? ? ? ? 類似于c語言goto


B<c> <label>
b fun <==> ldr pc, =fun

BL<c> <label>
bl fun

BX<c> <Rm>
bx lr <==> mov pc, lr

三、練習

1、比較兩個數中的最大值

2、比較獲取三個數中最大值

3、利用跳轉指令比較兩個數中的最大值

4、利用跳轉指令實現for循環對(0-99)求和

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

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

相關文章

Linux中進程和線程常用的API詳解

進程與線程基礎及 Linux 進程間通信&#xff08;IPC&#xff09;詳解 一、程序與進程 1. 程序&#xff08;靜態文件&#xff09; 程序是存儲在磁盤上的可執行文件&#xff0c;是靜態實體&#xff0c;不占用 CPU、內存等運行時資源&#xff0c;僅占用磁盤空間。不同操作系統的可…

VS Code 插件開發教程

VS Code 插件開發教程 概述 Visual Studio Code&#xff08;簡稱 VS Code&#xff09;是一款由 Microsoft 開發的開源輕量級編輯器&#xff0c;支持跨平臺&#xff08;Windows、macOS、Linux&#xff09;。 其最大的優勢之一是強大的插件系統&#xff0c;開發者可以通過編寫擴…

Docker技術解析

1.Docker安裝 1.如果Ubuntu自帶的Docker版本太低&#xff0c;我們需要卸載舊版本并安裝新的 sudo apt-get remove docker docker-engine docker.io containerd runc2. 備份原有軟件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak3.選擇合適的鏡像源 # 或者使用…

TCP套接字的使用

Java中使?TCP協議通信,使用ServerSocket來建立鏈接,使用Socket進行通信.ServerSocketServerSocket是創建TCP服務端Socket的api,主要方法:方法簽名說明ServerSocket(int port)創建一個服務端流套接字Socket,并綁定指定端口Socket accpet()開始監聽指定端口,有客戶端鏈接后,返回…

linux執行systemctl enable xxxxx 報 Failed to execute operation: Bad message

linux執行systemctl enable redis.service 報 Failed to execute operation: Bad message 如果在執行 systemctl enable 命令時遇到 "Failed to execute operation: Bad message" 錯誤&#xff0c;可能是由于以下幾個原因導致的。你可以按照以下步驟進行排查和解決&a…

終端之外:解鎖Linux命令行的魔法與力量

Linux命令行的核心理念 在記憶具體的指令之前&#xff0c;先理解它的哲學&#xff1a; 一切皆文件 &#xff1a;硬件設施&#xff0c;進程&#xff0c;目錄…在Linux中幾乎所有資源都被抽象為文件&#xff0c;這意味著你可以通過同樣的指令&#xff08;如 ench ,cat&#xff…

CSS 動畫實戰:實現電商中“加入購物車”的拋物線效果

引言 在電商網站中&#xff0c;“加入購物車”動畫 是提升用戶體驗的經典交互之一。一個小小的商品圖標從頁面飄向購物車&#xff0c;不僅直觀地反饋了操作結果&#xff0c;還能增加趣味性與沉浸感。 實現這一效果的方式有很多&#xff0c;比如 JavaScript 計算路徑 動畫&…

深度學習之損失函數

深度神經網絡由多層網絡連接而成&#xff0c;網絡連接處防止線性直接相關&#xff0c;采用非線性函數進行逐層隔離&#xff0c;真正實現每層參數的獨立性&#xff0c;也就是只對本層提取到的特征緊密相關。因為如果是線性函數直接相連就成了一層中間網絡了&#xff0c;只不過參…

Oracle OCP認證考試題目詳解082系列第32題

考察知識點:Oracle profiles(配置文件) 英語題目 32.Which are two of the account management capabilities that can be configured using Oracle profiles? A.the number of days for which an account may be logged in to one or more sessions before it is locked…

Docker 部署 MongoDB:單節點與副本集的最佳實踐

Docker 部署 MongoDB&#xff1a;單節點與復制集的企業級最佳實踐引言&#xff1a;容器化有狀態服務的范式轉變第一部分&#xff1a;基礎概念與生產環境考量1.1 核心 Docker 概念深度解析1.2 Volume vs. Bind Mount&#xff1a;生產環境抉擇1.3 獲取與驗證官方鏡像官方鏡像默認…

公司本地服務器上搭建部署的辦公系統web項目網站,怎么讓外網訪問?有無公網IP下的2種通用方法教程

本地物理服務器計算機搭建部署應用包括網站等&#xff0c;然后在局域網內的訪問外&#xff0c;還需要提供外地的連接訪問&#xff0c;這是比較常見的跨網通信需求。如在家或在外訪問公司內部辦公系統網站&#xff0c;這就涉及內網IP和公網IP的轉換&#xff0c;或域名的解析使用…

整體設計 之 緒 思維導圖引擎 之 引 認知系統 之 引 認知系統 之 序 認知元架構 之6 拼句 之1 (豆包助手 之8)

摘要(AI生成)認知演進 中 交流句子所包含的 信息描述框架 < i , j > ( m , n )本體論基礎&#xff08;數學約束&#xff09;&#xff1a; n n元&#xff08;維度&#xff09;n次&#xff08;層次&#xff09;n個&#xff08;方程&#xff09;n場&#xff08;場景&am…

微軟的兩個調試器debugpy和python

在生成launch.json文件時&#xff0c;新版本的python擴展解釋器類型是debugpy&#xff0c;而不是就版本的type:python&#xff0c;那么兩者的區別在哪&#xff1f;1. 歷史演變背景&#xff08;1&#xff09;舊版&#xff08;Python擴展 < 2021.09&#xff09;使用 "typ…

【連載2】C# MVC 自定義錯誤頁設計:404/500 處理與 SEO 優化

在開發ASP.NET MVC 應用時&#xff0c;自定義錯誤頁是提升用戶體驗和 SEO 表現的重要環節。默認的錯誤頁不僅不美觀&#xff0c;還可能泄露技術細節&#xff0c;影響用戶體驗和搜索引擎排名。 實現自定義錯誤頁的完整代碼 配置 Web.config 自定義錯誤頁 在 ASP.NET 中&#…

mcp解讀——概述及整體架構

概念介紹 什么是模型上下文協議 &#xff08;MCP&#xff09; MCP&#xff08;模型上下文協議&#xff09;是一種用于將 AI 應用程序連接到外部系統的開源標準。 使用 MCP&#xff0c;Claude 或 ChatGPT 等人工智能應用程序可以連接到數據源&#xff08;例如本地文件、數據庫&a…

AI 賦能云端運維:基于 MCP 協議深度集成 Codebuddy CLI 與騰訊云 Lighthouse 的實戰全解

摘要 在云計算技術飛速演進的今天&#xff0c;服務器的管理與運維正經歷著從傳統手動操作、腳本自動化到智能化、對話式交互的深刻變革。本文將系統性地、全流程地展示如何將騰訊云 Lighthouse 輕量應用服務器與尖端的 AI 編程助手 Codebuddy CLI 進行深度集成。我們將從服務器…

【Proteus仿真】【51單片機】教室燈光控制器設計

文章目錄一、功能簡介二、軟件設計三、實驗現象聯系作者一、功能簡介 本項目使用Proteus8仿真51單片機控制器&#xff0c;使用LCD1602液晶、DS1302時鐘模塊、人體紅外感應模塊、開關LED指示燈、繼電器、PCF8591 ADC模塊、光敏傳感器、按鍵模塊等。 主要功能&#xff1a; 系統運…

成為一個年薪30W+的FPGA工程師是一種什么體驗?

FPGA&#xff08;Field-Programmable Gate Array&#xff09;是現場可編程門陣列&#xff0c;通過硬件描述語言設計電路&#xff0c;可實現并行計算&#xff0c;廣泛應用于通信、人工智能、工業控制等領域。FPGA工程師的工作包括RTL設計、仿真驗證、時序分析等。盡管并非所有公…

ZooKeeper Java客戶端與分布式應用實戰

1. ZooKeeper Java客戶端實戰 ZooKeeper應用開發主要通過Java客戶端API連接和操作ZooKeeper集群&#xff0c;有官方和第三方兩種客戶端選擇。 1.1 ZooKeeper原生Java客戶端 依賴引入 <dependency><groupId>org.apache.zookeeper</groupId><artifactId>…

0303 【軟考高項】項目管理概述 - 組織系統(項目型組織、職能型組織、矩陣型組織)

0303 【軟考高項】項目管理概述 - 組織系統&#xff08;項目型組織、職能型組織、矩陣型組織&#xff09; 目錄0303 【軟考高項】項目管理概述 - 組織系統&#xff08;項目型組織、職能型組織、矩陣型組織&#xff09;一、基本概念二、職能型組織二、項目型組織三、矩陣型組織3…