BX Rm 帶狀態切換的跳轉指令 PC
4)ARM協處理器指令
1,CDP 通知ARM協處理器執行特定的操作
2,LDC 從某一連續的內存單元將數據讀取到協處理器的寄存器中
LDC p5, c2, [R2, #4] //讀取R2+4指向內存單元的數據傳送到協處理器p5的c2寄存器中
3,STC 將協處理器的寄存器數據寫入到某一連續的內存單元中
4,MCR 將ARM處理器的寄存器中的數據傳送到協處理器的寄存器中。
5,MRC 將協處理器的寄存器中的數據傳送到ARM處理器的寄存器中。
5)ARM雜項指令
SWI immediately——24 軟中斷指令 處理器進入管理模式
MRS Rd, psr 讀狀態寄存器指令
MSR psr_fields, Rd/#immed_8r 寫狀態寄存器指令
6)ARM偽指令
ADR偽指令 小範圍的地址讀取偽指令,用於將PC相對偏移的地址值讀取到寄存器中。
ADRL偽指令 中等範圍的地址讀取偽指令,用於將PC相對偏移的地址值或基於寄存器相對偏移的地址值讀取到寄存器中。
LDR偽指令 大範圍的地址讀取偽指令,用於加載32位的立即數或一個地址到指定寄存器中。
NOP偽指令 空操作偽指令
ARM彙編程序由機器指令, 偽指令和宏指令組成,偽指令不像機器指令那樣在處理器運行期間由機器執行,而是由彙編程序
對源程序處理。
1)符號定義偽指令
GBLA全局的算術變量初始化為0 LCLA 局部的 SETA 賦值
GBLL全局的邏輯變量初始化為false LCLL 局部的 SETL 賦值
GBLS全局的字符串變量初始化空 LCLS 局部的 SETS 賦值
ARM處理器共有 37個寄存器。其中包括:
**31個通用寄存器,包括程序計數器(PC)在內。這些寄存器都是32位寄存器。
**6個狀態寄存器。這些寄存器也是32位寄存器。
ARM處理器共有7種不同的處理器模式,每一種模式中都有一組相應的寄存器組。在任何時刻,可見的寄存器包括15個通用寄存器
(R0-R14),一個或兩個狀態寄存器及程序計數器(PC)。在所有的寄存器中,有些是各模式公用一個物理寄存器,有一些寄存
器各模式擁有自己獨立的物理寄存器。
****************************************************
通用寄存器 ARM
通用寄存器分為以下三類:備份寄存器、未備份寄存器、程序計數器PC
備份寄存器
對於R8-R12備份寄存器來說,每個寄存器對應兩個不同的物理寄存器。系統為將備份寄存器用於任何的非凡用途,但是
當中斷處理非常簡單,僅僅使用R8-R14寄存器時,FIQ處理程序可以不必執行保存和恢復中斷現場的指令,從而可以使中
斷處理非常迅速。 ARM
對於R13,R14備份寄存器來說,每個寄存器對應六個不同的物理寄存器,其中的一個是系統模式和用戶模式共用的;另外
的五個對應於其他的五種處理器模式。採用下面的記號來區分各個物理寄存器:
R13_ 字串5
其中MODE可以是下面幾種模式之一:usr,svc,abt,und,irq,fiq
字串5
未備份寄存器
未備份寄存器包括R0-R7。對於每一個未備份寄存器來說,所有處理器模式下都是使用同一個物理寄存器。未備份寄存器
沒有被系統用於非凡的用途,任何可採用通用寄存器的場合都可以使用未備份寄存器。
程序計數器PC
可以作為一般的通用寄存器使用,但有一些指令在使用R15時有一些限制。由於ARM採用了流水線處理器機制,當正確讀取
了PC的值時,該值為當前指令地址值加上8個字節。也就是說,對於ARM指令集來說,PC指向當前指令的下兩條指令的地址。
由於ARM指令是字對齊的,PC值的第0位和第一位總為0。
需要注意的是,當使用str/stm保存R15時,保存的可能是當前指令地址值加8個字節,也可能保存的是當前指令地址值加12
個字節。到底哪種方式取決於晶片的具體設計。對於用戶來說,儘量避免使用STR/STM指令來保存R15的值。
當成功的向R15寫入一個數值時,程序將跳轉到該地址執行。由於ARM指令是字對齊的,寫入R15的值應滿足bits[1:0]為0b00
,具體要求arm個版本有所不同:
**對於arm3以及更低的版本,寫入R15的地址值bits[1:0]被忽略,即寫入r15的地址值將與0xFFFF FFFC做與操作。
**對於ARM4以及更高的版本,程序必須保證寫入R15的地址值bits[1:0]為0b00,否則將產生不可預知的後果。
對於Thumb指令集來說,指令是班子對齊的,處理器將忽略bit[0]。