ARM寄存器

ARM處理器模式
用戶模式(User):ARM處理器正常的程序執行狀態
快速中斷模式(FIQ):用于高速數據傳輸或通道處理
外部中斷模式(IRQ):用于通用的中斷處理
管理模式(Supervisor):操作系統使用的保護模式
數據訪問終止模式(Abort):當數據或指令預取終止時進入該模式,可用于虛擬存儲及存儲保護
系統模式(System):運行具有特權的操作系統任務
未定義指令中止模式(Undifined):當未定義的指令執行時進入該模式,可用于支持硬件協處理器的軟件仿真


ARM寄存器
ARM共有37個32位寄存器,其中31個為通用寄存器,6個為狀態寄存器.這些寄存器不能被同時訪問,但在任何時候,

通用寄存器R0~R14,程序計數器PC,一個或兩個狀態寄存器都是可訪問的.
通用寄存器
通用寄存器包括R0~R15,可以分為3類:
(1)未分組寄存器R0~R7
(2)分組寄存器R8~R14
(3)程序計數器PC(R15)

ARM寄存器介紹

1.未分組寄存器R0~R7
在所有運行模式下,未分組寄存器都指向同一個物理寄存器,它們未被系統用作特殊的用途.因此在中斷或異常處理進行運行模式轉換時,由于不同的處理器運行模式均使用相同的物理寄存器,所以可能造成寄存器中數據的破壞.
2.分組寄存器R8~R14
對于分組寄存器,它們每一次所訪問的物理寄存器都與當前 處理器的運行模式有關.對于R8~R12來說,每個寄存器對應2個不同的物理寄存器,當使用FIQ(快速中斷模式)時,訪問寄存器 R8_fiq~R12_fiq;當使用除FIQ模式以外的其他模式時,訪問寄存器R8_usr~R12_usr.
對于R13,R14來說,每個寄存器對應6個不同的物理寄存器,其中一個是用戶模式與系統模式共用,另外5個物理寄存器對應其他5種不同的運行模式,并采用以下記號來區分不同的物理寄存器:
R13_mode
R14_mode
其中mode可為:usr,fiq,irq,svc,abt,und.
寄存器R13在ARM指令中常用作堆棧指針,用戶也可使用其他的寄存器作為堆棧指針,而在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針.

寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強制性的要求使用R13作為堆棧指針。
由于處理器的每種運行模式均有自己獨立的物理寄存器R13,在用戶應用程序的初始化部分,一般都要初始化每種模式下的R13,使其指向該運行模式的棧空間。這
樣,當程序的運行進入異常模式時,可以將需要保護的寄存器放入R13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復,采用這種方式可以保證異常發生后程序的正常執行。
R14稱為鏈接寄存器(Link Register),當執行子程序調用指令(BL)時,R14可得到R15(程序計數器PC)的備份.

在每一種運行模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值復制給R14,執行完子程序后,又將R14的值復制回PC,即可完成子程序的調用返回。以上的描述可用指令完成。
執行以下任意一條指令:
MOV PC, LR
BX LR
在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{,LR}
對應的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作為通用寄存器。
3.程序計數器PC(R15)
寄存器R15用作程序計數器(PC),在ARM狀態下,位[1:0]總為0,位[31:2]用于保存PC,在Thumb狀態下,位[0]為0,位[31:1]用于保存PC.
由于ARM體系結構采用了多級流水線技術,對于ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節
程序狀態寄存器

4.寄存器R16
寄存器R16用作CPSR(Current
Program Status Register,當前程序狀態寄存器),CPSR可在任何運行模式下被訪問,它包括條件標志位、中斷禁止位、當前處理器模式標志位,以及其他一些相關的控制和狀態位。
每一種運行模式下又都有一個專用的物理狀態寄存器,稱為SPSR(Saved Program Status Register,備份的程序狀態寄存器),當異常發生時,SPSR用于保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR。
由于用戶模式和系統模式不屬于異常模式,它們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的
ARM寄存器介紹


