一篇總結 Linux 系統啟動的幾個匯編指令

學習 Linux 系統啟動流程,必須熟悉幾個匯編指令,總結給大家。

這里不是最全的,只列出一些最常用的匯編指令。

一.數據處理指令

1.數據傳送指令

【MOV指令】

把一個寄存器的值(立即數)賦給另一個寄存器,或者將一個常量賦給寄存器。

MOV指令的格式為:

MOV 目的寄存器,源操作數MOV R1,R0   ;將寄存器R0的值傳送到寄存器R1

2.算術運算指令

(1)【加法指令】:ADD

ADD 目的寄存器,操作數1,操作數2

ADD指令用于把兩個操作數相加,并將結果存放到目的寄存器中。

ADD  R0,R1,R2   ;R0 = R1 + R2
ADD  R0,R1,#256   ;R0 = R1 + 256

(2)【帶進位的加法指令】:ADC

ADC 目的寄存器,操作數1,操作數2

ADC指令用于把兩個操作數相加,再加上CPSR中的C條件標志位的值,并將結果存放到目的寄存器中。

(3)【減法指令】:SUB

SUB 目的寄存器,操作數1,操作數2

把操作數1減去操作數2,并將結果存放到目的寄存器中。

SUB  R0,R1,R2  ;R0 = R1 - R2
SUB  R0,R1,#256  ;R0 = R1 - 256

3.比較指令

(1)【直接比較指令】:CMP

CMP  操作數1,操作數2CMP R1,R0;將寄存器R1的值與寄存器R0的值相減,并根據結果設置CPSR的標志位
CMP R1,#100;將寄存器R1的值與立即數100相減,并根據結果設置CPSR的標志位

4.邏輯運算指令

(1)【邏輯與指令】:AND

AND  目的寄存器,操作數1,操作數2

AND 指令用于在兩個操作數上進行邏輯與運算,并把結果放置到目的寄存器中。

AND  R0,R0,#3 ; 該指令保持R0的0、1位,其余位清零。

(2)【邏輯或指令】:ORR

ORR 目的寄存器,操作數1,操作數2

ORR 指令用于在兩個操作數上進行邏輯或運算,并把結果放置到目的寄存器中。

ORR  R0,R0,#3 ; 該指令設置R0的0、1位,其余位保持不變。

二.轉移指令

【跳轉指令】

B   跳轉指令
BL  帶返回的跳轉指令
BLX 帶返回和狀態切換的跳轉指令
BX  帶狀態切換的跳轉指令

三.程序狀態寄存器訪問指令

1、【MRS指令】

MRS 通用寄存器,程序狀態寄存器(CPSR或SPSR)MRS R0,CPSR   ;傳送CPSR的內容到R0
MRS R0,SPSR   ;傳送SPSR的內容到R0

2、【MSR指令】

MSR 程序狀態寄存器(CPSR或SPSR)_<域>,操作數MSR CPSR,R0   ;傳送R0的內容到CPSR
MSR SPSR,R0   ;傳送R0的內容到SPSR

?資料直通車:Linux內核源碼技術學習路線+視頻教程內核源碼

學習直通車:Linuxc/c++高級開發【直播公開課】

零聲白金VIP體驗卡:零聲白金VIP體驗卡(含基礎架構/高性能存儲/golang/QT/音視頻/Linux內核)

四.加載/存儲指令

ARM 微處理器支持加載/存儲指令用于在寄存器和存儲器之間傳送數據,加載指令用于將存儲器中的數據傳送到寄存器,存儲指令則完成相反的操作。

1、【LDR指令】

LDR 目的寄存器,<存儲器地址>

LDR指令用于從存儲器中將一個32位的字數據傳送到目的寄存器中。

