ARM汇编语言程序中ADR和LDR有什么区别
时间: 2023-10-18 17:04:19 浏览: 47
在ARM汇编语言中,ADR和LDR指令都是用来访问内存地址的指令,但是它们有不同的作用。
ADR指令是用来计算一个变量的地址,但不会将变量的值加载到寄存器中。它的语法如下:
```
ADR Rd, label
```
其中,Rd是目标寄存器,label是变量的标签名。
LDR指令则是用来将内存中的值加载到寄存器中。它的语法如下:
```
LDR Rd, [Rn, #offset]
```
其中,Rd是目标寄存器,Rn是存储地址的寄存器,offset是偏移量。
因此,ADR和LDR的区别在于,ADR只是计算变量的地址,而LDR则是将变量的值加载到寄存器中。
相关问题
汇编语言ADR1 DW DB1
ADR1 DW DB1是一条汇编语言的指令,其中DW表示定义一个字型别的变量,而DB则表示定义一个位元组型别的变量。在这个指令中,ADR1是变量名,DB1是变量的值。具体来说,DW表示将两个位元组分配给变量ADR1,而DB则表示将一个位元组分配给变量DB1。因此,这条指令的作用是定义一个名为ADR1的变量,并将其值设置为DB1。
arm汇编中如何获取符号地址
在ARM汇编中,同样可以使用符号名称来代表地址。如果想要获取符号地址,可以使用汇编指令`ADR`或者`LDR`。
1. `ADR`指令
`ADR`指令可以将一个符号的地址加载到寄存器中。例如,假设有一个名为`label1`的符号,它代表一个内存地址,可以使用以下指令将它的地址加载到寄存器`R0`中:
```
ADR R0, label1
```
这条指令将`label1`的地址加载到寄存器`R0`中。此时,`R0`中存储的就是`label1`的地址。
2. `LDR`指令
`LDR`指令可以将一个符号的地址从内存中加载到寄存器中。例如,假设有一个名为`label1`的符号,它代表一个内存地址,可以使用以下指令将它的地址从内存中加载到寄存器`R0`中:
```
LDR R0, =label1
```
这条指令将`label1`的地址从内存中加载到寄存器`R0`中。需要注意的是,`LDR`指令后面要跟上`=label1`,这表示要将`label1`的地址作为立即数加载到寄存器中。如果直接使用`LDR R0, label1`,会被解释为从`label1`地址所指向的内存中读取数据,而不是加载地址本身。