熱議:嵌入式:ARM指令集分類及編碼

2022-12-15 12:17:21 來源:51CTO博客

ARM指令集是32位的,程序的啟動都是從ARM指令集開始。主要是以下三個方面:


(資料圖片)

指令分類及指令格式條件執行指令集編碼

指令分類及指令格式

ARM指令使用的基本格式如下:〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉}< > 是必須項 , {}是可選項

指令格式中符號說明:

opcode操作碼;指令助記符,如ADD、STR等。cond可選的條件碼;執行條件,如EQ、NE等。S可選后綴;若指定“S”,則根據指令執行結果更新CPSR中的條件碼。Rd目標寄存器。Rn存放第1操作數的寄存器。op2第2個操作數。

立即數操作

在數據處理指令中,第二操作數除了可以是寄存器,還可以是一個立即數。如果我們只是希望把一個常數加到寄存器,而不是兩個寄存器相加,我們可以用立即數值取代第二操作數,如下面例子。立即數用前面加一個“#”的數值常量來表示。ADD R3, r3,#1 ;r3 := r3 + 1AND R8, r7,#& ff ;r8 := r7[7:0]

寄存器移位操作

在ARM數據處理指令中,第二操作數還有一種特有的形式-寄存器移位操作,即允許第二個寄存器操作數在同第一操作數運算之前完成移位操作,例如:ADD r3, r2,r1,LSL #3 ;r3:=r2 + 8 × r1

設置條件碼

ARM的任何數據處理指令都能通過增加“S”操作碼來設置條件碼(N,Z,C和V)數據處理指令加了“S”后,算術操作(在此包含CMP和CMN)根據算術運算的結果設置所有的標志位

CPSR和SPSR的格式

條件域表1
條件域表2

條件執行

所有的ARM指令集都可以是有條件執行的。ARM指令根據CPSR中的條件位自動判斷是否執行指令,在條件滿足時,指令執行,否則指令被忽略。在ARM的指令編碼表中,統一占用編碼的最高四位[31:28]來表示“條件碼”(即“cond”)。

條件轉移

轉移

解釋

一般應用

BBAL

無條件的總是

總是執行轉移總是執行轉移

BEQ

相等

比較的結果為相等或零

BNE

不等

比較的結果為不等或非零

BPL

結果為正數或零

BMIBCC

無進位

結果為負數算術操作未得到進位

BLO

低于

無符號數比較,結果為低于

BCSBHS

有進位高于或相等

算術操作得到了進位無符號數比較,結果為高于或相等

BVC

無溢出

有符號整數操作,未出現溢出

BVS

有溢出

有符號整數操作,出現溢出

BGT

大于

有符號整數比較,結果為大于

BGE

大于或相等

有符號整數比較,結果為大于或相等

BLT

小于

有符號整數比較,結果為小于

BLE

小于或相等

有符號整數比較,結果為小于或相等

BHI

高于

無符號數比較,結果為高于

BLS

低于或相等

無符號數比較,結果為低于或相等

ARM指令集編碼

ARM指令集是以32位二進制編碼的方式給出的,大部分的指令編碼中定義了第一操作數、第二操作數、目的操作數、條件標志影響位以及每條指令所對應的不同功能實現的二進制位。每條32位ARM指令都具有不同的二進制編碼方式,和不同的指令功能相對應 。編碼表如下:

參考文獻:

孟祥蓮.嵌入式系統原理及應用教程(第2版)[M].北京:清華大學出版社,2017.

標簽: 無符號數 數據處理 指令格式

上一篇:es磁盤使用為啥這么不均勻
下一篇:C語言-操作符詳解