LDR  R0,[R1]  ;將存儲器地址為R1的字數據讀入寄存器R0。
LDR  R0,[R1,R2]  ;將存儲器地址為R1+R2的字數據讀入寄存器R0。
LDR  R0,[R1,#8]  ;將存儲器地址為R1+8的字數據讀入寄存器R0。
LDR  R0,[R1,R2] ! ;將存儲器地址為R1+R2的字數據讀入寄存器R0,并將新地址R1+R2寫入R1。
LDR  R0,[R1,#8] ! ;將存儲器地址為R1+8的字數據讀入寄存器R0,并將新地址R1+8寫入R1。

LDRB 和 LDRH 指令大家可以百度。

2、【STR指令】

STR 源寄存器,<存儲器地址>

STR指令用于從源寄存器中將一個32位的字數據傳送到存儲器中。該指令在程序設計中比較常用,且尋址方式靈活多樣,使用方式可參考指令LDR。

STR R0,[R1],#8 ;將R0中的字數據寫入以R1為地址的存儲器中,并將新地址R1+8寫入R1。
STR R0,[R1,#8] ;將R0中的字數據寫入以R1+8為地址的存儲器中。

STRB 和 STRH指令大家可以百度。

五.異常產生指令

1、【SWI指令】

SWI 24位的立即數

SWI指令用于產生軟件中斷,以便用戶程序能調用操作系統的系統例程。

SWI  0x02 ;該指令調用操作系統編號位02的系統例程。

2、【BKPT指令】

BKPT   16位的立即數

BKPT指令產生軟件斷點中斷,可用于程序的調試。

六.偽代碼

1.【AREA】

一個匯編程序至少要包含一個段,當程序太長時,也可以將程序分為多個代碼段和數據段,因此在匯編程序的開頭,我們一般的語句會用到AREA。

AREA 段名 屬性 1 ,屬性 2 ,....  AREA Init ,CODE ,READONLY ;定義一個代碼段,段名為 Init ,屬性為只讀。 

2、【ALIGN】

ALIGN { 表達式 { ,偏移量 }}    

ALIGN?偽指令可通過添加填充字節的方式,使當前位置滿足一定的對其方式。其中,表達式的值用于指定對齊方式,可能的取值為2的冪,如?1?、2?、4?、8?、16?等。eg : xxx = ALIGN(4)

3、【CODE16、CODE32】

CODE16 (或 CODE32 )

CODE16?偽指令通知編譯器,其后的指令序列為?16?位的?Thumb?指令。

CODE32?偽指令通知編譯器,其后的指令序列為?32?位的?ARM?指令。

4、【ENTRY】

ENTRY  ENTRY(stext)  

很常見!!!ENTRY?偽指令用于指定匯編程序的入口點。在一個完整的匯編程序中至少要有一個?ENTRY?(也可以有多個,當有多個?ENTRY?時,程序的真正入口點由鏈接器指定),但在一個源文件里最多只能有一個?ENTRY?(可以沒有)。

5、【END】

END      

END?偽指令用于通知編譯器已經到了源程序的結尾。

原文作者:一起學嵌入式

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

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

相關文章

Python---函數的參數類型

位置參數 理論上&#xff0c;在函數定義時&#xff0c;我們可以為其定義多個參數。但是在函數調用時&#xff0c;我們也應該傳遞多個參數&#xff0c;正常情況&#xff0c;其要一一對應。 相關鏈接&#xff1a;Python---函數的作用&#xff0c;定義&#xff0c;使用步驟&…

opencv 常用操作指南

1.通道交換 讀取圖像&#xff0c;然后將RGB通道替換成BGR通道&#xff0c;需要注意的是&#xff0c;opencv讀取的圖像默認是BGR。cv2.cvtColor函數可以參考Color Space Conversions img cv2.imread(imori.jpg) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) cv2.imwrite(answe…

1|1111

1、指定在每天凌晨4&#xff1a;00將該時間點之前的系統日志信息&#xff08;/var/log/messages &#xff09;備份到目錄下/backup&#xff0c;備份后日志文件名顯示格式logfileYY-MM-DD-HH-MM 2、配置ssh免密登陸&#xff1a;客戶端主機通過redhat用戶基于秘鑰驗證方式進行遠…

微服務實戰系列之Nginx

前言 Nginx&#xff1f;寫了那么多文章&#xff0c;為什么今天才輪到它的表演&#xff1f;那是因為它實在太重要了&#xff0c;值得大書特書&#xff0c;特別對待。 當我們遇到單點瓶頸&#xff0c;第一個idea是&#xff1f;Nginx&#xff1b; 當我們需要反向代理&#xff0c;…

機器學習/sklearn筆記:MeanShift

1 算法介紹 一種基于質心的算法通過更新候選質心使其成為給定區域內點的均值候選質心的位置是通過一種稱為“爬山”技術迭代調整的&#xff0c;該技術找到估計的概率密度的局部最大值 1.1 基本形式 給定d維空間的n個數據點集X&#xff0c;那么對于空間中的任意點x的均值漂移…

C#,《小白學程序》第一課:初識程序,變量,數據與顯示

曰&#xff1a;掃地僧練就絕世武功的目的是為了掃地更干凈。 1 引言 編程只是一項技術&#xff0c;如包包子&#xff0c;不是什么高深的科學。 學習程序最不好的方法是先學習枯燥的語法。 學習程序主要是用代碼解決問題。因此&#xff0c;我們拋開所有的語法與諸多廢物&…

React項目中發生空白但不報錯的原因分析和解決?

文章目錄 前言組件渲染問題狀態管理問題異步操作問題代碼錯誤但未拋出異常如果我們使用的是chorme瀏覽器的話&#xff0c;可以下載一個開發者工具&#xff0c;例如下圖&#xff1a;代碼審查使用調試工具日志和輸出檢查外部依賴異步操作終極大法&#xff0c;不到萬不得已不可以使…

python+gurobi求解線性規劃、整數規劃、0-1規劃

文章目錄 簡單回顧線性規劃LP整數規劃IP0-1規劃 簡單回顧 線性規劃是數學規劃中的一類最簡單規劃問題&#xff0c;常見的線性規劃是一個有約束的&#xff0c;變量范圍為有理數的線性規劃。如&#xff1a; 使用matlab的linprog函數即可求解簡單的線性規劃問題&#xff0c;可以參…

【Python 訓練營】N_6 求素數

題目 判斷101-200之間有多少個素數&#xff0c;并輸出所有素數。 分析 判斷素數的方法&#xff1a;用一個數分別去除2到sqrt(這個數)&#xff0c;如果能被整除&#xff0c;則表明此數不是素數&#xff0c;反之是素數。 答案 h 0 leap 1 from math import sqrt from sys …

2023亞太地區數學建模C題思路模型代碼論文

C題的參考思路: 1&#xff0c;問題1的思路: 確定研究問題的主要指標體系(新能源電車的售出數量、安全性指標、充電樁數目、電池續 航里程等)&#xff0c;收集指標的對應數據&#xff0c;檢驗數據是否服從正態性: 若服從正態分布: 0&#xff0c;可考慮優先采用“多元方差分析”模…

Python推導式

python推導式是一種獨特的數據處理方式&#xff0c;可以從一個數據序列構建到另一個新的數據序列的結構體。 Python支持各種數據結構的推導式&#xff1a; 1. 列表&#xff08;list&#xff09;推導式 [表達式 for 變量 in 列表] [out_exp_res for out_exp in input_list] or …

【?用運算放大器設計恒流電流源電壓4V-74V適應范圍 ?】2021-11-29

緣由用運算放大器設計恒流電流源-編程語言-CSDN問答直流恒流源設計&#xff0c;要求用到運算放大器-硬件開發-CSDN問答求助恒流驅動電路&#xff0c;運放端口電壓的問題&#xff1f; - 電路設計論壇 - 電子技術論壇 - 廣受歡迎的專業電子論壇!(不能實現恒流壞的電路設計反面例子…

OpenCV快速入門:特征點檢測與匹配

文章目錄 前言一、角點檢測1.1 角點特征1.1.1 角點特征概念1.1.2 角點的特點1.1.3 關鍵點繪制代碼實現1.1.4 函數解析 1.2 Harris角點檢測1.2.1 Harris角點檢測原理1.2.2 Harris角點檢測公式1.2.3 代碼實現1.2.4 函數解析 1.3 Shi-Tomasi角點檢測1.3.1 Shi-Tomasi角點檢測原理1…

GIT,解決遠程分支沖突

背景&#xff1a;當遠程分支A 與maste 有沖突如何解決–此時無法在這兩個版本之間merge 1、切換到master分支&#xff1a; git checkout master 2、更新master分支代碼&#xff1a; git pull 3、再次切換到自己新建的分支&#xff1a; git checkout add_login_check_func 4、將…

SuperMap iDesktopX如何獲取簡單線的起終端點及坐標

作者&#xff1a;超圖研究院技術支持中心-于丁 SuperMap iDesktopX如何獲取簡單線的起終端點及坐標 在GIS行業應用中&#xff0c;線數據的端點坐標有非常多的用處。 定位和可視化&#xff1a;線數據端點坐標可以用于定位和可視化線要素在空間中的位置。這對于地圖制作、規劃和…

初識Linux(1),看了這篇文章,媽媽再也不用擔心我Linux找不到門了。

文章目錄 前言1. ls 指令例如&#xff1a;只顯示文件名屬性ls顯示文件詳細屬性 ls - l 該操作可以簡寫成ll查看隱藏文件ls -l -a 2.pwd例如&#xff1a;顯示當前目錄所處的路徑類似于windows如下操作: 3.cd 指令例如&#xff1a;改變工作目錄相當于windows如下操作 4.whoami 指…

html幸運大轉盤抽獎(附源碼)

文章目錄 1.設計來源1.1 幸運大轉盤 風格11.2 幸運大轉盤 風格21.3 幸運大轉盤 風格31.4 幸運大轉盤 獎品效果1.5 幸運大轉盤 活動未開始1.6 幸運大轉盤 活動已結束1.7 幸運大轉盤 圖片源素材 2.效果和源碼2.1 動態效果2.2 源代碼 源碼下載 作者&#xff1a;xcLeigh 文章地址&a…

Windows power shell for循環

有時候需要重復執行某個shell命令 for($i1;$i -lt 10;$i$i1){echo $i}如果是cmd for /l %i in (1,1,5) do echo %i

vue 使用vuex中的data數據引用問題

先上代碼&#xff1a; this.userRoleInfo2 this.$store.state.userInfo this.userRoleInfo2.name 111 this.userRoleInfo2.orgName 222 this.userRoleInfo2.orgId 4444問題描述&#xff1a; 博主&#xff0c;定義了一個變量userRoleInfo2來接收了 從vuex中獲取了userInfo…

卷積神經網絡(Inception V3)識別手語

文章目錄 一、前言二、前期工作1. 設置GPU&#xff08;如果使用的是CPU可以忽略這步&#xff09;2. 導入數據3. 查看數據 二、數據預處理1. 加載數據2. 可視化數據3. 再次檢查數據4. 配置數據集 三、構建Inception V3網絡模型1.自己搭建2.官方模型 五、編譯六、訓練模型七、模型…