跳转指令:实现程序流程的跳转。在ARM中有两种方法可以实现程序的跳转
1、使用专门的跳转指令(B、BL、BLX和BX),这种方法只能从当前指令向前或向后的32MB的地址空间跳转;
2、直接向PC中写入跳转的地址,这种方法可以实现在4GB的地址空间任意跳转,在跳转之前要结合使用 MOV LR,PC 等类似指令。
B:跳转指令
BL:带返回的跳转指令
在跳转之前寄存器R14会保存PC的当前内容,本指令是实现子程序调用的一个基本但常用的手段;
BLX:带返回和状态切换的跳转指令
在BL的基础上有状态的切换(由ARM切换到Thumb状态);
BX:带状态切换的跳转指令
22:20 ARM的数据处理
MOV 数据传送指令
MOV {条件}{S} 目的寄存器,源操作数
MVN 数据取反传送指令
CMP比较指令
该指令做一次减法运算,对CPSR有影响
CMN取反比较指令
TST位测试指令
按位进行与操作
TEQ相等测试指令
按位进行异或操作,常用于判断两个操作数是否相等
ADD加法指令,对CPSR有影响(C、V、N、Z)
ADC带进位加法指令,对CPSR有影响(C、V、N、Z)
SUB减法指令,对CPSR有影响(C、V、N、Z)
SBC带进位减法指令,对CPSR有影响(C、V、N、Z)
2007年11月12日10:34
RSB逆向减法指令
RSB R0,R1,R2; R0=R2-R1
RSB R0,R1,#256;R0=256-R1
RSC带进位(C的反码即!C)的逆向减法指令
RSC R0,R1,R2; R0=R2-R1-!C
AND逻辑与指令,常用于屏蔽操作数1的某些位
AND R0,R0,#3;R0的1、3位不变,其余都清零
ORR逻辑或指令,常用于置位操作数1的某些位
EOR逻辑异或指令,常用于反转操作数1的某些位
乘法指令与乘加指令
这些指令中操作数都必须位通用寄存器,不能对操作数使用立即数或被移位的寄存器,同时,目的寄存器不能与操作数1相同。指令如下:
MUL 32乘法指令
MUL R0,R1,R2;R0=R1XR2
MLA 32位乘加指令
MLA R0,R1,R2,R3;R0=R1XR2+R3
SMULL 64 Signed x
SMULL R0,R1,R2,R3;R0=R2XR3 L32、R1=R2XR3 H32
SMLAL 64 Signed x +
SMLAL R0,R1,R2,R3
UMULL 64 unsigned x
UMULL R0,R1,R2,R3
UMLAL 64 unsigned x +
UMLAL R0,R1,R2,R3
程序状态寄存器访问指令
MSR S="R"
MRS R="S"
用户58782 2007-11-11 22:19
哈哈,说得是我把每天看了的都重复在博客上,以加深我记忆与理解!
用户120337 2007-11-11 20:50
重复一下,再回复一下,也算是对原创帖子的支持。