【嵌入式系统—ARM指令集】快速了解
關聯文章:
一、【嵌入式ARM指令系統】CISC與RISC
二、【嵌入式系統原理及應用—軟件系統】實時操作系統(RTOS)
文章目錄
ARM指令集
1、ARM指令集格式
2、ARM指令集的特點
ARM匯編指令
1、ARM匯編指令的格式
2、ARM匯編指令用法
ARM指令集分為的五大類
ARM指令集
1、ARM指令集格式
ARM指令集(ARM920T的核(core)的指令集)的格式如下圖所示,可以看出,無論哪一種指令,長度都是32位,屬于典型的精簡指令集(RISC)。
2、ARM指令集的特點
(1)大多數指令可帶條件碼(Cond)執行;
(2)大多數指令帶后綴的(S)碼,即指令結果會影響標志位,有的指令帶鏈接(L)執行;
(3)大多數指令在單個周期內可執行完成。訪問存儲單元使用Load-store規范的方式。帶條件碼(Cond)的32位ARM指令的格式如圖1-9所示。
ARM匯編指令
1、ARM匯編指令的格式
<opcode> {<cond>}? {S} <Rd>,<Rn> {,<operand2>}其中,{ }表示可選項,
opcode:操作碼,
cond:條件碼,
S:影響 CPSR 程序狀態寄存器,
Rd:目標寄存器,
Rn:第一寄存器作為第一個操作數,
operand2:第二個操作數。
cond 條件碼 0000 = EQ-Z=1 (相等) 0001 = NE-Z=0 (不相等)0010 =HS/CS-C=1 (無符號數大于或等于) 0011 =L0/CC-C=l (無符號數小于)0100 = MI-N=1 (負數) 0101 =PL-N=0 (正數或零)0110 =VS-V=1 (溢出) 0111 = VC-V=0 (不)溢出1000 =HI-C=1且Z=0 (無符號數大于) 1001 =LS-C=0或Z=1 (無符號數小于或等于)1010 =GE-N=V (有符號數大于或等于) 1011 =LT-N!=V (有符號數小于) 1100 =GT-Z=0且N=V (有符號數大于) 1101 =LE-Z=1或N!=V (有符號數小于或等于)1110 =AL 無條件執行1111 =N 保留2、ARM匯編指令用法
下面通過簡單的例子說明ARM匯編指令用法:
ADDEQ RO,R1,R2;? ?//If zero flag is set,then RO=R1+R2ADDS RO,R1,R2;? ???//RO=R1+R2,并影響標志位.ADDEQS RO,R1,R2;? ? ? ?//如果CPSR的Z=1(即結果為0),則RO=R1+R2,并影響CPSR標志位.ARM指令集分為的五大類
ARM匯編指令集可分為以下五大類:
- (1)分支指令
- (2)數據處理指令
- (3)加載/存儲指令
- (4)協處理器指令
- (5)其他指令
最典型的例子簡述。
1、分支指令
不帶鏈接的分支指令:
B Label;帶鏈接的分支指令:
BL Label; //LR=PC+4, 記住返回地址2、數據處理指令
主要是算數運算,包括比較指令、邏輯運算和數據傳輸指令。
這些指令在reg里運行而不是在memory。它們一般都具有一個或兩個操作數,第一個操作數總是一個寄存器Rn,而第二個操作數通過移位器送給 ALU。
3、加載/存儲指令
ARM 的指令集屬于RISC,對存儲單元的訪問采用了規范的加載(Load)/存儲 (Store)方式。
比較重要的 Load/Store 命令有:
STMFD SP!,{R0-R12,LR,PC}; //將 R0-R12、LR、 PC 的內容存到 SP 指向的存儲空間中去(壓入堆棧)。 LDMFD SP!,{R0-R12,PC}; //將 SP 指向的存 儲空間的內容放入 ARM 中的 R0-R12、PC 中去(彈出堆棧)。這兩個命令在函數調用中非常有用,在 C 語言中調用一個函數生成的 ARM 匯編通常如下圖所示:
在 C 語言中調用一個函數生成的 ARM 匯編?
?
??
- 對于上面的指令集,到底怎么理解?
- ARM架構的指令集與常見的另一種x86架構的指令集有何不同?
↓↓可以看下面的這個視頻作為參考↓↓
ARM架構和CPU的x86架構有啥區別?指令集又是什么?
總結
以上是生活随笔為你收集整理的【嵌入式系统—ARM指令集】快速了解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL2008数据库可疑状态处理
- 下一篇: 20210122发文补充截图