[嵌入式]Cortex-A8处理器编程(下)

本文详细介绍了Cortex-A8处理器编程中的四种伪指令:ADR、ADRL、LDR和NOP,包括它们的功能、地址取值范围及应用示例。此外,还讲述了ARM汇编程序规范,如标号、指示符、预定义变量和内置变量,并讨论了子程序调用规则和C/C++中内嵌汇编的使用。
摘要由CSDN通过智能技术生成

第3章 Cortex-A8处理器编程

3.6  指令系统

ARM伪指令不属于ARM指令集中的指令,是为了编程方便而定义的。伪指令可以像其它ARM指令一样使用,但在编译时这些指令将被等效的ARM指令代替。ARM伪指令有四条,分别为ADR伪指令、ADRL伪指令、LDR伪指令、NOP伪指令。

ARM伪指令——小范围的地址读取

ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。

 

地址表达式expr的取指范围:

当地址值不是字对齐时,其取值范围为-255~255;

当地址值是字对齐时,其取值范围为-1020~1020;

当地址值是16字节对齐时,其取值范围将更大。

应用示例(源程序):

  ...

    ADR     R0,Delay    

    ...

Delay

    MOV     R0,r14

    ...

使用伪指令将程序标号Delay的地址存入R0

ARM伪指令——中等范围的地址读取

ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址 。在汇编编译器编译源程序时,ADRL伪指令被编译器替换成两条合适的指令。若不能用两条指令实现,则产生错误,编译失败。

 

地址表达式expr的取指范围:

当地址值不是字对齐时,其取址范围为-64K~64K;

当地址值是字对齐时,其取址范围为-256K~256K;

当地址值是16字节对齐时,其取址范围将更大。

应用示例(源程序):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值