### ARM汇编中ldr与adr的区别 在ARM汇编语言编程中,`ldr`与`adr`是非常重要的两条指令,它们分别用于加载数据和获取地址。这两条指令虽然功能相似,但在具体应用场合中有着本质的区别。下面将详细介绍这两条指令的工作原理、应用场景及其区别。 #### 1. LDR(Load Register)指令 `ldr`指令主要用于从内存中加载数据到寄存器中。其基本语法格式如下: ```assembly ldr <register>, [<address_register>, #<offset>] ``` 其中,`<register>`表示目标寄存器,`<address_register>`表示包含基地址的寄存器,`<offset>`则代表相对于基地址的偏移量。 在提供的示例代码中,有一条典型的`ldr`指令被使用: ```assembly ldrr0, _start ``` 这条指令的功能是从内存地址`_start`处加载数据,并将其存储到寄存器`r0`中。这里的`_start`可以理解为一个符号,它在链接阶段被解析成实际的内存地址。执行此指令后,`r0`中的值取决于`_start`指向的具体内存地址所保存的数据。根据示例中的调试信息: ```assembly c008000:e59f000c ldr r0, [pc, #12]; c008014<_start> ``` 可以推断出`_start`指向的内存地址中存储的值为`0xe1a00000`,因此执行完该`ldr`指令后,`r0`的值即为`0xe1a00000`。 #### 2. ADR(Address Register)指令 `adr`指令的作用是计算并加载一个符号的地址到寄存器中。其基本语法格式如下: ```assembly adr <register>, <symbol> ``` 其中,`<register>`表示目标寄存器,`<symbol>`则代表一个符号或标号。 在示例代码中,`adr`指令同样被调用: ```assembly adrr0, _start ``` 这条指令的功能是将`_start`的地址计算后存入寄存器`r0`中。值得注意的是,`adr`指令计算的地址是基于当前程序执行位置的相对地址,而不是绝对地址。这意味着如果程序在不同的地址上运行,通过`adr`计算出来的地址也会不同。根据示例中的调试信息: ```assembly c008004:e28f0008 addr r0, pc, #8; 0x8 ``` 可以看到,`adr`指令实际上执行了相对位置的计算,将`pc`(程序计数器)加上8得到的值赋给了`r0`。当代码在地址`0x0c008000`运行时,`r0`的值为`0x0c008014`;而如果代码在地址0运行,则`r0`的值为`0x00000014`。由此可见,`adr`指令得到的地址是相对的,依赖于程序的实际运行位置。 #### 3. 特殊形式:LDR Absolute Address 除了普通的`ldr`指令外,还有一种特殊形式的`ldr`指令,它可以用来加载一个符号的绝对地址到寄存器中: ```assembly ldrr0, =_start ``` 这条指令的功能是将`_start`的绝对地址加载到`r0`中。与`adr`不同的是,这种形式的`ldr`指令加载的是符号的绝对地址,这意味着无论程序在哪里运行,`r0`中的值始终不变。在示例中: ```assembly c008008:e59f0008 ldr r0, [pc, #8]; c008018<_start+0x4> ``` 可以看到,执行完这条指令后,`r0`中的值为`0x0c008014`,这是`_start`的绝对地址。需要注意的是,这种形式的`ldr`指令需要额外的空间来存放符号的实际地址值。 #### 总结 - **ldr**:用于从内存中加载数据到寄存器中,可以用于加载变量或立即数。 - **adr**:用于计算并加载一个符号的相对地址到寄存器中,适用于动态定位。 - **ldr 绝对地址**:用于加载符号的绝对地址到寄存器中,适用于固定位置。 掌握这些指令的不同用途和特点对于编写高效的ARM汇编语言程序至关重要。在实际编程过程中,需要根据具体的应用场景选择合适的指令以实现所需的功能。































- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 外墙外保温工程施工项目管理.pdf
- 方家山核电工程子项运行办公楼通信系统安装施工方案.doc
- 施工管理质量管理安全管理文明施工组织网络.doc
- 土地开发整理项目预算编审软件培训.ppt
- 通信工程概预算培训试题与答案.doc
- 共建网络世界共创数字未来优秀作文(优秀4篇).docx
- 完美版课件第一章单片机基础知识.ppt
- C51-Projects-单片机开发资源
- 信息类商务类网站特点分类设计要点.ppt
- vue-pure-admin-Typescript资源
- GinSkeleton-Go资源
- php-ext-xlswriter-PHP资源
- pdfh5-JavaScript资源
- com-计算机二级资源
- 基于图像识别的智慧零售商品识别 ,本项目使用图像识别系统进行核心实现
- 毕业设计服务端-毕业设计资源


