ARM指令集是32位的,程序的啟動都是從ARM指令集開始。主要是以下三個方面:
- 指令分類及指令格式
- 條件執(zhí)行
- 指令集編碼
指令分類及指令格式
ARM指令使用的基本格式如下:
〈opcode〉{〈cond〉} {S} 〈Rd〉,〈Rn〉{,〈operand2〉}
< > 是必須項(xiàng) , {}是可選項(xiàng)
指令格式中符號說明:
opcode操作碼;指令助記符,如ADD、STR等。
cond 可選的條件碼;執(zhí)行條件,如EQ、NE等。
S 可選后綴;若指定“S”,則根據(jù)指令執(zhí)行結(jié)果更新CPSR中的條件碼。
Rd 目標(biāo)寄存器。
Rn 存放第1操作數(shù)的寄存器。
op2 第2個操作數(shù)。
立即數(shù)操作
在數(shù)據(jù)處理指令中,第二操作數(shù)除了可以是寄存器,還可以是一個立即數(shù)。如果我們只是希望把一個常數(shù)加到寄存器,而不是兩個寄存器相加,我們可以用立即數(shù)值取代第二操作數(shù),如下面例子。立即數(shù)用前面加一個“#”的數(shù)值常量來表示。
ADD R3, r3,#1 ;r3 := r3 + 1
AND R8, r7,#& ff ;r8 := r7[7:0]
寄存器移位操作
在ARM數(shù)據(jù)處理指令中,第二操作數(shù)還有一種特有的形式-寄存器移位操作,即允許第二個寄存器操作數(shù)在同第一操作數(shù)運(yùn)算之前完成移位操作,例如:
ADD r3, r2,r1,LSL #3 ;r3:=r2 + 8 × r1
設(shè)置條件碼
ARM的任何數(shù)據(jù)處理指令都能通過增加“S”操作碼來設(shè)置條件碼(N,Z,C和V)
數(shù)據(jù)處理指令加了“S”后,算術(shù)操作(在此包含CMP和CMN)根據(jù)算術(shù)運(yùn)算的結(jié)果設(shè)置所有的標(biāo)志位
CPSR和SPSR的格式
條件域表1
條件域表2
條件執(zhí)行
所有的ARM指令集都可以是有條件執(zhí)行的。
ARM指令根據(jù)CPSR中的條件位自動判斷是否執(zhí)行指令,在條件滿足時,指令執(zhí)行,否則指令被忽略。
在ARM的指令編碼表中,統(tǒng)一占用編碼的最高四位[31:28]來表示“條件碼”(即“cond”)。
條件轉(zhuǎn)移
轉(zhuǎn)移 | 解釋 | 一般應(yīng)用 |
---|---|---|
B BAL | 無條件的 總是 | 總是執(zhí)行轉(zhuǎn)移 總是執(zhí)行轉(zhuǎn)移 |
BEQ | 相等 | 比較的結(jié)果為相等或零 |
BNE | 不等 | 比較的結(jié)果為不等或非零 |
BPL | 正 | 結(jié)果為正數(shù)或零 |
BMI BCC | 負(fù) 無進(jìn)位 | 結(jié)果為負(fù)數(shù) 算術(shù)操作未得到進(jìn)位 |
BLO | 低于 | 無符號數(shù)比較,結(jié)果為低于 |
BCS BHS | 有進(jìn)位 高于或相等 | 算術(shù)操作得到了進(jìn)位 無符號數(shù)比較,結(jié)果為高于或相等 |
BVC | 無溢出 | 有符號整數(shù)操作,未出現(xiàn)溢出 |
BVS | 有溢出 | 有符號整數(shù)操作,出現(xiàn)溢出 |
BGT | 大于 | 有符號整數(shù)比較,結(jié)果為大于 |
BGE | 大于或相等 | 有符號整數(shù)比較,結(jié)果為大于或相等 |
BLT | 小于 | 有符號整數(shù)比較,結(jié)果為小于 |
BLE | 小于或相等 | 有符號整數(shù)比較,結(jié)果為小于或相等 |
BHI | 高于 | 無符號數(shù)比較,結(jié)果為高于 |
BLS | 低于或相等 | 無符號數(shù)比較,結(jié)果為低于或相等 |
ARM指令集編碼
ARM指令集是以32位二進(jìn)制編碼的方式給出的,大部分的指令編碼中定義了第一操作數(shù)、第二操作數(shù)、目的操作數(shù)、條件標(biāo)志影響位以及每條指令所對應(yīng)的不同功能實(shí)現(xiàn)的二進(jìn)制位。每條32位ARM指令都具有不同的二進(jìn)制編碼方式,和不同的指令功能相對應(yīng) 。編碼表如下:
參考文獻(xiàn):文章來源:http://www.zghlxwxcb.cn/news/detail-437172.html
孟祥蓮.嵌入式系統(tǒng)原理及應(yīng)用教程(第2版)[M].北京:清華大學(xué)出版社,2017.文章來源地址http://www.zghlxwxcb.cn/news/detail-437172.html
到了這里,關(guān)于嵌入式:ARM指令集分類及編碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!