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

arm的汇编指令精选合辑

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

DONE ;转向Thumb子程序DONE

  SWINE SWI_WriteC

  B LOOP

  DONE SWI SWI_Exit

  ALIGN

  TEXT DATA

  = "Hello World",&0d,0

  END

  3.4 ARM宏汇编

  本节将详尽地介绍汇编器所提供的特征,包括伪指令,宏汇编以及指示标志。

  3.4.1 预定义变量

  1 预定义变量的寄存器的协处理器名

  ARM汇编器对ARM的寄存器进行了预定义,所有的寄存器和协处理器都是大小写敏感的。预定义的寄存器如表3—7所示。

  (1) 定义的寄存器名

  R0~R15

  R0~r15

  a1~a4

  v1~v8

  sp和SP

  Ir和LR

  Pc和PC

  Sl和SL

  表3---7为ARM寄存器列表及含义

  寄存器特殊定义其它定义含义

  R15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0V8V7V6V5V4V3V2V1a4a3a2a1PCLRSPIPFPSLSBWR程序计数器链接寄存器堆栈指针程序调用暂存寄存器变量寄存器8/帧指针(ARM状态)变量寄存器7/堆栈上限指针(ARM)变量寄存器6/基址寄存器(进程ID/重入/共享库中)变量寄存器5变量寄存器4(Thumb状态工作寄存器)变量寄存器3变量寄存器2变量寄存器1参数/结果/暂寄存器4参数/结果/暂寄存器3参数/结果/暂寄存器2参数/结果/暂寄存器1

  R0~R3通常用来传递参数和保存结果,也可以保存子程序调用的中间结果,在ARM状态下,R12(也称为IP)通常也保存子程序调用的中间结果。R14~R11通常保存程序的局部变量,也可以用V1~V8表示,但是V1~V4只能在Thumb状态下使用。

  R12~R15一般有特殊用途,也通常称为IP,SP,LR,PC。

  (1)定义的程序状态寄存器名

  cpsr和CPSR

  spsr和SPSR

  (2)定义的浮点数寄存器名

  f0~f7

  F0~F7

  (3)定义的协处理器名

  p0~p15

  c0~c15

  2 内置变量

  表3—8列出了ARM汇编器所定义的内置变量,值得注意的是内置变量的设置不能用SETA,SETL,或SETS等表示词来设置,只能用字符或条件表达式来设置。例如:

  IF {ARCHITECTURE}="4T"

  表3—8 变量含义

  (PC )或者(VAR)或者@(TRUE)(FALSE)(OPT)(CONFIG)(ENDIAN)(CODESIZE)(CPU)(ARCHITECTURE)(PCSTOREOFFSET)当前指令的地址存储区计数器的当前值逻辑常量为真逻辑常量为假当前设置列表选项,OPT用来保存当前列表选项,改变选项值,恢复设置它的原始值如果汇编器在ARM模式下值为32,如果汇编在Thumb 模式下值为16如果汇编器在big—endian模式下为big,如果汇编器在某些方面little—endian模式下值为little如果汇编Thumb代码值为16,否则为32选定的CPU符号,如果没有说明,则为genericARM选定的ARM架构的值,3,3M,4,4T,4TxMSTRpc,[…]或STM Rb,(…PC)的地址和PC的存储值之间的偏移量

  3.4.2 伪指令

  ARM汇编器采用两类伪指令,一类是为ARM伪指令,另一类是Thumb伪指令。在ARM状态下可以使用的伪指令如下:

  1 ADR伪指令

  功能:把程序相关的或寄存器相关的地址调进寄存器中。

  格式:ADR{condition} register,expression

  其中:

  register 读取的寄存器。

  Expression 程序相关的或寄存器相关的表达式,必须是:

  255字节以内的非字对准地址;

  1020字节以内的字对准地址。

  寄存器相关的表达式由1个寄存器加或减1个数字常数组成(见"ⅴ"或者MPA介绍。)程序相关的表达式由PC加或减1个数字组成,一般它可为标号或加减数字表达式。

  注释:

  ADR伪指令通常汇编成一条指令,汇编器产生一条ADD或SUB指令以读入地址。如果表达式是关于程序相关的,读取地址只能是ADR伪指令所在代码所在的地址。

  例:

  start MOV R0,#10

  ADR R4,start ; 等同于SUB,R4,PC,#0xc

  2 ADRL伪指令

  功能:与ADR功能类似,但是可以调进范围更广的地址。

  格式:

  ADR{condition} register,expression

  其中:

  register 读取的寄存器。

  Expression 程序相关的或相关的表达式,必须是:

  64KB以内的非对准地址;

  256KB以内的字对准地址。

  注释:

  ADRL伪指令通常汇编成2条指令,即使地址在第1条指令已经产生,也会产生1条冗余指令。如果表达式是关于程序表达式相关的,读取地址只能是ADRL伪指令所在的代码段所在的地址。注意:该指令只能在ARM状态下使用,在Thumb状态下不能使用。

  例:

  start MOV R0,#10

  ADRL R4,start+60000;等同于ADD R4,PC,#0xE800

  等同于ADD R4,R4,#0x254

  3 LDFD伪指令

  功能:将一个双精度的浮点常量放进

  格式:

  LDFD{condition} fp-register,=expression

  其中:

  condition 可选的条件代码。

f

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

网站地图

Top