第6章 ARM汇编伪指令与伪操作
本章将详细介绍进行汇编语言程序设计时所用的ARM/Thumb汇编语言伪指令、由ARM公司推出的开发工具所支持的伪操作以及GNU ARM开发工具所支持的伪操作。
内容提要
汇编语言伪指令
ARM汇编语言伪操作
ARM汇编伪操作
GNU ARM汇编伪操作
汇编语言伪指令
伪指令是ARM处理器支持的汇编语言程序里的特殊助记符,它不在处理器运行期间由机器执行,只是在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作。
ARM汇编语言伪指令
LDR伪指令将一个32位的常数或者一个地址值读取到寄存器中,可以看作是加载寄存器的内容。
LDR{cond} register , = expression
如果加载的常数符合MOV或MVN指令立即数的要求,则用MOV或MVN指令替代LDR伪指令。
如果加载的常数不符合MOV或MVN指令立即数的要求,汇编器将常量放入内存文字池,并使用一条程序相对偏移的LDR指令从内存文字池读出常量。
伪指令语句:
LDR R0, =0x0AA00;R0<—0x0AA00
汇编后:
MOV R0, #43520
它将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。
ADRL{cond} register , = expression
汇编器在处理源程序时,ADRL伪指令被两条具有ADRL等同功能的ARM指令(通常用ADD或SUB指令)替代。
如果不能用两条指令实现ADRL伪指令的功能,则编译器报告错误,编译失败。
以下指令存放在0x8000起始的地址单元,分析汇编后的结果。
.global _start
.text
_start:
MOV R0, #0x0F
ADRL R0, _start
.end
解:汇编后的结果为:
0x00008000 MOV R0, #0x0F
0x00008004 SUB R0, PC, #12
0x00008008 NOP (MOV R0,R0)
它将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。当地址是字节对齐时,取值范围为-255~+255
ADR{cond} register , = expression
第6章 ARM汇编伪指令与伪操作 来自淘豆网www.taodocs.com转载请标明出处.