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

arm的汇编指令精选合辑

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

的保存处理器状态格多字节传送的有效方式。ARM硬件中的堆栈分为以下4种:]

  ①满向上生长型:堆栈按高地址方向生长,当前堆栈指针指向一个有效值;

  ②空向上生长型:堆栈按高地址方向生长,当前堆栈指针指向一个空值;

  ③满向下生长型:堆栈按低地址方向生长,当前堆栈指针指向一个有效值;

  ④空向下生长型:堆栈按低地址方向生长,当前指针指向一个空值。

  图3-2说明了4条带不同变量和多字节传送前后和内存变化,以及基寄存器的变化情况。指令执行前的基寄存器是R9,指令执行后的基寄存器是R9’。

  常见多字节传送指令如表3-1所示。

  表3-1内FD|ED|FA|EA后缀只在堆栈时使用。F和E、分别代表指针指向为满或空。A和D分别表示堆栈是否向上或向下生长。例如:堆栈如果是向上生长,STM指令向上存放,LDM指令向下读取。IA、IB、DA、DB后缀在一般数据传送时使用。注意:LDMED与LDMIB是同一条指令(下同)。

  图3-2多寄存器传送示意

  表3-1常见多字节传送指令

  5 协处理器寻址方式

  ARM协处理器寻址方式包括以下4种方式:

  (1)寄存器直接寻址([Rn]);

  (2)前普址偏移寻址([Rn,#±《immed_8*4》]{!});

  (3)后变址偏移寻址([Rn],#±《immed_8*4》);

  (4)带参数无偏移寻址([Rn],{8-bit copro.OpTIon}。

  3.2.2 ARM指令的条件执行

  每条ARM指令都是有条件执行,包括特权调用和协处理器指令,可根据执行结果来选择是否更新条件码。若要更新条件码,则指令中须包含后缀"S"。条件占32位指令的高4位。

  一些指令(如CMP、CMN、TST、和TEQ不需要后缀"S"。它们唯一的功能就是更新条件标志,且始终更新条件码。更新之前保持不变。没执行的条件指令对标志没影响,一些指令只更新部分标志,不影响其他标志。

  可以根据另外指令设置的标志,有条件地执行某条指令,分如下两种情况:

  l在更新标志的指令后立即执行;

  l在插入的几条不更新标志的指令后执行。

  条件码中的N、Z、C和V位的值将决定指令如何执行。条件如表3-2所示。

  表3-2 ARM条件码

  表3-2中符号"*"的说明:HS、LO、HI、LS这4个条件码指的是无符号数,GE、LT、GT、LE这4个条件码指的是符号数。

  3.2.3 Load/Store类指令

  1. 单字和无符号字节Load/Store类指令

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

  格式:

  (1)零偏移(zero offet)

  LDR|STR{《条件码}}{B}{T} Rd,[Rn] ;((Rn))→Rd

  零偏移指的是将Rn的内容作为传送数据的地址。

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

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

  ;((Rn)+offset)→Rd

  ;有"!",(Rn)+offset→Rn

  ;无"!",Rn不变

  前变址指的是在数据传送之前,将偏移量加到Rn中,其结果作为传送数据的存储地址。若使用后缀"!",则结果写回到Rn中。Rn不允许是Rn15。

  (3) 程序相对偏移(program-relaTIve)

  LDR|STR{《条件码》}Rd,Ladel ;(Label) →Rd

  程序相对偏移指的是由PC计算偏移量,并将PC生成指令。不能使用后缀"!"。"LDR Rd,Label"等价为"LDR Rd,[Rn],offset"等价为"((Rn))→Rd,(Rn)+offset→Rn]"

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

  LDR|STR{《条件码》{B}{T} Rd,[Rn],《offset》

  后变址指的是将Rn的值用作传送数据的存储器地址,数据传送后,偏移量加到Rn中,结果写回到Rn。Rn不允许是R15。"LDR Rd,[Rn],offset"等价为"((Rn))→,(Rn)+offset→Rn"。

  其中:

  B 可选后缀。若有B,则传送Rd的最低有效字节。若操作码是LDR,则将Rd的其他字节清零。

  T 可选后缀。若有T,那么即使处理器在特权模式下,存储系统也将访问看成是处理器在用户模式下。T在用户模式下无效,不能与前变址偏移一起使用T。

  Rd ARM寄存器。

  Rn 存储器的基址寄存器,若指令是带写回(write back)的前变址(后缀为"!")或后变址,或使用T后缀,则不允许Rn与Rd相同。

  Offset Rn上的偏移量。

  Label 程序相对偏移表达式,必须在当前指令的前指令的±4KB内。

  ! 可选后缀。若有"!"则将包含偏移量的地址写回到Rn。若Rn是R15,则不能使用后缀"!"。

  注释:

  (1) offset 说明

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

  (2) exression

其含义是符号表达式,通常是数字整

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

网站地图

Top