微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > arm的汇编指令精选合辑

arm的汇编指令精选合辑

时间:06-04 来源:网络整理 点击:

数常量,取值在-4095~+4095之间。

  (3) ±Rm{.shift}

  其中:

  ± 可选负号。若有符号"-",则从Rn中减去偏移量。否则,将偏移量加到Rn中。

  Rm 内含偏移量的寄存器。Rm不允许是R15。

  Shift Rm的可选移位方法。可以是ASR、LSL、LSR、ROR、RRX的任何一种。详细说明见ARM数据处理类指令的第二操作数。

  (4) 字地址对准

  大多数情况下,必须保证用于32位传送的地址是32位对准的。

  若系统中有协处理器(CP15),则允许对准检查,若允许对准检查,则非字对准的32位传送会引起对准异常。若系统中没有系统协处理品(CP15),或禁止对准检查,则有:

  对于STR,将指定的地址取成4的倍数。

  对于LDR,则

  l将指定的地址取成4的倍数。

  l由结果地址读取4个字节的数据。

  l依据地址的位[1:0],将读取的数据循环右移1、2或3个字节。

  对于小端存储系统,这使寻址的字节占用寄存器的最低有效字节。

  对于大端存储系统,这使寻址的字节占用:

  -位[31:24],若地址的位[0]为0;

  -位[15:8],若地址的位[0]为1。

  (5) 使用R15读取

  使用R15(程序计数器)读取会引起处理器转移到所读取地址的指令。

  对于读取值的位[1:0],有:

  l对于ARM体系结构v3及以下版本,忽略位[1:0]。

  l对于ARM体系结构v4及以上版本的非T变量,位[1:0]为0。

  l对于ARM体系结构v5及以上版本的T变量,则有

  -对于读取到R15的值,其位[1:0]不允许是ob10;

  -对于读取到R15的值的位[0]置位,则处理器转到Thumb状态。

  当使用R15读取时,不能使用后缀"B"或"T"。

  (5) 使用R15存储

  通常应尽量避免使用R15存储。

  若使用R15存储,则存储的值是当前指令的地址加上实现所定义的常量。对于特写的处理器这个常量始终不变。

  例 1:将R0中的内容存放进外设中。

  LDR R1,UARTADD ;将UART地址放进R1中

  STRB R0,[R1] ;将数据放进外设中

  UARTADD & &1000000 ;UARTR的地址值

  例 2:

  LDR R8,[R10]! ;((R10))→R8

  LDRNE R2,[R5,#960]! ;Z≠14时((R5)+960)→R2,(R5)+960→R5

  STR R2,[R9,#consta-struc] ;consta-struc是常量的表达式,该常量的范围为1~4095

  STRB R0,[R3,-R8,ASR#2] ;R0→(R3-R8/4),存储R0的最低有效字节,R3和R8不变

  STR R%,[R7],#-8 ;读取一个字,该字位于标号loacaldata所在地址

  2. 半字和有符号字节Load/store类指令

  功能:提供ARM寄存器和内存之间半字(16位)和有符号字节(8位)数据的传送。

  格式:

  (1) 零偏移(zero offset)

  LDR|STR{《条件码》}H|SH|SB Rd,[Rn]

  (2) 前变址(pre-indexed offset)

  LDR|STR{《条件码》}H|SH|SB Rd,[Rn,《offset》]{!}

  (3) 程序相对偏移(pregram-relatve)

  LDR|STR{《条件码》}H|SH|SB Rd,Label

  (4) 后变址(post-indexed offset)

  LDR|STR{《条件码》}H|SH|SB Rd,[Rn],《offset》

  其中:

  H|SH|SB 表示数据类型选择。

  SH 对有符号半字(仅LDR);

  H 对无符号半字;

  SB 对有符号字节(仅LDR)。

  Label 程序相对偏移表达式。必须是在当前指令的±255字节范围内。

  Offset 加在Rn上的偏移量。含义见注释。

  Rn和"!"同前面第1条(LDR和STR字和无符号字节)。

  注释:

  (1) offset说明

  前变址和后变址格式中的offset可以是下两种形式之一:

  ①expression含义同前一条指令,取值在-255~+255范围之间。

  ②±Rm含义同前一条指令。

  (2) 半字传送的地址对准

  半字传送的地址必须是偶数。

  若系统有系统协处理器(CP15),则可允许对准检查。若允许对准检查,则非对准的16位传送会引起对准异常。若系统没有系统协处理器(CP15)或禁止对准检查,则有

  l非半字对准的16位读取将使Rd内容不可靠;

  l非半字对准的16位存储将使在address和(address-1)的2个字节不可靠。

  (3) 不能将半字或字节读取到R15。

  例 1:

  LDREQSH R11,[R6] ;(有条件地)R11←[R6],读取16位半字,有符号扩展到32位

  LDH R1,[R0,#22] ;R1←[R0+22],读取16位半字,零扩展到32位

  STR R4,[R0+R1] ;存储最低的有效半字到R0+R1地址开始的两个字节,地址写回到

  ;R0

  LDRSB R6,constf ;读取位于标号constf地址中的字节,有符号扩展

  例 2:

  ADD R1,ARRAY1 ;ARRAY1 为半字数组

ADR R2,ARRAY2 ;ARR

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top