arm的汇编指令精选合辑
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
- 什么是LED驱动时序?LCD背光驱动程序设计(04-26)
- LCD驱动的移植及其GUI仿真如何进行,LCD数模转换现实原理及其源代码(04-25)
- wince代码写入LCD驱动参考,数码产品怎样分别是不是LCD坏点(04-26)
- ARM微处理器助记符指令及其功能描述(04-30)
- 布线工程师如何充分“掌控”时钟信号?(02-21)
- FPGA组成、工作原理和开发流程(10-13)