嵌入式中匯編語言的基本實現

? ? ? ?大家好,今天給大家分享,GNU匯編的語法。

第一:匯編簡介

? ? ? ? GNU 匯編語法適用于所有的架構,并不是 ARM 獨享的,GNU 匯編由一系列的語句組成,

每行一條語句,每條語句有三個可選部分,如下:

labelinstruction @ comment

label 即標號,表示地址位置,有些指令前面可能會有標號,這樣就可以通過這個標號得到

指令的地址,標號也可以用來表示數據地址。注意 label 后面的“:”,任何以“:”結尾的標識

符都會被識別為一個標號。

instruction 即指令,也就是匯編指令或偽指令。

@符號,表示后面的是注釋,就跟 C 語言里面的“/*”和“*/”一樣,其實在 GNU 匯編文

件中我們也可以使用“/*”和“*/”來注釋。

注意:ARM 中的指令、偽指令、偽操作、寄存器名等可以全部使用大寫,也可以全部使用

小寫,但是不能大小寫混用。

第二:處理器內部數據傳輸方法

? ? ??

1MOV 指令

MOV 指令用于將數據從一個寄存器拷貝到另外一個寄存器,或者將一個立即數傳遞到寄

存器里面,使用示例如下:

MOV R0R1? ? ? ? @將寄存器 R1 中的數據傳遞給 R0,即 R0=R1

MOV R0, #0X12? ? @將立即數 0X12 傳遞給 R0 寄存器,即 R0=0X12

2MRS 指令

MRS 指令用于將特殊寄存器(CPSR SPSR)中的數據傳遞給通用寄存器,要讀取特殊

寄存器的數據只能使用 MRS 指令!使用示例如下:

MRS R0, CPSR? ? ? @將特殊寄存器 CPSR 里面的數據傳遞給 R0,即 R0=CPSR

3MSR 指令

MSR 指令和 MRS 剛好相反,MSR 指令用來將普通寄存器的數據傳遞給特殊寄存器,也就

是寫特殊寄存器,寫特殊寄存器只能使用 MSR,使用示例如下:

MSR CPSR, R0? ? ? @將 R0 中的數據復制到 CPSR 中,即 CPSR=R0

4 BL 指令

BL 指令相比 B 指令,在跳轉之前會在寄存器 LR(R14)中保存當前 PC 寄存器值,所以可以通過將 LR 寄存器中的值重新加載到 PC 中來繼續從跳轉之前的代碼處運行,這是子程序調用一個基本但常用的手段。比如 Cortex-A 處理器的 irq 中斷服務函數都是匯編寫的,主要用匯編來實現現場的保護和恢復、獲取中斷號等。但是具體的中斷處理過程都是 C 函數,所以就會存

在匯編中調用 C 函數的問題。而且當 C 語言版本的中斷處理函數執行完成以后是需要返回到

irq 匯編中斷服務函數,因為還要處理其他的工作,一般是恢復現場。這個時候就不能直接使用

B 指令了,因為 B 指令一旦跳轉就再也不會回來了,這個時候要使用 BL 指令,示例代碼如下:

BL 指令示例

push {r0, r1} @保存 r0,r1

?cps #0x13

@進入 SVC 模式,允許其他中斷再次進去

bl system_irqhandler

@加載 C 語言中斷處理函數到 r2 寄存器中

?cps #0x12 @進入 IRQ 模式

?pop {r0, r1}

