加法指令 ADD R1,R2,R3 R1= R2+R3;
带进位加法 ADC R1,R2,R3 R1=R2+R3+C
减法指令 SUB R1,R2,R3 R1 = R2-R3
逆向减法 RSB R1,R2,R3 R1=R3-R2
带借位减法 SBC R1,R2,R3 R1=R2-R3-!C
带错位逆减法 ( RSC) R1,R2,R3 R1=R3-R2-!C
逻辑与指令 (AND) R0,R0,#0X0F
逻辑或指令 (ORR) R0,R0, #0X0F
逻辑异或 (EOR) R0,R0,#0X0F
位清除 (BIC) R0,R0,#9
比较指令 (CMP) R1,#10 cpsr(程序状态寄存器) = R1-10;
反值比较指令 (CMN) R1,#10 cpsr = R1+R2
位测试指令 (TST) R1,#3 cpsr = R1 AND 3
相等测试 (TEQ) R1,R3 cpsr = R1 EOR R2
数据传输指令 (MOV) R1,R2 R1 = R2
取反传送指令 (MVN) R1,R2 R1 = ~R2
LDR 可以作为加载指令:LDR指令用于从存储器中将一个32位的字数据传送到目的寄存器中。
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
比如想把数据从内存中某处读取到寄存器中,只能使用ldr
比如:
ldr r0, 0x12345678
就是把0x12345678这个地址中的值存放到r0中。
ldr伪指令:
1)ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。
LDR伪指令的形式是“LDR Rn,=expr”。
(2)例子:
COUNT EQU 0x40003100
LDR R1,=COUNT
MOV R0,#0
STR R0,[R1]
关于LDR MOV STR 区分
COUNT是我们定义的一个变量,地址为0x40003100。
LDR R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。
MOV R0,#0是将立即数0放到R0中。
STR R0,[R1]是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。实际就是将0放到地址为0x40003100的存储单元中去。
STR指令
格式如下:
STR{条件} 源寄存器,<存储器地址>
STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常
用,丏寻址方式灵活多样,使用方式可参考指令LDR。
指令示例:
STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1。
STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中。”
str r1, [r0] ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中