ARM指令系统
陈虎博士
Tommychen74@
31984767
内容简介
数据操作指令
比较指令
转移指令
存储器访问指令
参考文献:
【1】ARM Corp. , ARM 7 TDMI Data Sheet, 1995
【2】杜春雷,ARM体系结构与编程,清华大学出版社,2003年
数据操作指令
<opcode>{<cond>}{S} <Rd>,<Rn>,<shift_operand>
opcode:指令操作码
cond:指令执行条件
S:是否影响CPSR寄存器
Rd:目的寄存器号
Rn:第一源寄存器号
Shift_operand:第二操作数
ADDEQ R0, R1, R2
;当Z=1时执行R1+R2->R0
数据指令操作码
MOV, MVN(仅一个源操作数)
ADD, ADC : 加法(是否带进位)
SUB, SBC : 减法(是否带进位)
RSB, RSC : 反向减法(是否带进位)
MUL, MLA : 乘法(是否带累加)
AND, ORR, EOR
BIC : 位清除
LSL, LSR : 逻辑左移/右移
ASL, ASR : 算术左移/右移
ROR : 循环右移
RRX : 带进位C的循环右移
第二操作数
Shift_operand:=#<imm>
|<Rm>
|<Rm>, <shf> #<shf_imm>
|<Rm>, <shf> # <Rs>
Shf:=LSL | LSR | ASR | ROR
Add R0, R1, R1, LSL #3
;R0=R1+R1<<3
SUB R1, R6, R6, LSR R4
;R1=R6-R6>>R4
指令举例
将R2的高8位数据传送到R3的低8位中:
MOV R0, R2, LSR #24
ORR R3, R0, R3, LSL #8
R2
0
0
0
右移24位
R0
R3
0
R3
左移8位
OR
R3
指令举例
64位加法。R1:R0,R3:R2中分别存放两个64位数据,求两者之和
ADDS R0, R0, R2
;低32位数据相加,设置进位C
ADC R1, R1, R3
;高32位数据带进位相加,R1:R0为结果
指令举例
R0
C
D
A
B
EOR R1, R0, R0, ROR #16
BIC R1, R1, #0xFF0000
MOV R0, R0, ROR #8
EOR R0, R0, R1, LSR #8
R1
C^A
D^B
A^C
B^D
R1
C^A
D^B
A^C
0
R0
B
C
D
A
R0
B
A
D
C
将R0中的数据进行Little Endian和Big Endian
互相转换
比较指令
CMP : 两个源操作数相减;
CMN : 两个源操作数相加;
TST : 按位与;
TEQ : 按位异或
仅仅影响NZCV标志。
条件执行
arm指令系统 来自淘豆网m.daumloan.com转载请标明出处.