1).條件碼標志(condition code flags)
N,Z,C,V均為條件碼標志位,它們的內容可被算術或邏輯運算的結果所改變,并且可以決定某條指令是否被執行.
在ARM狀態下,絕大多數的指令都是有條件執行的,在Thumb狀態下,僅有分支指令是有條件執行的.
N(Number):當用兩個補碼表示的帶符號數進行運行時,N=1表示運行結果為負,N=0表示運行結果為正或零
Z:(Zero):Z=1表示運算結果為零,Z=0表示運行結果非零
C:(Come)加法運算:當運算結果產生了進位時C=1,否則C=0
減法運算:當運算產生了借位,C=0否則C=1
對于包含移位操作的非加/減運算指令 ,C為移出值的最后一位
對于其他的非加/減運算指令C的值通常不改變
V:(oVerflow)對于加/減法運算指令,當操作數和運算結果為二進制的被碼表示的帶符注意力時,V=1表示符號位溢出.對于其他的非加/減運算指令V的值通常不改變
2).控制位
PSR的低8位(包括I,F,T和M[4:0])稱為控制位,當發生異常時這些位可以被改變,如果處理器運行特權模式,這些位也可以由程序修改.
(1)中斷禁止位I,F
I=1 禁止IRQ中斷
F=1 禁止FIQ中斷
每一種運行模式下又都有一個專用的物理狀態寄存器稱為SPSR(Saved Program Status Register,備份的程序狀態寄存器)當異常發生時,SPSR可以保存CPSR的當前值,從異常退出時則可由SPSR來恢復CPSR.
由于用戶模式和系統模式不屬于異常模式,它們沒有SPSR當在這兩種模式下訪問SPSR時結果是未知的
Thumb狀態下程序可以直接訪問8個通用寄存器(R0~R7),程序計數器(PC),堆棧指針(SP:StackPointer),鏈接寄存器(LP:Link Register)和CPSR,同時在每一種特權模式下都有一組SP,LR和SPSR.


ARM指令導址方式
1.立即尋址(立即數尋址)
ADD R0,R0,#1 //R0<-R0+1
ADD R0,R0,#0x31 //R0<-R0+0x3f
立即數以"#"為前綴,對于以十六進制表示的立即數,還要求在"#"后加上"0x"前綴
2.寄存器尋址
ADD R0,R1,R2 //R0<-R1+R2
3.寄存器間接尋址
ADD R0,R1,[R2] //R0<-R1+[R2]
LDR R0,[R1]?

