arm的汇编指令精选合辑
PreLoad),使用PLD指示存储系统从后面几条指令所指定的存储器地址读取,存储系统可使用这种方法加速以后的存储器访问。
格式:
PLD[Rn,{offset}]
其中:
Rn 存储器的基址寄存器。
Offset 加在Rn上的偏移量。含义同3。2。3节第1条指令。
注释:
PLD指令适用于ARM v5TE指令及以上版本。
例:
PLD [R9,#-2481]
PLD [R0,#av*4] ;av*4必须在汇编时求值,范围为-4095~4095内的整数
PLD [R5,r8,Lsl#2]
6. 内存和寄存器交换类指令
功能:用一条指令实现在寄存器和存储器之间交换数据。
格式:
SWP{《条件码》}{B} Rd,Rm,[Rn] ;((Rn))→Rd,Rm→Rn
;n≠m,d
其中:
B 可选后缀。若有B,则交换字节;否则,交换32位字。
Rd ARM寄存器。数据从存储器读取到Rd。
Rm ARM寄存器。Rm的数据存储到存储器。Rm可以与Rd相同。Rn必须与Rd和Rm不同。
注释:
对非字对准地址的处理同LDR和STR指令。
例:
ADR R0,SEMAPHORE
SWPB R1,R1,[R0] ;交换字节
3.2.4 ARM数据处理类指令
大多数ARM通用数据处理有一个灵活的第2操作数(flexi second operand)。在每一个指令的格式中以"operand2"表示。
第2条操作数有如下2种可能的格式:
(1)#immed_8r
常量的表达式。常量必须对应于8位位图(pattern0。该位图在32位字中,被循环移位偶数位(0,2,4,8,…,26,28,30)。合法常量:0xFF、0xFF000、0xF0000000F。非法常量:0x101、0xFF04、0xFF003、0xFFFFFFFF。
(2)±Rm {,shift}
Rm 存储第2操作数ARM寄存器。可用各种方法对寄存器中的位图进行移位或循环移位。在指令操作的结果用作第2操作数,但Rm本身不变。
Shift Rm的移位方法,可以是下面的任何一种:
ASR n 算术右移n位(1≤n≤32)。
LSL n 逻辑左移n位(0≤n≤31)。
LSR n 逻辑右移n位(1≤n≤32)。
ROR n 循环右移n位(0≤n≤32)。
RRX 带进位的循环右移1位。
Type Rs 其中:Type ASR、LSR、ROP中的种;
Rs 提供移位量的ARM寄存器,仅使用于最低有效字节。
ASR、LSL、LSR、ROP和RRX的详细说明如下:
① ASR
若将Rm中的内容看作是有符号的补码整数,那么算术右移(ASR,ArithmeTIc Shift Right)n位,即Rm中的内容除以 。将原来的位拷贝到寄存器左边的n位中(即空出的最高补符号位),见图3-3(a)。
② LSR和LSL
若将Rm中内容看作是无符号整数,则逻辑右移(LSR,Logical Shift Right)n位,即Rm中的内容除以 ,寄存器左边的n位置0,见图3-3(b)。
若将Rm中内容看作是无符号整数,则将逻辑左移(LSR,Logical Shift Left)n位,即Rm四的内容乘以 ,可能会出现溢出且无警告,寄存器右边的n 位置0,见图3-3(b)。
③ ROR
循环右移(ROR,Rotate Right)n位,把寄存器内容循环右移,见图3-3(c)。
④ RRX
若将Rm中内容看作是无符号整数,则带进位右环移n位,寄存器左边的n位置0,见图3-3(d)。
图3-3移位操作过程
1 数据运算类指令
功能:完成数据在寄存器中的运算,这些运算包括32位数据的算术、位操作,其中某一个操作数可以经过移位或循环运算。
格式:
《操作码》{《条件码》}{S}Rd,Rn,Operand2
操作码 包括ADD、SUB、RSB、ADC、SBC、RSC、AND、ORR、EOR、BIC、MOV、MVN、CMP、CMN、TST和TEQ指令。
其中:
S 可选后缀。若指定S,则根据操作结果更新条件标志(N、Z、C和V)。
Rd ARM结果寄存器。
Rn 存储第1操作数的ARM寄存器。
Operand 第2操作数。详细说明请见3.2.4节第2操作数说明。
ARM的数据运算类指令用法如表3-3所示。
表3-3 ARM运算类指令
注释:
(1) 条件码标志
若指定S,那么ADD、SUB、RSB、ADC、SBC、RSC指令根据结果更新标志N、Z、C和V。CMP、CMN、TST和TEQ指令不需S。注意:减法(含比较)够减时,C=1。而AND、OPR、EOP、BIC、MOV和MVN指令将:①根据结果更新标志N和Z;②计算Operand2时更新标志C;③不影响V标志。
(2) R15的使用
ADD、SUB、RSB、ADC、SBC、RSC、AND、ORR、EOR、BIC、MOV和MVN指令将R15作为Rn使用,那么使用的值是指令的地址加8。
若将用R15作为Rd,则
l执行转移到结果对应的地址。
l若后缀"S",则将当前模式的SPSR拷贝到CPSR。可以使用这点从异常返回。
在有寄存器控制移位的任何数据处理指令中,不能将R15作为Rd或任何操作数来使用。
CMP、CMN、TST和TEQ指令若
- 什么是LED驱动时序?LCD背光驱动程序设计(04-26)
- LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码(04-25)
- wince代码写入LCD驱动参考,数码产品怎样分别是不是LCD坏点(04-26)
- ARM微处理器助记符指令及其功能描述(04-30)
- 布线工程师如何充分“掌控”时钟信号?(02-21)
- FPGA组成、工作原理和开发流程(10-13)