blr指令
时间: 2023-09-01 16:07:52 浏览: 147
`blr`指令是一条汇编指令,它用于在ARM架构中实现函数调用。
在ARM中,函数调用遵循一定的调用约定,通常采用堆栈来传递参数和保存返回值。在函数调用时,调用方会将返回地址和一些参数压入堆栈中,然后使用`bl`指令跳转到被调用函数的入口地址。
`blr`指令则是在被调用函数结束时使用,用于返回到调用方的下一条指令执行。它会从堆栈中弹出返回地址,并跳转到该地址,继续执行调用方的代码。
在ARM汇编中,`blr`指令的语法为:
```
blr {reg}
```
其中,`reg`是一个寄存器,存放着返回地址。如果省略了`reg`参数,则`blr`指令会从当前堆栈帧中获取返回地址。
需要注意的是,`blr`指令只能用于返回到调用方函数中,不能用于跳转到其他函数或代码段。如果需要实现跳转,应该使用其他跳转指令,如`b`或`bx`。
相关问题
emit(A64_BLR(tmp), ctx);
根据代码片段来看,这是一个使用C++编写的程序,在程序中使用了emit函数来生成汇编代码。A64_BLR(tmp)是一个汇编指令,表示跳转到tmp地址处执行,然后返回到调用blr指令的下一条指令继续执行。ctx是一个上下文参数,用于指定代码生成的一些参数和选项。通过这段代码可以生成一个跳转到tmp地址的汇编指令序列,并将其插入到程序中。
arm64的br与bl
ARM64中的BR和BL指令都是分支指令,用于跳转到另一个指令地址执行程序。
BR指令(Branch Register)是无条件分支指令,它可以跳转到一个指定的地址。BR指令的格式如下:
```
BR <Xn>
```
其中,Xn指定了跳转的目标地址,它是一个64位寄存器。执行BR指令时,程序会跳转到Xn寄存器中存储的地址继续执行。
BL指令(Branch with Link)也是分支指令,它可以跳转到一个指定的地址,并在跳转之前将当前指令的地址存储到LR(Link Register)寄存器中。BL指令的格式如下:
```
BL <label>
BL <Xn>
BLR <Xn>
```
其中,label是一个标签,Xn是一个64位寄存器。执行BL指令时,程序会跳转到指定的地址,同时将当前指令的地址存储到LR寄存器中。执行完跳转后,程序会从LR寄存器中取回地址,继续执行下一条指令。
总之,BR指令是无条件跳转,BL指令是有条件跳转,并且可以将当前指令的地址保存到LR寄存器中。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)