第三章 ARM7TDMI指令系統
-
幾個概念
-
機器指令 : 可供處理器譯碼電路直接譯碼執行的二進制編碼指令
-
匯編指令 : 助記符化的機器指令
-
匯編器 :將匯編指令‘翻譯’成機器指令的翻譯器
-
匯編 :將匯編指令‘翻譯’成機器指令的操作或程序
-
-
概述
-
ARM處理器基于RISC原理設計
-
ARM7TDMI(-s)支持32位ARM指令集和16位Thumb指令集
-
ARM指令集 功能全 但代碼密度低
-
Thumb指令集 較高的代碼密度 保持ARM大多數性能上的優勢 是ARM指令集的子集
-
所有的ARM指令都是可以有條件執行的,而Thumb指令僅有一條指令具有條件執行功能
-
-
ARM7尋址方式的分類
-
資料處理指令運算元尋址方式
-
立即數尋址
-
運算元直接包含在指令中
-
取出指令的同時也就取出了對應運算元
-
舉個栗子:
-
-
-
MOV R0,#0 ;將立即數0送入R0
SUB R0,R0,#1 ;R0的值減去立即數1,然后將結果送回R0
MOV R0,#0xFF000 ;將立即數0xFF000送入R0
-
暫存器尋址
-
當指令執行的運算元是ARM處理器某個暫存器中的資料時,在指令中直接指定該暫存器,使用其中的資料作為運算元,這種尋址方式稱為暫存器尋址方式,
-
舉個栗子:
-
-
MOV R0,R1 ;將R1中的值送入R0
SUB R0,R1,R2 ;將R1中的值減去R2的值,結果保存到R0
-
暫存器移位尋址
-
是ARM指令集特有的尋址方式
-
源暫存器運算元在送往 ARM ALU(算術邏輯單元)執行時,先經過桶形移位處理的方式,目的是為了增加代碼的執行效率,
-
舉個栗子:
-
-
MOV R0,R1,LSL #3 ;R1的值邏輯左移三位 放入R0
;無溢位時,即R0 = R1 * 23
MOV R0,R1,ROR R2 ;R1的值回圈右移R2位,然后放入R0
AND R0,R1,R2,LSL R3 ;R2的值邏輯左移R3位,再和R1的值相“與”
;結果放入R0
-
存盤器訪問指令運算元尋址方式
-
暫存器間接尋址
-
指令的運算元存盤在ARM處理器的某個暫存器指向的存盤單元中
-
舉個栗子:
-
-
LDR R0,[R1] ;將R1指向的存盤器單元中的資料讀出
;保存在R0中,R1是間址暫存器
-
基址變址尋址
-
基址暫存器中的內容與指令中給出的地址偏移量相,形成運算元的存盤器地址,
-
基址加偏移量
-
-
LDR R0,[R1,#0x0C];將R1+0x0C所指向的存盤器單元
;內容加載到R0中
STR R0,[R1,#-4]! ;將R0中的值存盤到R1-4所指向的存盤器
;單元中,然后R1=R1-4
-
基址加索引
LDR R0,[R1,R2] ;將R1+R2指向的存盤器單元內容加載到R0中
STR R0,[R1,R2,LSL #2] ;將R0的值保存到R1+R2*4
;所指向的存盤器單元中
-
相對尋址
-
是基址變址尋址的一種特例,其中基址暫存器是程式計數器PC
-
多暫存器尋址 或 塊拷貝尋址
-
堆疊尋址
-
-
ARM7TDMI指令的條件執行
-
CPSR(當前程式狀態暫存器)中的條件碼標志滿足 --- 執行本條指令 , 否則 --- 空操作
-
指令中含有 --- 執行條件
-
執行條件標志 --- 保存在CPSR
-
-
-
ARM匯編指令格式
{lab} <opcode> {cond} {S} <Rd>,<Rn> {,<operand2>}
opcode : 指令助記符
cond : 執行條件
S : 當前操作是否影響CPSR
Rd :目標暫存器,存放運算結果
Rn :第1個運算元的暫存器
operand2 : 第2個運算元
-
cond --- 執行條件
-
ADD R0,R1,R2
-
不帶條件標志 --- 無條件AL 指令的執行不受條件標志位的影響
-
-
ADDS R0,R1,R2
-
指令的執行也不受條件標志的影響 --- 附帶后綴S 指令執行結果將影響CPSR中條件標志位的值
-
-
ADDEQS R0,R1,R2
-
帶條件標志EQ --- 相等則相加 CPSR中Z位置位時執行,否則不執行
-
-
SUMMARY :
-
條件后綴 --- 只影響指令是否執行 后綴宣告了指令的執行條件
-
S后綴 --- 決定了本條指令是否根據本指令執行情況修改CPSR的條件標志
-
-

-
oprand2 --- 第2運算元
-
#immed_8r --- 常數運算式
-
Rm --- 暫存器方式
-
Rm,shift --- 暫存器移位方式
-
LSL 邏輯左移
-
LSR 邏輯右移
-
-
邏輯移位 --- 補‘0’
-
ASR 算術右移
-
ROR 回圈右移
-
RRX 帶擴展的回圈右移
-
-
ARM7處理器指令系統概述
-
ARM指令碼長 --- 32bit
-
Thumb指令碼長 --- 16bit
-
ARM7復位后 --- 默認ARM指令集
-
-
偽指令
-
匯編器偽指令 --- 不生成目標代碼
-
ARM偽指令 --- 生成邏輯等效的目標代碼
-
-
ARM存盤器訪問指令
-
LDR 指令從存盤器加載一個資料到暫存器中
-
LDR {cond} Rx,<地址>
-
-
STR 把暫存器中的一個資料存盤到存盤器中
-
STR {cond} Rx,<地址>
-
-
SWP 暫存器和儲存器交換指令
-
SWP {cond} {B} Rd,Rm,[Rn]
-
-
-
ARM資料處理指令
-
資料傳送指令
-
MOV --- 資料傳送指令
-
MOV {<cond>} {S} Rd,operand2
-
-
MVN --- 資料非傳送指令
-
-
算術邏輯運算指令
-
ADD 加法指令
-
格式 ADD{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn + operand2
-
舉個栗子
-
ADD R0,R1,R2 ; R0 = R1 + R2
-
ADD R0,R1,#5 ; R0 = R1 + 5
-
ADD R0,R1,R2,LSL #2 ; R0 = R1 + R2 * 4
-
-
-
SUB 減法指令
-
格式 SUB{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn - operand2
-
舉個栗子
-
SUB R0,R1,R2 ; R0 = R1 - R2
-
SUBS R0,R1,R2.LSL #2 ; R0 = R1 - R2 * 4
-
-
-
ADC 帶進位加法指令
-
格式 ADC{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn + operand2 + Cy
-
-
SBC 帶僅為減法指令
-
格式 SBC{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn - operand2 - !Cy
-
-
AND 邏輯“與”指令
-
格式 AND{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn & operand2
-
-
ORR 邏輯“或”指令
-
格式 ORR{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn | operand2
-
-
EOR 邏輯“異或”指令
-
格式 EOR{<cond>}{S} Rd,Rn,operand2
-
功能 Rd = Rn 異或 operand2
-
-
-
比較測驗指令
-
CMP 比較指令
-
格式 CMP{<cond>} Rn,operand2
-
功能 Rn - operand2
-
備注 不保存試減結果,影響CPSR條件標志位
-
-
-
-
ARM分支指令
-
B 分支指令
-
格式 B{<cond>} label
-
功能 B指令跳轉到標號lebel制定的地址執行程式
-
-
BL 帶回傳值的分值指令
-
格式 BL{<cond>} label
-
功能
-
-
LR ← PC - #4
PC = label
-
LR 備份 PC - #4 以便后回傳執行 --- 子程式呼叫指令
-
BX 帶狀態切換的分支指令
-
格式 BX{<cond>} Rm
-
功能
-
PC = Rm[31:1] * 2
CPSR[T] = Rm[0]
-
用途 ARM/Thumb轉換
-
ARM偽指令
-
LDR大范圍的地址讀取偽指令
-
格式 LDR{cond} Rm,=addr
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/384189.html
標籤:其他
