第三章 arm指令集

来源:互联网 发布:长三角师资招聘会 网络 编辑:程序博客网 时间:2024/05/22 06:49
arm指令集分为6类:跳转指令、数据处理指令、程序状态寄存器(psr)传输指令、Load/store指令、协处理器指令和异常中断产生指令。

3.1.1跳转指令
在arm中实现程序跳转:1、跳转指令 2、直接向pc 写入目标地址(再跳之前可mov lr,pc)

arm跳转指令(前后32MB):
1.b跳转指令
2.BL带返回的跳转指令
3.BLX 带返回和程序状态切换的跳转指令
4.bx带程序状态切换的跳转指令
第三章 <wbr>arm指令集
第三章 <wbr>arm指令集
第三章 <wbr>arm指令集


第三章 <wbr>arm指令集
第三章 <wbr>arm指令集
第三章 <wbr>arm指令集


3.1.2数据处理指令
数据指令分为:数据传送指令、算是逻辑运算指令、比较指令(不保存运算结果,只影响CPSR中相应条件标志位)。
第三章 <wbr>arm指令集
掩码值:目标值想设为1的位为1,其他为零
sbc r5,r1,r3  ;r5=r1-r3-c


rsb rd,rx,#0   ;rd=-rx(逆向减法指令)
rsb rd,rx,rx,lsl#n  ;rd=rx*(2*n-1)

rsc r3,r1,#0 ;r3=0-r1(带位逆向减法指令)

and  r3,#n ;r3=r3&n(逻辑与)

orr r3,r0,r3,lsl#8 ;逻辑或

eor r3,r0,r0,ror #16 ;orr指令可用于寄存器某些位的值取反,与0不变,与1取反

bic 
第三章 <wbr>arm指令集
BIC R0,R0,#0B111111
cmp r3,#5 比较指令

cmn(基于相反数比较指令)

tst r3,#n(通常用于测试寄存器中某个位是1还是0)


乘法指令
第三章 <wbr>arm指令集

mul(mul 仅仅保存64位结果低32位)
mul r0,r1,r2  ;r0=r1*r2
muls r0,r1,r2 ;r0=r1*r2同时设置cpsr中n位和z位


mla r0,r1,r3,#4 ;r0=r1*r3+4


smull r1,r2,r3,r4 ;r1=r3*r4的低32位,r2=(r4*r3)的高32位

smlal r1,r2,r3,r4  ;r1=r1+r3*r4的低32位,r2=r2+r3*r4的高32位

umull r1,r2,r3,r4 ;r1=r3*r4的低32位,r2=r3*r4的高32位

umlal r1,r2,r3,r4;r2 r1=r3*r4+r2 r1

杂类算术指令
clz  rd,rm ;计算rm高位有多少个零存入rd中

状态寄存器访问指令
mrs 状态寄存器到通用寄存器的传送指令
mrs r1,cpsr or spsr


msr 通用寄存器到状态寄存器的传送指令
mrs r0,cpsp ;读取cpsr
bic r0,r0,#0x1f  ;修改去除当前处理器模式
orr r0,r0,#0x13  ;修改,设置特权模式
msr cpsr_c,r0  ;写回仅仅修改cpsr中的控制域


3.1.6 lOAD/Store内存访问指令
第三章 <wbr>arm指令集

LDR 
1.用于从内存中读取32为字数据到通用寄存器,然后可在该寄存器中对数据进行一定的操作
2.当pc作为指令的目标寄存器是,指令实现程序的跳转功能。
ldr r0,[r1,#4]    ;将[r1+4]读取到r0寄存器中
ldr r0,[r1,r2,lsl #2] ;将[r1+r2<<2]读取到r0寄存器中


LDRB
1.用于从内存中读取一字节数据到通用寄存器中,然后可在该寄存器中对数据进行一定的操作。
2.当pc为指令中的目标寄存器是,指令可以实现程序跳转的功能
LDRB R0,[R2,#3] ;将[R2+3]中的字节数读取到r0,r中高24为设置成0
LDRB R0,[R1]    ;将【r1】中的字节数据读取到r0中,r0中高24位设置成0
LDRBT(用户模式的字节数据读取指令,当在特权级的处理器模式下使用本指令是,内存系统将该操作当作一般用户模式下的内存访问操作)

LDRH(半字读取指令)
用于从内存中将一个16为的半字数据读取到指令中的目标寄存器中,并将寄存器的高16位清零

LDRSB(有符号的字节数据读取指令)
从内存中将一个8位的字节数据读取到指令中的目标寄存器。。。。。。。以后看代码又不懂的指令在看书把。





arm协处理指令
arm支持16个协处理器,每个协处理器忽略属于arm处理器和其他协处理器的指令,当一个协处理器硬件不能执行属于他的协处理器指令时,将产生未定义指令一次中断
共有5条指令:
cdp 数据操作指令
ldc 数据读取指令
stc 数据写入指令
mcr arm寄存器到协处理寄存器的数据传送指令
mrc 协处理寄存器到arm寄存器的数据传送指令

CDP
ARM处理器用于通知arm协处理器执行特定的操作
CDP     p5,2,c12,c10,c3,4 ;(2,4为操作码1.2;c12目标协处理器寄存器;c10,c3存放操作数协处理器寄存器)


LDC
从内存单元中将数据读取到协处理器的寄存器中
LDC p6,cr4,[r2,#4]    ;r2为arm寄存器,指令读出内存单元r2+4的字数据,传送到协处理器p6的cr4寄存器

STC
将协处理的寄存器中的数据写入到一系列连续的内存单元中,失败产生未定义的指令异常中断
STC P8,CR8,[R2,#4];R2为arm寄存器将p8处理器的cr8中的字数据写入到([r2]+4)


MCR
将arm处理器的寄存器中的数据传送到协处理器的寄存器中,
mcr p14,3,r7,c7,c11,6 ;

mrc
将协处理器寄存器中的数值传送到arm处理器的寄存器中
mrc  p15,2,r5,c0,c2,4 





3.2一些基本的arm指令功能段(算法)
第三章 <wbr>arm指令集

第三章 <wbr>arm指令集
第三章 <wbr>arm指令集
第三章 <wbr>arm指令集第三章 <wbr>arm指令集第三章 <wbr>arm指令集第三章 <wbr>arm指令集
原创粉丝点击