stmdb sp!,{r0-r3,r12,lr}
时间: 2023-09-11 07:07:46 浏览: 72
这是 ARM 汇编指令,用于将 r0-r3、r12 和 lr 这些寄存器的值保存到栈中。具体来说,这条指令会将 r0-r3、r12 和 lr 寄存器的值依次压入当前栈顶指针 sp 指向的内存位置,然后将栈顶指针 sp 减去相应的偏移量,使得它指向新的栈顶位置。这个操作通常在函数调用或者中断处理的开头部分执行,用于保存当前函数或者中断处理前的寄存器状态,以便在函数或者中断处理结束后恢复现场。对应的恢复指令为 `ldmia sp!,{r0-r3,r12,lr}`,用于将之前保存在栈中的寄存器值恢复到对应的寄存器中。
相关问题
ARM汇编语言BNE OS_CPU_SR_Save
`BNE`和`OS_CPU_SR_Save`都是ARM汇编语言中的指令,但它们的作用和用法完全不同。
`BNE`是一条条件分支指令,用于在条件码为非零时跳转到指定的代码地址。而`OS_CPU_SR_Save`是uC/OS-II实时操作系统中的一个汇编函数,用于保存当前CPU的状态寄存器(SR)的值到栈中。具体来说,`OS_CPU_SR_Save`的汇编代码如下:
```
OS_CPU_SR_Save
STMDB SP!,{R0}
MRS R0, CPSR
STMDB SP!,{R0}
BX LR
```
该函数的作用是将当前CPU的状态寄存器(SR)的值保存到栈中,以便在需要恢复SR时可以通过栈中的值进行恢复。其中,`STMDB SP!,{R0}`和`MRS R0, CPSR`分别将SR的值保存到栈中,`BX LR`用于返回到调用该函数的指令处继续执行。
需要注意的是,`OS_CPU_SR_Save`是uC/OS-II实时操作系统中的一个汇编函数,仅适用于该操作系统的环境下。如果要在其他环境中保存SR的值,需要使用不同的方法和指令。
深入理解什么叫满堆栈、空堆栈? R3-333333, R4-4444444, 5555555550内存n-12n+12的内容见表第2列。执行完指令STMDB 已知R8=n, R8,(R3-R5后,内存单元中的内容是什么?R8=?将结果填入到表第3列中。 指令执行前数据 指令执行后数据 地址 12344321 n-12 56788765 n-8 9ABCCBA9 n-4 DEFOOFED 1. 43211234 n+4 CBA99ABC n+8 n+12 75311357 R8
满堆栈是指栈中已经没有空闲的空间,无法再进行入栈操作;空堆栈是指栈中没有任何元素,无法进行出栈操作。
执行完指令STMDB R8,(R3-R5)后,内存单元中的内容如下:
地址 数据
n+12 R4
n+8 R3
n+4 R8
n DEFOOFED
因为STMDB指令会将R8、R9、R10依次入栈,所以R8的值不变。因此,将R8的值填入表第3列中为n。