ARM指令集
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• SMLAxy(有號數乘加)----16位16位, 結果為32位
SMLA<x><y>{cond} Rd, Rm, Rs, Rn ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標 SMLATT R8, R1, R0, R8
23
ARM指令功能說明
• SMULWy(有號數乘法)----32位16位, 結果為高 32位
26
ARM指令功能說明
• LDR和STR----單數據傳送類指令
<LDR|STR>{cond}{B}{T} Rd, <Address> B:表示對位元組的操作, T:在後索引指令中, 強制執 行非特權模式操作 <Address>有三種
• 產生位址的運算式、前索引偏移(二種)、後索引偏移(三種)
<LDR|STR>{cond}D Rd, <Address> Rd載入或儲存是Rd及Rd+1, 所以Rd必須是偶數暫存 器, 且不能是R14 LDRD R6, [R11] LDRMID R4, [R7], R2 STRD R4, [R9, #24] STRD R0, [R9, -R2]! LDREQD R8, abc4 STRD R2, [R3], R6
17
ARM指令功能說明
• CMP、CMN、TST 和 TEQ----比較、比較反值、 測試和測試相等
Opcode{cond} Rn, operand2 功能:改變 N, Z, C, V CMP R2, R8 CMN R1, #6400 CMPGT R13, R7, LSL #2 TST R1, #0X3F8 TEQEQ R10, R8
20
ARM指令功能說明
• UMULL、UMLAL、SMULL和SMLAL---無號與 有號長整數乘法和乘加(32位32位, 結果為64位)
op{cond}{S} RdLo, RdHi, Rm, Rs ps:RdHi_RdLo=Rm*Rs + RdHi_RdLo不能使用R15, Rd 不能與Rm相同 UMULL R1, R4, R2, R3 ;R4_R1=R2 R3 UMLALS R1, R5, R2, R3 ;R5_R1=R2 R3 + R5_R1
12
ARM指令功能說明
ARM轉移類指令
• BX ----轉移及改變指令集
BX{cond} Rm BX R7 BXVS R0 B{cond} label BL{cond} label B there here: BLE here BL SUBC
13
• B 和 BL ---- 轉移及帶鏈結轉移
7
ARM指令系統特點
• 輔助運算器類及雜項類指令 指令符號 指令說明
PSR存到暫存器
暫存器存到PSR CPU暫存器存到輔助運算器
功能
MRS MSR MCR MRC
LDC STC SWI SWP
Rd:=PSR PSR:=Rd
輔助運算器的暫存器存到暫 存器
記憶體載入輔助運算器 輔助運算器存到記憶體 軟體中斷 暫存器和記憶體交換
系統呼叫 Rd:=[Rn], [Rn]:=Rd
8
條件域
條件域決定在什麼時候執行該條指令 ARM指令的條件有16種, 以兩個字母的附加字出現 在指令的後面
編碼 0000 0001 0010 0011 0100 0101 附加字母 EQ NE CS CC MI PL 旗標 Z=1 Z=0 C=1 C=0 N=1 N=0 意義 相等 不相等 無號大於或等於 無號小於 負數 非負數(正或零)
前索引定址
• LDR R0, [R1, #4]! ;R0:=[R1+4], R1:=R1+4
後索引定址
• LDR R0, [R1], #4 ;R0:=[R1], R1:=R1+4
;R0:=[R1+R2]
基底位址加索引定址
• LDR R0, [R1, R2]
• 多暫存器定址
LDMIA R1, {R0, R2, R5} ;R0:=[R1], R2:=[R1+4], R5:=[R1+8]
9
條件域
編碼 0110 0111 1000 1001 1010 1011 1100 1101 附加字母 VS VC HI LS GE LT GT LE 旗標 V=1 V=0 C=1且Z=0 C=0且Z=0 意義 溢位 未溢位 無號大於 無號小於或等於 大於或等於 小於
N=V N!=V Z=0且N=V 大於 Z=1且N!=V 小於或等於
18
ARM指令功能說明
• CLZ---前導0計數
CLZ{cond} Rd, Rm 功能:將Rm中值的前導0的個數進行計算, 將結果放 在Rd中 CLZ R4, R9 CLZNE R2, R3
19
ARM指令功能說明
• MUL和MLA---乘法和乘加
MUL{cond}{S} Rd, Rm, Rs MLA{cond}{S} Rd, Rm, Rs, Rn ;Rd=Rm*Rs+Rn ps:不能使用R15, Rd不能與Rm相同 MUL R1, R2, R3 MLA R1, R2, R3, R4 MULS R0, R2, R2
21
ARM指令功能பைடு நூலகம்明
• SMULxy(有號數乘法)----16位16位, 結果為32位
SMUL<x><y>{cond} Rd, Rm, Rs ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標 SMULTBEQ R5, R7, R9
22
ARM指令功能說明
16
ARM指令功能說明
• MOV 和 MVN----搬移, 搬移反值
MOV{cond}{S} Rd, operand2 MVN{cond}{S} Rd, operand2 MOV R5, R2 MVNNE R11, #0XF000000B MOVS R0, R0, ASR R3 MOV PC, R14 ;從副程式返回 MOVS PC, R14 ;從異常返回, 恢復CPSR
6
ARM指令系統特點
指令符號 指令說明 功能
MUL MLA MOV MVN LDR STR LDM STM
乘 乘加 搬移 移動暫存器
Rd:=Rm*Rs Rd:=(Rm*Rs)+Rn Rd:=Op2 Rd:=0xFFFFFFFF XOR Op2 從記憶體載入暫存器 Rd:=[地址] 從暫存器存回記憶體 [地址]:=Rd 多暫存器載入 堆疊操作(Pop) 儲存多暫存器 堆疊操作(Push)
ARM指令系統
ARM 指令系統特點 條件域 ARM指令的定址方式 ARM指令功能說明 未使用的指令空間 ARM巨集組譯
1
ARM指令系統特點
指令
• SUBNES R4, R5, R7, LSR R2
組譯之後相對應的機器碼
• • • • • • • • • 0001 00 0 0100 1 0101 0100 0111 0 01 1 0010 cond I opcode S Rn Rd operand2 cond:28-31:條件碼 I:25:第二個運算元格式 opcode:操作碼 S:是否更新條件旗標 Rn:第一運算元編號 Rd:結果運算元編號 operand2:第二個運算元
25
ARM指令功能說明
• SMLALxy(有號數乘加)----16位16位, 加法為64 位元
SMLAL<x><y>{cond} RdLo, RdHi, Rm, Rs ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標, SMLALTB R2, R3, R7, R1
LDR LDRNE STR LDR LDR
R1, [R10] R2, [R5, #5]! R1, [R2, R4] R1, [R2, R3, LSL #2] R0, localdata
27
ARM指令功能說明
• LDRH、STRH等----半字與有號數傳送類指令
5
加
連進位旗標一起加
減
連進位旗標一起減
ARM指令系統特點
指令符號
RSB RSC
AND ORR EOR CMP CMN BIC TEQ TST CDP
指令說明 反向減 帶進位的反向減 邏輯and 邏輯or 邏輯xor 比較 反值比較 清除位元
位元測試相等
功能
Rd:=Op2-Rn Rd:=Op2-Rn-進位?
<LDR|STR>{cond}<H|SH|SB> H:半字,S:有號, B:位元組 LDRH R1, [R2, -R3]! STRH R3, [R4, #14] LDRSB R8, [R2], #-223 LDRNESH R11, [R0]
Rd, <Address>
28
ARM指令功能說明
• 雙字(64位元)傳送類指令
15
ARM指令功能說明
• • • • • • • • • Opcode{cond}{S} Rd, Rn, operand2 ADD R2, R1, R3 SUBS R8, R6, #240 RSB R4, R4, #1280 SUB R4, R5, R7, LSR R2 RSCLES R1, R6, R0, LSL R4 AND R8, R2, #0xff00 ORREQ R2, R0, R5 EORS R1, R1, R3 ROR R6
位元測試
輔助運算器資料處理
Rd:=Rn And Op2 Rd:=Rn Or Op2 Rd:=Rn Xor Op2 CPSR flags = Rn-Op2 CPSR flags = Rn+Op2 Rd:=Rn And Not Op2 CPSR flags = Rn Xor Op2 CPSR flags = Rn And Op2
SMULW<y>{cond} Rd, Rm, Rs ps:<y>為B或T, B表較低的16位元, T表較高的16位元, 不影響條件旗標, SMULWB R2, R4, R7
24
ARM指令功能說明
• SMLAWy(有號數乘加)----32位16位, 用高32位 元進行加法
SMLAW<y>{cond} Rd, Rm, Rs, Rn ps:<y>為B或T, B表較低的16位元, T表較高的16位元, 不影響條件旗標, SMLAWB R2, R4, R7, R1 SMLAWTVS R0, R0, R9, R2
ARM指令功能說明
• BLX ---- 帶鏈結分支並可選交換指令集
BLX{cond} Rm BLX label
14
ARM指令功能說明
資料處理類指令
• ADD, SUB, RSB, ADC, SBC, RSC, AND, ORR, EOR和BIC
cond(28-31):條件碼 I(25):第二個運算元格式,1:立即資料, 0:暫存器 Opcode(21-24):操作碼, 算術邏輯功能 S(20):是否更新條件旗標 Rn(16-19):第一運算元編號 Rd(12-15):結果運算元編號 Operand2(0-11):第二個運算元
1110
AL
任意
10
ARM指令的定址方式
ARM指令的定址方式有
• 暫存器定址
ADD R0, R1, R2 ADD R3, R3, #1
; R0:=R1+R2 ; R3:=R3+1
• 立即定址
• 暫存器間接定址
LDR R0, [R3]
; R0:=[R3]
11
ARM指令的定址方式
• 暫存器變址
4
ARM指令系統特點
ARM指令概述
• 大致可以分為轉移類、資料處理類、乘法類、資料傳 送類、輔助運算器類以及雜項類等 指令符號 B 指令說明 轉移 功能 R15:=位址
BL BX ADD ADC SUB SBC
帶鏈結轉移
轉移並交換指令集
R14:=R15, R15:=位址
R15:=Rn, T bit:=Rn[0] Rd:=Rn+Op2 Rd:=Rn+Op2+進位 Rd:=Rn-Op2 Rd:=Rn-Op2-進位?
2
3
ARM指令系統特點
ARM指令特點
• 每個指令都是32位元 • 指令的條件執行 • 靈活的第二個運算元:資料處理類指令具有靈活 的第二個運算元, 可以是立即數,也可以是邏輯 運算式 • 輔助運算器的作用 • Thumb指令 • 具有RISC指令的特點:指令少且等長、使用多暫 存器、使用Load與Store指令
SMLA<x><y>{cond} Rd, Rm, Rs, Rn ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標 SMLATT R8, R1, R0, R8
23
ARM指令功能說明
• SMULWy(有號數乘法)----32位16位, 結果為高 32位
26
ARM指令功能說明
• LDR和STR----單數據傳送類指令
<LDR|STR>{cond}{B}{T} Rd, <Address> B:表示對位元組的操作, T:在後索引指令中, 強制執 行非特權模式操作 <Address>有三種
• 產生位址的運算式、前索引偏移(二種)、後索引偏移(三種)
<LDR|STR>{cond}D Rd, <Address> Rd載入或儲存是Rd及Rd+1, 所以Rd必須是偶數暫存 器, 且不能是R14 LDRD R6, [R11] LDRMID R4, [R7], R2 STRD R4, [R9, #24] STRD R0, [R9, -R2]! LDREQD R8, abc4 STRD R2, [R3], R6
17
ARM指令功能說明
• CMP、CMN、TST 和 TEQ----比較、比較反值、 測試和測試相等
Opcode{cond} Rn, operand2 功能:改變 N, Z, C, V CMP R2, R8 CMN R1, #6400 CMPGT R13, R7, LSL #2 TST R1, #0X3F8 TEQEQ R10, R8
20
ARM指令功能說明
• UMULL、UMLAL、SMULL和SMLAL---無號與 有號長整數乘法和乘加(32位32位, 結果為64位)
op{cond}{S} RdLo, RdHi, Rm, Rs ps:RdHi_RdLo=Rm*Rs + RdHi_RdLo不能使用R15, Rd 不能與Rm相同 UMULL R1, R4, R2, R3 ;R4_R1=R2 R3 UMLALS R1, R5, R2, R3 ;R5_R1=R2 R3 + R5_R1
12
ARM指令功能說明
ARM轉移類指令
• BX ----轉移及改變指令集
BX{cond} Rm BX R7 BXVS R0 B{cond} label BL{cond} label B there here: BLE here BL SUBC
13
• B 和 BL ---- 轉移及帶鏈結轉移
7
ARM指令系統特點
• 輔助運算器類及雜項類指令 指令符號 指令說明
PSR存到暫存器
暫存器存到PSR CPU暫存器存到輔助運算器
功能
MRS MSR MCR MRC
LDC STC SWI SWP
Rd:=PSR PSR:=Rd
輔助運算器的暫存器存到暫 存器
記憶體載入輔助運算器 輔助運算器存到記憶體 軟體中斷 暫存器和記憶體交換
系統呼叫 Rd:=[Rn], [Rn]:=Rd
8
條件域
條件域決定在什麼時候執行該條指令 ARM指令的條件有16種, 以兩個字母的附加字出現 在指令的後面
編碼 0000 0001 0010 0011 0100 0101 附加字母 EQ NE CS CC MI PL 旗標 Z=1 Z=0 C=1 C=0 N=1 N=0 意義 相等 不相等 無號大於或等於 無號小於 負數 非負數(正或零)
前索引定址
• LDR R0, [R1, #4]! ;R0:=[R1+4], R1:=R1+4
後索引定址
• LDR R0, [R1], #4 ;R0:=[R1], R1:=R1+4
;R0:=[R1+R2]
基底位址加索引定址
• LDR R0, [R1, R2]
• 多暫存器定址
LDMIA R1, {R0, R2, R5} ;R0:=[R1], R2:=[R1+4], R5:=[R1+8]
9
條件域
編碼 0110 0111 1000 1001 1010 1011 1100 1101 附加字母 VS VC HI LS GE LT GT LE 旗標 V=1 V=0 C=1且Z=0 C=0且Z=0 意義 溢位 未溢位 無號大於 無號小於或等於 大於或等於 小於
N=V N!=V Z=0且N=V 大於 Z=1且N!=V 小於或等於
18
ARM指令功能說明
• CLZ---前導0計數
CLZ{cond} Rd, Rm 功能:將Rm中值的前導0的個數進行計算, 將結果放 在Rd中 CLZ R4, R9 CLZNE R2, R3
19
ARM指令功能說明
• MUL和MLA---乘法和乘加
MUL{cond}{S} Rd, Rm, Rs MLA{cond}{S} Rd, Rm, Rs, Rn ;Rd=Rm*Rs+Rn ps:不能使用R15, Rd不能與Rm相同 MUL R1, R2, R3 MLA R1, R2, R3, R4 MULS R0, R2, R2
21
ARM指令功能பைடு நூலகம்明
• SMULxy(有號數乘法)----16位16位, 結果為32位
SMUL<x><y>{cond} Rd, Rm, Rs ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標 SMULTBEQ R5, R7, R9
22
ARM指令功能說明
16
ARM指令功能說明
• MOV 和 MVN----搬移, 搬移反值
MOV{cond}{S} Rd, operand2 MVN{cond}{S} Rd, operand2 MOV R5, R2 MVNNE R11, #0XF000000B MOVS R0, R0, ASR R3 MOV PC, R14 ;從副程式返回 MOVS PC, R14 ;從異常返回, 恢復CPSR
6
ARM指令系統特點
指令符號 指令說明 功能
MUL MLA MOV MVN LDR STR LDM STM
乘 乘加 搬移 移動暫存器
Rd:=Rm*Rs Rd:=(Rm*Rs)+Rn Rd:=Op2 Rd:=0xFFFFFFFF XOR Op2 從記憶體載入暫存器 Rd:=[地址] 從暫存器存回記憶體 [地址]:=Rd 多暫存器載入 堆疊操作(Pop) 儲存多暫存器 堆疊操作(Push)
ARM指令系統
ARM 指令系統特點 條件域 ARM指令的定址方式 ARM指令功能說明 未使用的指令空間 ARM巨集組譯
1
ARM指令系統特點
指令
• SUBNES R4, R5, R7, LSR R2
組譯之後相對應的機器碼
• • • • • • • • • 0001 00 0 0100 1 0101 0100 0111 0 01 1 0010 cond I opcode S Rn Rd operand2 cond:28-31:條件碼 I:25:第二個運算元格式 opcode:操作碼 S:是否更新條件旗標 Rn:第一運算元編號 Rd:結果運算元編號 operand2:第二個運算元
25
ARM指令功能說明
• SMLALxy(有號數乘加)----16位16位, 加法為64 位元
SMLAL<x><y>{cond} RdLo, RdHi, Rm, Rs ps:<x><y>為B或T, B表較低的16位元, T表較高的16位 元, 不影響條件旗標, SMLALTB R2, R3, R7, R1
LDR LDRNE STR LDR LDR
R1, [R10] R2, [R5, #5]! R1, [R2, R4] R1, [R2, R3, LSL #2] R0, localdata
27
ARM指令功能說明
• LDRH、STRH等----半字與有號數傳送類指令
5
加
連進位旗標一起加
減
連進位旗標一起減
ARM指令系統特點
指令符號
RSB RSC
AND ORR EOR CMP CMN BIC TEQ TST CDP
指令說明 反向減 帶進位的反向減 邏輯and 邏輯or 邏輯xor 比較 反值比較 清除位元
位元測試相等
功能
Rd:=Op2-Rn Rd:=Op2-Rn-進位?
<LDR|STR>{cond}<H|SH|SB> H:半字,S:有號, B:位元組 LDRH R1, [R2, -R3]! STRH R3, [R4, #14] LDRSB R8, [R2], #-223 LDRNESH R11, [R0]
Rd, <Address>
28
ARM指令功能說明
• 雙字(64位元)傳送類指令
15
ARM指令功能說明
• • • • • • • • • Opcode{cond}{S} Rd, Rn, operand2 ADD R2, R1, R3 SUBS R8, R6, #240 RSB R4, R4, #1280 SUB R4, R5, R7, LSR R2 RSCLES R1, R6, R0, LSL R4 AND R8, R2, #0xff00 ORREQ R2, R0, R5 EORS R1, R1, R3 ROR R6
位元測試
輔助運算器資料處理
Rd:=Rn And Op2 Rd:=Rn Or Op2 Rd:=Rn Xor Op2 CPSR flags = Rn-Op2 CPSR flags = Rn+Op2 Rd:=Rn And Not Op2 CPSR flags = Rn Xor Op2 CPSR flags = Rn And Op2
SMULW<y>{cond} Rd, Rm, Rs ps:<y>為B或T, B表較低的16位元, T表較高的16位元, 不影響條件旗標, SMULWB R2, R4, R7
24
ARM指令功能說明
• SMLAWy(有號數乘加)----32位16位, 用高32位 元進行加法
SMLAW<y>{cond} Rd, Rm, Rs, Rn ps:<y>為B或T, B表較低的16位元, T表較高的16位元, 不影響條件旗標, SMLAWB R2, R4, R7, R1 SMLAWTVS R0, R0, R9, R2
ARM指令功能說明
• BLX ---- 帶鏈結分支並可選交換指令集
BLX{cond} Rm BLX label
14
ARM指令功能說明
資料處理類指令
• ADD, SUB, RSB, ADC, SBC, RSC, AND, ORR, EOR和BIC
cond(28-31):條件碼 I(25):第二個運算元格式,1:立即資料, 0:暫存器 Opcode(21-24):操作碼, 算術邏輯功能 S(20):是否更新條件旗標 Rn(16-19):第一運算元編號 Rd(12-15):結果運算元編號 Operand2(0-11):第二個運算元
1110
AL
任意
10
ARM指令的定址方式
ARM指令的定址方式有
• 暫存器定址
ADD R0, R1, R2 ADD R3, R3, #1
; R0:=R1+R2 ; R3:=R3+1
• 立即定址
• 暫存器間接定址
LDR R0, [R3]
; R0:=[R3]
11
ARM指令的定址方式
• 暫存器變址
4
ARM指令系統特點
ARM指令概述
• 大致可以分為轉移類、資料處理類、乘法類、資料傳 送類、輔助運算器類以及雜項類等 指令符號 B 指令說明 轉移 功能 R15:=位址
BL BX ADD ADC SUB SBC
帶鏈結轉移
轉移並交換指令集
R14:=R15, R15:=位址
R15:=Rn, T bit:=Rn[0] Rd:=Rn+Op2 Rd:=Rn+Op2+進位 Rd:=Rn-Op2 Rd:=Rn-Op2-進位?
2
3
ARM指令系統特點
ARM指令特點
• 每個指令都是32位元 • 指令的條件執行 • 靈活的第二個運算元:資料處理類指令具有靈活 的第二個運算元, 可以是立即數,也可以是邏輯 運算式 • 輔助運算器的作用 • Thumb指令 • 具有RISC指令的特點:指令少且等長、使用多暫 存器、使用Load與Store指令