深入理解什么叫满堆栈、空堆栈? 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
时间: 2024-03-30 18:34:42 浏览: 22
满堆栈是指栈中已经没有空闲的空间,无法再进行入栈操作;空堆栈是指栈中没有任何元素,无法进行出栈操作。
执行完指令STMDB R8,(R3-R5)后,内存单元中的内容如下:
地址 数据
n+12 R4
n+8 R3
n+4 R8
n DEFOOFED
因为STMDB指令会将R8、R9、R10依次入栈,所以R8的值不变。因此,将R8的值填入表第3列中为n。
相关问题
若sp=20002000H,r1=1234H,r2=5678H,r3=9ABCH,r4=DEF0,试说明执行push{r1-r4}后,sp=?,r5=?,r6=?并画图指出堆栈中各单元的内容。
执行push{r1-r4}指令后,r1-r4的值依次入栈,同时SP减4,因为每个寄存器占4个字节。
所以,执行完push指令后,SP=1FFFECCH,r5-r15的值不变。
堆栈中各单元的内容如下图所示:
```
| r4 |
| DEF0 |
|---------|
| r3 |
| 9ABC |
|---------|
| r2 |
| 5678 |
|---------|
| r1 |
| 1234 |
|---------|
| ...... | (栈底)
|---------|
| ...... |
|---------|
| ...... |
|---------|
| ...... |
|---------|
| r15 |
|---------|
| r14 |
|---------|
| ...... |
|---------|
| r5 |
|---------|
```
其中,栈底地址为2000000H,栈顶地址为1FFFECCH,每个单元占4个字节。
cortex-m3函数传递是通过那几个寄存器
在 ARM Cortex-M3 中,函数参数/结果传递一般使用以下寄存器:
• R0:函数参数/结果传递的寄存器。
• R1:函数参数/结果传递的寄存器。
• R2:函数参数/结果传递的寄存器。
• R3:函数参数/结果传递的寄存器。
• R4-R11:可选的函数参数传递的寄存器(具体取决于函数的参数数量和类型)。
• LR:链接寄存器,在函数调用时保存返回地址。
• SP:堆栈指针寄存器,用于管理堆栈。
在函数调用期间,函数参数将传递到寄存器 R0-R3,如果有更多参数,则会传递到寄存器 R4-R11。函数返回值通常保存在寄存器 R0 中。在函数调用结束时,返回地址被保存在链接寄存器 LR 中,并且堆栈指针 SP 可能会发生改变。