?str r0, [r1, #0X10] @中斷執行完成,寫 EOIR

上述代碼中就是執行 C 語言版的中斷處理函數,當處理完成以后是需要返回來繼續

執行下面的程序,所以使用了 BL 指令。

總結:ARM 匯編就講解到這里,主要說明了一些最常用的指令,還有很多不常用的指令沒有講
解 , 用到了再看也不遲哦。

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

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

相關文章

小白學視覺 | 詳解遺傳算法 GA(Python實現代碼)

本文來源公眾號“小白學視覺”,僅用于學術分享,侵權刪,干貨滿滿。 原文鏈接:詳解遺傳算法 GA(Python實現代碼) 轉自:機器之心 英文:www.analyticsvidhya.com/blog/2017/07/introduc…

在線上傳解壓PHP文件代碼,壓縮/壓縮(網站一鍵打包)支持密碼登錄

在線上傳解壓PHP文件代碼,壓縮/壓縮(網站一鍵打包)支持密碼登錄 資源寶分享:www.httple.net 如果你沒有主機控制面板這個是最好選擇,不需要數據庫,上傳當控制面板使用,無需安裝任何擴展,安全高,…

重拾前端基礎知識:CSS

重拾前端基礎知識:CSS 前言選擇器簡單選擇器屬性選擇器組合選擇器 插入CSS內嵌樣式(Inline Style)內部樣式(Internal Style)外部樣式(External Style) 層疊顏色背景顏色文本顏色RGB 顏色HEX 顏色…

ESD管 uClamp3331ZA、AZ5A83-01B 、AZ8523-01B國產替代ESD0321CW

上海雷卯ESD二極管 ESD0321CW替代國外品牌型號uClamp3331ZA、AZ5A83-01B 、AZ8523-01B,參數對比如下: 判斷ESD二極管是否可以替代需注意的幾點: 1. VRWM 是否接近 2. 抗靜電能力是否接近; 3. VBR 是否接近; 4. IPP…

【小程序】首屏渲染優化

小程序首屏渲染優化對于提升用戶體驗以及減少用戶等待時間非常重要。下面我們來詳細解析小程序首屏渲染優化的相關技巧和方法,并結合代碼示例進行分析。 首先,我們需要了解小程序的渲染流程。小程序的渲染過程可以分為兩個階段:解析階段和布局…

Julia語言中的位運算符、賦值運算符、算術運算符

算術運算符 # 使用基本的賦值運算符 a 10 println("a 的初始值是: $a") # 使用加法賦值運算符 a 5 println("a 加上 5 后的值是: $a") # 使用減法賦值運算符 - a - 3 println("a 減去 3 后的值是: $a") # 使用乘法賦值運算符…

Mistral發布語言大模型Mistral Large;法國新星Mistral挑戰 OpenAI 霸主地位

🦉 AI新聞 🚀 Mistral發布語言大模型Mistral Large 摘要:Mistral Large 是 Mistral AI 公司最新發布的旗艦語言模型,具備頂尖水平的推理能力。它主要被設計用于處理復雜的多語言推理任務,比如文本理解、轉換和代碼生…

上位機圖像處理和嵌入式模塊部署(上、下位機通信的三個注意點)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 如果最終部署在客戶現場的是一個嵌入式設備,那么上位機在做好了算法編輯和算法部署之后,很重要的一步就是處理上位機和下位…

beets,一個有趣的 Python 音樂信息管理工具!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站AI學習網站。 目錄 前言 什么是Beet庫? 安裝Beet庫 使用Beet庫 Beet庫的功能特性 1. 多種音樂格式支持 2. 自動標簽識…

【學習筆記】數據結構與算法05:樹、層序遍歷、深度優先搜索、二叉搜索樹

知識出處:Hello算法:https://www.hello-algo.com/ 文章目錄 2.4 樹2.4.1 「二叉樹 binary tree」2.4.1.1 二叉樹基本操作2.4.1.2 二叉樹的常見類型「完美二叉樹 perfect binary tree」「完全二叉樹 complete binary tree」「完滿二叉樹 full binary tre…

H12-821_106

106.如圖所示,RTA的GEO/0/0、GEO/0/1接口分別連接部門1和2,其網段分別為10.1.2.0/24、10.1.3.0/24網段,為限制部門1和2之間的相互訪間,在RTA上部署traffic-filter,以下哪些部署方式是正確? A.配置ACL3000拒…

職場的過早優化

過早優化,指的是還沒弄清楚需求未來的變化的走向的時候,忽略了更重要的問題。 放在職業發展上:你在沒有積累足夠職場資源(眼界、能力、人脈等等),也沒有對職業發展形成清晰認知的時候,就過早地進…

【c++】構造函數(下)——初始化列表

Hello,everybody!構造函數的內容比較多,語法還有些復雜。我分成了兩篇文章進行講解,大家在看過構造函數(上)后再來看這篇文章更容易理解喲! 1.初始化列表的格式 類似這種格式,在初始化列表中第一行用冒號開頭,剩下的用…

力扣每日一題 使二叉樹所有路徑值相等的最小代價 滿二叉樹 貪心

Problem: 2673. 使二叉樹所有路徑值相等的最小代價 文章目錄 思路復雜度Code 思路 👨?🏫 靈神題解 復雜度 ? 時間復雜度: O ( n ) O(n) O(n) 🌎 空間復雜度: O ( 1 ) O(1) O(1) Code class Solution {public int minIncrements(int …

ai智能電銷機器人搭建需要注意什么?人工智能電話機器人源碼技術

電銷機器人的出現,讓越來越多的企業意識到了電銷機器人的好處,不僅提高了工作效率,也讓我們更省心,但我們在選擇電話機器人的時候應該注意看語音識別技術、看話術模板制造、還要看公司研制才能等。 一、電銷機器人的選擇要素 1、看…

拿金幣 藍橋杯ALGO1006 有一個N x N的方格,問如何走才能拿到最多的金幣

問題描述 有一個N x N的方格,每一個格子都有一些金幣,只要站在格子里就能拿到里面的金幣。你站在最左上角的格子里,每次可以從一個格子走到它右邊或下邊的格子里。請問如何走才能拿到最多的金幣。 輸入格式 第一行輸入一個正整數n。   以下n行描述該方格。金幣數保證是不超過…

Vue+SpringBoot打造無代碼動態表單系統

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 動態類型模塊2.2 動態文件模塊2.3 動態字段模塊2.4 動態值模塊 三、系統設計3.1 用例設計3.2 數據庫設計3.2.1 動態類型表3.2.2 動態文件表3.2.3 動態字段表3.2.4 動態值表 四、系統展示五、核心代碼5.1 查詢檔案類型5.…

通過vue實現左側樹狀右側的組件

隨著后臺管理項目的開發&#xff0c;左側樹狀&#xff0c;右側則為列表的需求越來越多&#xff0c;還有就是拆分該數組&#xff0c;只展示其中一個對象等需求。廢話不多說&#xff0c;直接上代碼 <template><div><el-row :gutter"20"><el-col …

(四)優化函數,學習速率與反向傳播算法--九五小龐

多層感知器 梯度下降算法 梯度的輸出向量表明了在每個位置損失函數增長最快的方向&#xff0c;可將它視為表示了在函數的每個位置向那個方向移動函數值可以增長。 曲線對應于損失函數。點表示權值的當前值&#xff0c;即現在所在的位置。梯度用箭頭表示&#xff0c;表明為了增…

GEE入門篇|圖像處理(三):閾值處理、掩膜和重新映射圖像

閾值處理、掩膜和重新映射圖像 本章前一節討論了如何使用波段運算來操作圖像&#xff0c; 這些方法通過組合圖像內的波段來創建新的連續值。 本期內容使用邏輯運算符對波段或索引值進行分類&#xff0c;以創建分類圖像。 1.實現閾值 實現閾值使用數字&#xff08;閾值&#xf…