ARM汇编指令集Word文件下载.docx
- 文档编号:1518991
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:11
- 大小:18.27KB
ARM汇编指令集Word文件下载.docx
《ARM汇编指令集Word文件下载.docx》由会员分享,可在线阅读,更多相关《ARM汇编指令集Word文件下载.docx(11页珍藏版)》请在冰点文库上搜索。
将R2中的值左移1位,再与R1值相加,结果送R0
2.2带进位加法指令ADC
ADDSR0,R3,R6;
加最低位字节,不带进位
ADCSR1,R4,R7;
加第二个字,带进位
ADCSR2,R5,R8;
加第三个字,带进位
;
三句话实现了96bit加法运算,由于ARM寄存器宽度只有32bit所以分三次相加
2.3不带进位减法指令SUB;
S—进位标志
SUBR0,R1,R2;
R0←(R1)-(R2)
SUBR0,R1,#112;
R0←(R1)-112
SUBR0,R1,R2LSL#1;
R0←(R1)-(R2<
1)
2.4带进位减法指令SBC
SUBSR0,R3,R6;
减最低位字节,不带进位
SBCSR1,R4,R7;
减第二个字,带进位
SBCSR2,R5,R8;
减第三个字,带进位
三句话实现了96bit减法运算,由于ARM寄存器宽度只有32bit所以分三次相减
2.5不带进位逆向减法指令RSB
RSBR0,R1,R2;
R0←(R2)-(R1)
RSBR0,R1,#112;
R0←112-(R1)
RSBR0,R1,R2,LSL#1;
R0←(R2<
1)-R1
2.6带进位逆向减法指令RSC
RSBSR0,R6,R3;
减最低字节的字,不带进位
RSCSR1,R7,R4;
RSCSR2,R8,R5;
2.732位乘法指令MUL
MULR0,R1,R2;
R0←(R1)X(R2)
MULSR0,R1,R2;
R0←(R1)X(R2);
更新CPSR标志位
2.8乘-累加指令MLA
MLAR0,R1,R2,R3;
R0←(R1)X(R2)+(R3)
MLASR0,R1,R2,R3;
R0←(R1)X(R2)+(R3);
2.9无符号数长乘指令UMULL
MOVR5,#0X01
MOVR8,#0X02
UMULLR0,R1,R5,R8;
(R1)(R0)←(R5)X(R8)
;
UMULL指令实现64bit无符号数乘法
2.10无符号长乘-累加指令UMLAL
MOVR0,#0X01
MOVR1,#0X02
MOVR5,#0X01
MOVR8,#0X02
UMLALR0,R1,R5,R8;
R0←(R0)+(R5)X(R8)低字节
R1←(R1)+(R5)X(R8)高字节
UMLAL指令为64位无符号乘-累加指令
2.11有符号长乘指令SMULL
SMULLR0,R1,R5,R8;
SMULL指令实现64bit有符号数乘法
2.12有符号长乘-累加指令SMLAL
MOVR0,#0X01
SMLALR0,R1,R5,R8;
SMLAL指令为64位有符号乘-累加指令
2.13比较指令CMP
CMPR1,#0X10;
比较
BGTTAG;
R1>
#0X10转到TAG标号处
……
2.14负数比较指令CMN
CMNR0,#1;
判断R0中的值是否为1的补码,是则置标志位Z为1
3逻辑运算指令
3.1“与”指令AND
MOVR0,0XFF
ANDR0,R0,#3;
取出R0的最低2bit
3.2“或”指令ORR
MOVR0,0XFF
ORRR0,R0,#3
3.3“异或”指令EOR
EORR0,R0,#3;
R0←(R0)^(0X03)
3.4位清除指令BIC
BICR0,R0,#B11;
寄存器R0的低2bit被清零
3.5测试比较指令TST
TSTR1,#b11;
测试寄存器R1中的第0位和第1位,更新CPSR中标志位,应用中会在TST指令后加一条跳转指令。
3.6异或测试指令TEQ
TEQR0,R1;
R1和R0中的值按位异或,更新CPSR,实际应用中用TEQ指令测试两个寄存器中的数值是否相等。
4存储器访问指令
4.1字加载指令LDR
LDRR1,[R0,#0X08];
读取R0+0X08地址处的数据,保存到R1
完成后R0中的数据保持不变
LDRR1,[R0]
LDRR1,[R0,R2]
LDRR1,[R0,R2,LSL#2];
读取R0+(R2<
2)地址处的数据,保存到R1
LDRR1,LABEL;
LABEL为程序标号,必须是当前指令的±
4KB
LDRR1,[R0],#0X04
LDRR1,[R0],#0X04;
读取R0地址处的数据,保存到R1
指令执行后R0中值变为R0+0X04
注意:
使用LDR指令时字节地址是4的倍数
4.2字存储指令STR
STRR0,[R1,#4];
将R0中的数据保存到内存地址(R0)+4中
4.3字节加在指令LDRB(低8位)
LDRBR0,[R1,#4];
将地址(R1)+4处的1字节存储到寄存器R0的低
位,并将R0的高24位清零
4.4字节存储指令STRB
STRBR1,[R0,#0X04];
将R1的低8位存到地址R0+0X04处
执行后R0中数据不变
4.5半字加载指令LDRH(低16位)
LDRHR0,[R1,#8];
将R1+8地址处的16位数据送R0中
LDRHR0,[R1,R2];
将R1+R2地址处的数据送寄存器R0中
4.6半字存储指令STRH
STRHR1,[R0,#0X04];
将R1的低16bit数据存到地址R0+0X04处
4.7用户模式数据加载存储指令
用户模式数据加载存储指令
功能描述
LDRT
功能和LDR指令相同,当微处理器在特权模式下使用此指令时,内存系统将该操作当做一般用户模式下的内存访问指令
STRT
同上
LDRBT
STRBT
4.8有符号字节加在指令LDRSB(带符号&
低8位)
LDRSBR0,[R1,R2];
将地址R1+R2上的8位数值送R0
R0的高24位用符号位扩展
4.9有符号半字加载指令LDRSH(带符号&
低16位)
LDRSHR0,[R1];
将地址R1上的低16位数据送R0
R0的高16位用符号位扩展
4.10批量数据加载/存储指令LDM/STM
LDM/STM指令地址模式选择
指令
操作
数据传送起始地址
IA
先传送数据,后基址加4
(Rn)
IB
先基址加4,后传送数据
(Rn)+4
DA
先传送数据,后基址减4
DB
先基址减4,后传送数据
(Rn)-4
基址
地址
数据
0X0000002C
0X00000028
0X00000024
0X00000020
R00X0000001C→
0X0000001C
0X00000018
0X00000014
0X00000010
LDMIAR0!
{R2-R4};
R0=0X00000028R2=0X0000001C
R3=0X0000020R4=0X00000024
LDMIBR0!
R0=0X00000028R2=0X00000020
R3=0X00000024R4=0X00000028
LDMDAR0!
R0=0X00000010R2=0X0000001C
R3=0X00000018R4=0X00000014
LDMDBR0!
R0=0X00000010R2=0X00000018
R3=0X00000014R4=0X00000010
4.11寄存器存储器字交换指令SWP
MOVR0,#0X10
MOVR1,#0X11
MOVR2,#0X12
SWPR0,R1,[R2]
设地址0X12处值为0XFF,执行指令后R0=0XFF,R1=0X11,R2=0X12
内存地址0X12处值为0X11
4.12寄存器存储器字节交换指令SWPB(高24位填0低8位数据)
MOVR1,#0XFF11
SWPBR0,R1,[R2]
设地址0X12处值为0XFF,执行指令后R0=0XFF,R1=0XFF11,R2=0X12
地址0X12处值为0XFF11
5数据传送指令
5.1数据传送指令MOV
MOVR0,#1
MOVR0,R1;
R0←(R1)
MOVR0,R1,LSL#3;
R0←(R1<
3)
5.2反向传送指令MVN
MVNR0,#8;
R0=-9?
?
指令执行后,R0中值为立即数8按位取反的值?
?
5.3程序状态字内容送通用寄存器指令MRS
MRSR1,CPSR;
将CPSR的值送R1
MRS指令是唯一可以直接读取CPSR和SPSR寄存器的指令
5.4写状态寄存器指令MSR
状态寄存器分4个域[31:
24]为条件标志域用f表示,[23:
16]为状态位域用s表示,[15:
8]为扩展位域用x表示,[7:
0]为控制域用c表示。
MSRCPSR_c,#0X11;
CPSR[7:
0]=0X11
MSRCPSR_cxsf,R0;
CPSR=R0
6移位指令
6.1逻辑左移操作LSL(低位填0)
MOVR1,#0X01
MOVR0,R1,LSL#2
MOVR2,#2
MOVR0,R1,LSLR2
6.2算数左移操作ASL(低位填0)
MOVR0,R1,ASL#2
6.3逻辑右移操作LSR(高位填0)
MOVR1,#0X04
MOVR0,R1,LSR#2
6.4算术右移操作ASR (?
)
MOVR1,#0X80000004
MOVR0,R1,ASR#2
6.5循环右移操作R0R(高位由低位填充)
MOVR0,R1,ROR#2
6.6带扩展的循环右移操作RRX(低位→C→高位)
MOVR3,#0X7FFFFFFF
MOVR4,#0X7FFFFFFF
ADDSR3,R3,R4
MOVR0,R1,RRX#2
7.0异常产生指令
7.1软中断指令SWI
SWI12;
将产生中断号为12的软中断
通过该条指令可以用软件的方法实现异常
7.2断点中断指令BKPT
BKPT[immediate_16];
16位立即数
断点中断指令BKPT常被用来设置软件断点,在调试时非常有用
8协处理指令
8.1协处理器数据操作指令CDP
CPDP1,1,C2,C3,C4
指令要操作的协处理器为p1,1为协处理器p1的指令操作代码。
c2、c3、c4为协处理器p1的寄存器。
CPD指令的使用并不影响ARM微处理器中CPSR寄存器的状态位。
8.2协处理器数据读取指令LDC
LDCp5,c2,[R0,#4];
将内存地址为R0+4处的数据送到协处理器p5的寄存器c2中。
LDCp5,c1,[R0,R1];
将内存地址为R0+R1处的数据送到协处理器p5的寄存器c1中。
8.3协处理器数据写入指令STC
STCP1,P2,c2,[R0,#-0X4];
将协处理器p1的寄存器c2中的数据读取到内存地址R0-0X4处。
8.4ARM微处理器到协处理器的数据传送指令MCR
MCR{[code]}[coproc],[opcode_1],[Rd],[CRn],[CRm],{[opcode_2]}
8.5协处理器到ARM寄存器的数据传送指令MRC
MRC{[code]}[coproc],[opcode_1],[Rd],[CRn],[CRm],{[opcode_2]}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 汇编 指令
![提示](https://static.bingdoc.com/images/bang_tan.gif)