资源描述:
《常用ARM及汇编指令》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、.用ARM指令及汇编包括2指令集介绍4ARM数据处理指令包括7ARM伪指令介绍9ARM汇编程序设计及一些格式要求说明13..用ARM指令及汇编包括1、ARM处理器寻址方式2、指令集介绍3、伪指令4、ARM汇编程序设计5、C与汇编混合编程ARM处理器寻址方式..1、寄存器寻址:操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值操作MOV R1,R2 ;R2->R1SUB R0,R1,R2 ;R1-R2-> R02、立即寻址:立即寻址指令中的操作码字段后面的地址码部分就是操作数本身,也就是说,数据就包含在指令当中,取出指令就取出了可以立即使用的操
2、作数SUBSR0,R0,#1 ;R0-1->R0MOV R0,#0xff00 ;0xff00->R0注:立即数要以"#"为前缀,表示16进制数值时以"0x"表示3、寄存器偏移寻址:是ARM指令集特有的寻址方式,当第2操作数是寄存器偏移方式时,第2个寄存器操作数在与第1个操作数结合之前选择进行移位操作MOV R0,R2,LSL#3 ;R2的值左移3位,结果存入R0,即R0=R2*8ANDSR1,R1,R2,LSLR3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1寄存器偏移寻址可采用的移位操作如下(1)、LSL(LogicalShiftLeft)逻辑左移,寄存
3、器中字的低端空出补0(2)、LSR(LogicalShiftRight)逻辑右移,寄存器中字的高端空出补0(3)、ASR(ArthmeticShiftRight)算术右移,移位中保持符号位不变,即如果源操作数为正数,字高端空出补0,否则补1(4)、ROR(Rotate..Right)循环右移,由字的低端移出的位填入高端空出的位(5)、RRX(RotateRighteXtendedby1place),操作数右移一位,左侧空位由CPSR的C填充4、寄存器间接寻址:寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针LD
4、R R1,[R2] ;将R2中的数值作为地址,取出此地址中的数据保存在R1中SWPR1,R1,[R2];将R2中的数值作为地址,取出此地址中的数值与R1中的值交换5、基址寻址:将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,基址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。LDRR2,[R3,#0x0F] ;将R3的数值加0x0F作为地址,取出此地址的数值保存在R2中STRR1,[R0,#-2] ;将R0中的数值减2作为地址,把R1中的内容保存到此地址位置 6、多寄存器寻址:一次可以传送几个寄存器值,允许一条指令传送16个寄存
5、器的任何子集或所有寄存器LDMIAR1!,{R2-R7,R12} ..;将R1所指向的地址的数据读出到R2-R7,R12,R1自动更新STMIAR0!,{R3-R6,R10} ;将R3-R6,R10中的数值保存到R0指向的地址,R0自动更新7、堆栈寻址:堆栈是特定顺序进行存取的存储区,堆栈寻址时隐含的使用一个专门的寄存器(堆栈指针),指向一块存储区域(堆栈),存储器堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈向下生长:向低地址方向生长,称为递减堆栈如此可结合出四中情况:1、满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址,指令如LDMFA,STMFA
6、2、空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置,指令如LDMEA,STMEA3、满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址,指令如LDMFD,STMFD4、空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置,指令如LDMED,STMEDSTMFDSP!,{R1-R7,LR} ;将R1-R7,LR入栈,满递减堆栈LDMFDSP!,{R1-R7,LR} ..;数据出栈,放入R1-R7,LR寄存器,满递减堆栈8、块拷贝寻址:多寄存器传送指令用于一块数据从存储器的某一位置拷贝到另一位置STMIAR0!,{R1-
7、R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,方向为向上增长STMIBR0!,{R1-R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之前增加,方向为向上增长SIMDAR0!,{R1-R7} ;将R1-R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,方向为向下增长STMDBR0!,{R1-R7} ;将R1-R7