第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
伪指令语句
LDR R1,=DD ; R1<—DD
汇编后:
LDR R1,[PC,offset_Lpool]
…
Lpool DCD DD
利用ARM汇编语言实现跑马灯程序
GPFCON EQU 0x56000050
GPFDAT EQU 0x56000054
GPFUP EQU 0x56000058
EXPORT LEDTEST
AREA LEDTESTASM,CODE,READONLY ;该伪指令定义了一个代码段,段名为LEDTESTASM,属性只读
LEDTEST
;设置GPF4-GPF7为output
ldr r0,=GPFCON
ldr r1,=0x5500
str r1,[r0]
;禁止GPF4-GPF7端口的上拉电阻
ldr r0,=GPFUP
ldr r1,=0xff00
str r1,[r0]
;将数据端口F的数据寄存器的地址赋值给寄存器r2
ldr r2,=GPFDAT
;跑马灯循环
ledloop1
ldr r1,=0xf0
str r1,[r2] ;使GPF7输出高电平,D9-D12灯会灭
bl delay1 ;调用延迟子程序
ledloop2
ldr r1,=0x0
str r1,[r2] ;使GPE7输出低电平D9-D12灯亮
bl delay2 ;调用延迟
;延迟程序
delay1
ldr r3,=0x1ffff ;设置延迟的时间
delay3
sub r3,r3,#1 ;r3=r3-1
cmp r3,#0x0 ;将r3的值与0相比较
bne delay3 ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句
b ledloop2
mov pc,lr ;返回
;延迟程序
delay2
ldr r3,=0x2ffff ;设置延迟的时间
delay4
sub r3,r3,#1 ;r3=r3-1
cmp r3,#0x0 ;将r3的值与0相比较
bne delay4 ;比较的结果不为0(r3不为0),继续调用delay1,否则执行下一条语句
b ledloop1
mov pc,lr ;返回
END ;程序结束符
它将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。
ADRL{cond} register , = expression
第6章-ARM汇编伪指令与伪操作 来自淘豆网www.taodocs.com转载请标明出处.