日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ARM寄存器及功能介绍/R0-R15寄存器

發布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM寄存器及功能介绍/R0-R15寄存器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、ARM 寄存器組介紹

ARM 處理器一般共有 37 個寄存器,其中包括:

(1) 31 個通用寄存器,包括 PC(程序計數器)在內,都是 32 位的寄存器。
(2) 6 個狀態寄存器,都是 32 位的寄存器。
ARM 處理器共有 7 種不同的處理器模式:
用戶模式(User),快速中斷模式(FIQ),普通中斷模式(IRQ),管理模式(Svc),數據訪問中止模式(Abort),未定義指令中止模式(Und),系統模式(Sys),
在每一種處理器模式中有一組相應的寄存器。在任意一種處理器模式下,可見的寄存器包括 15 個通用寄存器(R0~R14)、一個或者二個狀態寄存器以及程序計數器(PC)。在所有的寄存器中,有些是各模式共用同一個物理寄存器,有些寄存器是各個模式自己擁有獨立的物理寄存器

其中 r0~r3 主要用于子程序間傳遞參數, r4~r11 主要用于保存局部變量,但在 Thumb 程序中,通常只能使用 r4~r7 來保存局部變量; r12 用作子程序間scratch 寄存器,即 ip 寄存器; r13 通常用做棧指針,即 sp; r14 寄存器又被稱為連接寄存器(lr),用于保存子程序以及中斷的返回地址; r15 用作程序計數器(pc),由于 ARM 采用了流水線機制,當正確讀取了 PC 的值后,該值為當前指令地址加 8 個字節,即 PC 指向當前指令的下兩條指令地址。

CPSR和SPSR都是程序狀態寄存器,其中SPSR是用來保存中斷前的CPSR中的值,以便在中斷返回之后恢復處理器程序狀態。
2.CPSR寄存器詳解

所有處理器模式下都可訪問當前程序狀態寄存器CPSR。CPSR中包含條件碼標志、中斷禁止位、當前處理器模式以及其他狀態和控制信息。在每種異常模式下都有一個對用的程序狀態寄存器SPSR。當異常出現時,SPSR用于保存CPSR的狀態,以便異常返回后恢復異常發生時的工作狀態。

(1)條件碼標志

N、Z、C、V,最高4位稱為條件碼標志。ARM的大多數指令可以條件執行的,即通過檢測這些條件碼標志來決定程序指令如何執行。

各個條件碼的含義如下:

N:在結果是有符號的二進制補碼情況下,如果結果為負數,則N=1;如果結果為非負數,則N=0。

Z:如果結果為0,則Z=1;如果結果為非零,則Z=0。

C:其設置分一下幾種情況:

對于加法指令(包含比較指令CMN),如果產生進位,則C=1;否則C=0。對于減法指令(包括比較指令CMP),如果產生借位,則C=0;否則C=1。對于有移位操作的非法指令,C為移位操作中最后移出位的值。對于其他指令,C通常不變。

V:對于加減法指令,在操作數和結果是有符號的整數時,如果發生溢出,則V=1;如果無溢出發生,則V=0;對于其他指令,V通常不發生變化。

(2)控制位的作用在圖1中可以看出,在這里就不闡述了。

二:CPSR與CPSR_c的區別

CPSR_c指的是CPSR的低8位控制位CPSR有4個8位區域:標志域(F)、狀態域(S)、擴展域(X)、控制域(C)MSR - Load specified fields of the CPSR or SPSR with an immediate constant, or from the contents of a general-purpose register.Syntax:MSR{cond} <psr>_<fields>, #immed_8r MSR{cond} <psr>_<fields>, Rm where: cond is an optional condition code. <psr> is either CPSR or SPSR. <fields> specifies the field or fields to be moved. <fields> can be one or more of:

c control field mask byte (PSR[7:0]) x extension field mask byte (PSR[15:8]) s status field mask byte (PSR[23:16) f flags field mask byte (PSR[31:24]). immed_8r is an expression evaluating to a numeric constant. The constant must correspond to an 8-bit pattern rotated by an even number of bits within a 32-bit word. Rm is the source register.

C 控制域屏蔽字節(psr[7:0])X 擴展域屏蔽字節(psr[15:8])S 狀態域屏蔽字節(psr[23:16])F 標志域屏蔽字節(psr[31:24])

常用于MRS或MSR指令,用于psr中的值轉移到寄存器或把寄存器的內容加載到psr中.
如:

MSR CPSR_c,#0xd3

三、R0-R15寄存器 根據“ARM-thumb 過程調用標準”:
R0-R3 用作傳入函數參數,傳出函數返回值。在子程序調用之間,可以將 r0-r3 用于任何用途。
被調用函數在返回之前不必恢復 r0-r3。如果調用函數需要再次使用 r0-r3 的內容,則它必須保留這些內容。
R4-R11 被用來存放函數的局部變量。如果被調用函數使用了這些寄存器,它在返回之前必須恢復這些寄存器的值。
R12 是內部調用暫時寄存器 ip。它在過程鏈接膠合代碼(例如,交互操作膠合代碼)中用于此角色。
在過程調用之間,可以將它用于任何用途。被調用函數在返回之前不必恢復 r12。
R13 是棧指針 sp。它不能用于任何其它用途。sp 中存放的值在退出被調用函數時必須與進入時的值相同。
R14 是鏈接寄存器 lr。如果您保存了返回地址,則可以在調用之間將 r14 用于其它用途,程序返回時要恢復
R15 是程序計數器 PC。它不能用于任何其它用途。
注意:在中斷程序中,所有的寄存器都必須保護,編譯器會自動保護R4~R11

總結

以上是生活随笔為你收集整理的ARM寄存器及功能介绍/R0-R15寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。