ARM9汇编学习:ldr、adr与局部标注解析

需积分: 9 3 下载量 137 浏览量 更新于2024-09-12 收藏 20KB DOCX 举报
"这篇文档总结了ARM9处理器学习过程中遇到的一些常见疑难问题,主要包括ARM汇编中的百分号用法、ldr和adr指令的区别以及CPSR_cxsf和MACRO-MEND的概念。" 在ARM汇编语言中,百分号(%)的使用通常涉及到局部标注。局部标注用于在代码内部标记特定的位置,便于条件跳转或循环等控制流程。例如,`%B0`是一种局部跳转标注,这里的`B`表示向后查找(Backward),`0`是标注的编号。`bcc%B0`指令意味着如果条件满足,程序会跳转到前面定义的`0`号标注处。局部标注的查找方向可以是向前(Forward)、向后或者同时尝试,具体由前缀字母决定。 关于`ldr`和`adr`指令,它们在加载地址到寄存器时有不同的含义。`ldr`指令用于从内存中加载数据到寄存器,它可以加载立即数、相对地址或者绝对地址,通常用于加载函数地址、变量值等。而`adr`指令则是计算当前指令地址与立即数的和,然后将结果加载到寄存器,因此`adr`常用于计算相对于当前指令的相对地址。例如,在代码中,`adrl r0, ResetEntry`意味着将`ResetEntry`相对于当前指令的地址加载到`r0`,而如果是`ldrr2, BaseOfROM`,则意味着加载`BaseOfROM`的绝对地址到`r2`。 `CPSR_cxsf`指的是Current Program Status Register(当前程序状态寄存器)的一部分,包括条件码(c)、扩展标志(x)、半精度浮点异常(s)和用户/系统模式(f)。CPSR寄存器保存了处理器的运行状态,如条件标志、中断禁止位、处理器模式等,`^`操作符通常用于位清除,即`CPSR_cxsf ^ 0x12`这样的表达式会改变CPSR中某些位的状态。 `MACRO-MEND`是宏定义和结束的指示符,用于编写汇编程序的宏。`MACRO`定义了一个宏开始,允许用户创建可重复使用的代码块,而`MEND`则标志着宏定义的结束。宏机制允许在汇编程序中实现代码复用和参数化,提高编程效率。 这份资源主要涵盖了ARM汇编中的局部标注、`ldr`与`adr`指令的区别、CPSR寄存器的部分状态位操作以及宏定义的基本概念,对于理解ARM9处理器的编程具有一定的帮助。