?? ?//R0<-[R1]
STR R0,[R1] //[R1]<-R0
4.基址變址尋址
LDR R0,[R1,#4] //R0<-[R1+4]
LDR R0,[R1,#4]! //R0<-[R1+4],R1<-R1+4
LDR R0,[R1,R2] //R0<-[R1+R2]
5.多寄存器尋址
LDMIA R0,[R1,R2,R3,R4] //R1<-[R0],R2<-[R0+4],R3<-[R0+8],R4<-[R0+12]
6.相對尋址
BL NEXT //跳轉到子程序NEXT處執行
......
NEXT
....
MOV PC,LR //從子程序返回

?

ARM體系中的存儲空間

ARM體系使用單—的平板地址空間。該地址空間的大小為232個8位字節。這些字節單元的地址是一個無符號的32位數值,其取值范圍為0到232—1。ARM的地址空間也可以看作是232個32位的字單元。這些字單元的地址可以被4整除,也就是說該地址的低兩位為0b00。地址為A的字數據包括地址為A、A+I、A+2、A+34個字節單元的內容。
在ARM版本4及以上的版本中,ARM的地址空間也可以看作是231個16位的半字單元。這些半字單元的地址可以被2整除,也就是說該地址的最低位為0b0。地址為A的半字數據包括地址為A、A+1兩個字節單元的內容。
各存儲單元的地址作為32位的無符號數,可以進行常規的整數運算。這些運算的結果進行232取模。也就是說,運算結果發生上溢出和下溢出時,地址將會發生卷繞。

ARM存儲器格式

在ARM體系中,每個字單元中包含4個字節單元或者兩個半字單元:1個半字單元中包含兩個字節單元。但是在字單元中,4個字節哪一個是高位字節,哪一個是低位字節則有兩種不同的格式:big-endian格式和little-endian格式。在big-endian格式中,對于地址為A的字單元包括字節單元A、A+1、A+2及A+3,其中字節單元由高位到低位字節順序為A、A+1、A+2、A+3;地址為A的字單元包括半字單元A、A+2,其中半字單元由高位到低位字節順序為A、A+2:地址為A的半字單元包括字節單元A、A+1,其中字節單元由高位到低位字節順序為A、A+1。??

在 little-endian格式中,地址為A的字單元包括字節單元A、A+1、A+2及A+3,其中字節單元由高位到低位字節順序為A+3、A+2、 A+1、A;地址為A的字單元包括半字節單元A、A+2,其中半字單元由高位到低位字節順序為A+2、A;地址為A的半字單元包括字節單元A、A+1,其 中字節單元由高位到低位字節順序為A+1、A

轉載于:https://www.cnblogs.com/ht-beyond/p/4247860.html

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

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

相關文章

修改shape數據 小數位數_【數據管理】Excel實用精華

點擊上方藍字關注星標★不迷路來源&#xff1a;從Excel小白到數據分析師這是一篇關于Excel中的小技巧但是都是精華&#xff0c;文中附有操作視屏簡單易學上手快噢&#xff01;01添加數據有效性_名稱管理器數據有效性是對單元格或單元格區域輸入的數據從內容到數量上的限制。對于…

刪除win10自帶的軟件

第一步&#xff1a;開始→所有程序→WindowsPowershell→然后右鍵以管理員方式運行 全部應用&#xff1a; Get-AppxPackage | Remove-AppxPackage 計算器&#xff1a; Get-AppxPackage calculator | Remove-AppxPackage 地圖&#xff1a; Get-AppxPackage map | Remove-A…

ubuntu解壓zip文件亂碼問題

我的zip文件里的內容是有中文名&#xff0c;也有密碼&#xff0c;在網上找到幾種解決辦法只有一種可以&#xff0c;所以在這里記錄一下&#xff1a; 首先是安裝7zip來解壓&#xff0c;7zip的解決辦法在這里&#xff0c;但是無法解決我的問題&#xff0c;仍然有亂碼問題 最后是在…

ICMP:Internet控制報文協議

ICMP&#xff1a;Internet控制報文協議。是IP層的組成部分。傳遞差錯報文或其他信息。 ICMP報文被封裝在IP數據報內部&#xff1a;詳細格式例如以下所看到的&#xff1a;個字段含義例如以下&#xff1a;8位類型。表示該ICMP報文的含義&#xff0c;如目的不可達、超時、請求回顯…

貝葉斯優化python包_貝葉斯全局優化(LightGBM調參)

這里結合Kaggle比賽的一個數據集&#xff0c;記錄一下使用貝葉斯全局優化和高斯過程來尋找最佳參數的方法步驟。1.安裝貝葉斯全局優化庫從pip安裝最新版本pip install bayesian-optimization2.加載數據集import pandas as pdimport numpy as npfrom sklearn.model_selection im…

PL/SQL 語言 一

Declarea Varchar2(20);b Number(10);c Number(10);m Number(5);sname Varchar2(20);nozero Exception;Begina : 小明;Dbms_Output.Put_Line(a);b : 3;c : 0;/* 循環 */ /* m :50;Loop Exit When m<0;dbms_output.put_line(m);m : m-1;End Loop; *//* While m>0Loop…

OpenCV人臉檢測

由于光照、遮擋和傾斜等原因&#xff0c;部分人臉和眼睛并不能正確檢測。。 // 簡單的人臉檢測#include <iostream> #include <vector> #include <opencv2\opencv.hpp> #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgu…

分離圓環圖顯示百分比_Tableau制作圓環圖

Tableau圓環圖制作 聲明&#xff1a;本文內容來源拉勾教育數據分析訓練營&#xff0c; 封面圖片來源pexels網站圓環圖制作過程如下&#xff1a;建立餅圖2. 設置記錄平均值3. 在第二個字段的下拉菜單中選擇雙軸4. 點擊右側坐標軸&#xff0c;右鍵選擇同步軸&#xff08;同步軸指…

FLEX 布局

網頁布局&#xff08;layout&#xff09;是CSS的一個重點應用。 布局的傳統解決方案&#xff0c;基于盒狀模型&#xff0c;依賴 display屬性 position屬性 float屬性。它對于那些特殊布局非常不方便&#xff0c;比如&#xff0c;垂直居中就不容易實現。 2009年&#xff0c;W3…

SpiderMonkey-讓你的C++程序支持JavaScript腳本

譯序 有些網友對為什么D2JSP能執行JavaScript腳本程序感到奇怪&#xff0c;因此我翻譯了這篇文章&#xff0c;原文在這里。這篇教程手把手教你怎樣利用SpiderMonkey創建一個能執行JavaScript腳本的C程序&#xff0c;并讓JavaScript腳本操縱你的C程序的內部數據、操作。從這篇教…

Android 虛擬機學習總結Dalvik虛擬機介紹

1、Dalvik虛擬機與Java虛擬機的最顯著差別是它們分別具有不同的類文件格式以及指令集。Dalvik虛擬機使用的是dex&#xff08;Dalvik Executable&#xff09;格式的類文件&#xff0c;而Java虛擬機使用的是class格式的類文件。一個dex文件能夠包括若干個類。而一個class文件僅僅…

des vue 加密解密_vue DES 加密

ECB模式import cryptoJs from crypto-js// DES加密export const encryptDes (message, key) > {var keyHex cryptoJs.enc.Utf8.parse(key)var option { mode: cryptoJs.mode.ECB, padding: cryptoJs.pad.Pkcs7 }var encrypted cryptoJs.DES.encrypt(message, keyHex, op…

使用jQuery清空表單

$(#theform)[0].reset(); reset()這個函數的作用是將表單的值重置&#xff0c;變為默認值&#xff0c; 例&#xff1a; <input type"text" value"姓名"> 這個標簽的默認值就是”姓名“&#xff0c;如果使用上面的方法&#xff0c;就會重置為“姓名”…

MobX快速入門教程(重要概念講解)

轉載請注明原文地址&#xff1a;http://www.cnblogs.com/ygj0930/p/7372119.html 一&#xff1a;Mobx工作流程圖 二&#xff1a;MobX涉及到的概念 1:狀態state 組件中的數據。 2:被觀察observable 被observable修飾的state數據將會暴露給整個app&#xff0c;各觀察者組件都可以…

CentOS工作內容(七)禁用IPV6

CentOS工作內容&#xff08;七&#xff09;禁用IPV6 用到的快捷鍵 tab 自動補齊(有不知道的嗎) ctrla 移動到當前行的開頭(a ahead) ctrle 移動到當前行的開頭(e end) ctrlu 刪除(剪切)此處至開始所有內容 復制進來&#xff1a;按一下鼠標右鍵粘貼到SercureCRT 復制出去&#x…

循環結束后變回去 設置一個值_VBA掌握循環結構,包你效率提高500倍

這是系列免費教程《Excel VBA&#xff1a;辦公自動化》&#xff0c;還是老規矩&#xff0c;看看我們走到哪里了。1.認識VBA&#xff1a;什么是VBA&#xff1f;2.這些掌握了&#xff0c;你才敢說自己懂VBA3.VBA變量5年踩坑吐血精華總結4.VBA中重要的強制申明&#xff0c;誰看誰明…

連接到kali linux服務器上的MySQL服務器錯誤

前言&#xff1a;想把數據庫什么的都放在虛擬機kali Linux里&#xff0c;但無奈出了好多錯誤。 首先&#xff1a;可以參照上一篇文章開啟kali服務器端的遠程連接功能&#xff0c;上一篇文章 然后&#xff1a;使用window端的sqlyog&#xff08;MySQL圖形化連接工具&#xff09;連…

dedecms后臺怎么添加發布軟件?織夢后臺軟件內容管理

使用織夢cms有很多的功能&#xff0c;其中有一個是在dedecms后臺添加發布軟件&#xff0c;然后在前臺大家可以直接下載軟件&#xff0c;在織夢cms后臺怎么添加發布軟件呢&#xff1f;下面是織夢軟件內容管理的主要操作步驟。使用織夢cms有很多的功能&#xff0c;其中有一個是在…

301 302區別_如何正確理解301,302和canonial標簽

今天我們來學習一下幾個比較容易混淆的頁面跳轉標簽&#xff0c;301&#xff0c;302&#xff0c;relcanonial。在谷歌SEO里面&#xff0c;我們比較容易常見的是第一個301&#xff0c;302和canonial出現的比較少&#xff0c;但是不代表不存在&#xff0c;我會嘗試從以下價格方面…

ffmpeg文檔08-表達式計算/求值

8 表達式計算/求值 在計算表達式時&#xff0c;ffmpeg通過libavutil/eval.h接口調用內部計算器進行計算。 表達式可以包含一元運算符、運算符、常數和函數 兩個表達式expr1和expr2可以組合起來成為"expr1;expr2" &#xff0c;兩個表達式都會被計算&#xff0c;但是新…