ARM语言MRS LR,PC
时间: 2023-09-16 14:12:54 浏览: 70
在ARM汇编语言中,MRS指令用于将特定的系统寄存器的值读取到通用寄存器中。在此指令中,LR和PC都是ARM的寄存器。其中,LR寄存器是链接寄存器,用于存储返回地址,而PC寄存器则是程序计数器,用于存储正在执行的指令地址。
因此,MRS LR, PC指令的作用是将当前指令的地址(也就是PC寄存器的值)读取到LR寄存器中,以便在程序执行过程中进行函数调用或分支跳转时,能够正确地返回到调用或跳转前的执行位置。
需要注意的是,在ARM指令集中,MRS指令只能用于读取部分指定的系统寄存器,而不能用于读取所有的系统寄存器。
相关问题
ARM64 怎么获取UCOSIII任务切换的PC值和LR值
获取UCOSIII任务切换的PC值和LR值,可以在任务切换时,在UCOSIII的源码中添加相应的代码实现。
在ARM64架构下,任务切换时,需要保存当前任务的寄存器值,包括PC和LR等寄存器。因此,获取UCOSIII任务切换的PC值和LR值,可以通过在任务切换时,在任务切换的汇编代码中添加相应的指令,将PC和LR的值保存到指定的内存地址中。在UCOSIII的源码中,可以找到任务切换的汇编代码,如下所示:
```
// Save R19-R30, LR and SPSR (Interrupt Mode)
sub sp, sp, #(18*8)
stp x19, x20, [sp, #16*0]
stp x21, x22, [sp, #16*2]
stp x23, x24, [sp, #16*4]
stp x25, x26, [sp, #16*6]
stp x27, x28, [sp, #16*8]
stp x29, x30, [sp, #16*10]
mrs x0, SPSel
stp x0, x1, [sp, #16*12]
mrs x0, SPSR_el1
stp x0, x1, [sp, #16*14]
// save the PC value to a specific address
adr x0, TaskSwitch
str x0, [sp, #16*16]
```
在上述代码中,最后一条指令`str x0, [sp, #16*16]`将PC值保存到了`sp+16*16`的内存地址中。如果需要获取PC值,只需要读取该内存地址中的值即可。
同样地,如果需要获取LR值,可以在任务切换的汇编代码中添加相应的指令,将LR值保存到指定的内存地址中。
ARM64 怎么获取UCOSIII任务切换时的PC值和LR值
要获取UCOSIII任务切换时的PC值和LR值,可以采用以下方法:
1. 在UCOSIII中,任务切换是通过PendSV异常实现的,因此可以通过在PendSV异常处理函数中获取PC和LR值。
2. 在PendSV异常处理函数中,可以使用汇编指令获取PC和LR值。具体方法如下:
- 获取PC值:使用指令“MRS X0, PSP”将当前任务的堆栈指针PSP值存储到X0中,然后使用指令“LDR X1, [X0, #16]”将PSP中保存的PC值读取到X1中。
- 获取LR值:使用指令“MRS X0, PSP”将当前任务的堆栈指针PSP值存储到X0中,然后使用指令“LDR X1, [X0, #8]”将PSP中保存的LR值读取到X1中。
- 注意:以上指令均为ARM汇编指令,需要在C语言中使用内嵌汇编的方式来调用。
3. 获取PC和LR值后,可以将它们保存到全局变量中,供其他代码使用。或者可以在任务切换时打印PC和LR值,方便调试。
需要注意的是,获取PC和LR值可能会受到编译器优化的影响,因此需要仔细测试和调试。同时,获取PC和LR值可能会涉及到操作系统内核的底层实现,需要有一定的底层开发经验和汇编语言基础。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)