第四章 ARM指令集与编程
1、ARM指令集
ARM的指令长度:
(1)32位(ARM状态)
(2)16位(Thumb状态)
ARM指令集的特点:
(1)向后兼容
(2)load-store结构
指令格式,一般采用3地址指令格式
指令 Rd,Rs1,Rs2
ARM指令的分类:
(1)数据处理指令
(2)数据传送指令
(3)控制流指令
(4)软件中断指令
(5)程序状态寄存器指令
(6)协处理器指令
数据处理指令
M O V r 0 , r 2 ( r 0 ← r 2 ) MOV\ \ r0,r2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (r0 \leftarrow r2) MOV r0,r2 (r0←r2)
可以使用桶形移位器,想把最后一个操作数进行移位操作,再进行处理
M O V r 0 , r 2 , L S L # 2 ( r 0 ← ( r 2 ≪ 2 ) ) MOV\ \ r0,r2,LSL\ \#2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (r0 \leftarrow (r2\ll2)) MOV r0,r2,LSL #2 (r0←(r2≪2))
(1)LSL:逻辑左移
(2)LSR:逻辑右移
(3)ASL:算术左移
(4)ASR:算术右移
A D D r 1 , r 2 , r 3 , L S L r 4 ( r 1 ← r 2 + 2 r 4 ⋅ r 3 ) ADD\ \ r1,r2,r3,LSL\ r4\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (r1 \leftarrow r2+2^{r4}\cdot r3) ADD r1,r2,r3,LSL r4 (r1←r2+2r4⋅r3)
改变条件标志码(N、Z、C、V等):
(1)使用CMP指令,一般除了这条指令都不影响状态寄存器
(2)再数据处理指令后面加上S,例如 A D D S ADDS ADDS,强制要求改变状态寄存器
一个玩具程序,实现多分支
C M P r 0 , # 0 M O V E Q r 1 , # 0 M O V G T r 1 , # 1