在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP—StackPointer)实现做一次调整,SP总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做...
栈(Stack): 一种顺序数据结构,满足后进先出(Last-In / First-Out)的原则,由编译器自动分配和释放。 堆(Heap):类似于链表结构,可对任意位置进行操作,通常由程序员手动分配,使用完需及时释放(free),不然容易造成内存泄漏。 1、栈 SP:stack pointer栈指针,总是指向栈顶。 计算机中的堆栈主要用来保存临时数据、局...
当将其作为32bit栈帧指针寄存器(stack pointer) 的时候,使用WSP来引用它。 当将其作为62bit栈帧指针寄存器(stack pointer) 的时候,使用SP来引用它。 当将其作为32bit零寄存器(zero register)的时候,使用WZR来引用它。 当将其作为62bit零寄存器(zero register)的时候,使用ZR来引用它。 另外需要注意的,像FP(X29)...
当将其作为 32bit 栈帧指针寄存器( stack pointer ) 的时候,使用 WSP 来引用它。 当将其作为 62bit 栈帧指针寄存器( stack pointer ) 的时候,使用 SP 来引用它。 当将其作为 32bit 零寄存器( zero register )的时候,使用 WZR 来引用它。 当将其作为 62bit 零寄存器( zero register )的时候,使用 ZR ...
R13,栈指针(Stack Pointer) R13寄存器中存放的是栈顶指针,M3/M4 的栈是向下生长的,入栈的时候地址是往下减少的。 裸机程序不会用到PSP,只用到MSP,需要运行RTOS的时候才会用到PSP。 堆栈主要是通过POP,PUSH指令来进行操作。在执行 PUSH 和 POP 操作时,...
R11:frame pointer,FP寄存器 R12:IP寄存器,用于暂存SP R13:stack pointer,SP寄存器 R14:link register,LR寄存器 R15:PC寄存器 我们知道每个进程都有自己的栈,实际上每个函数也有自己的栈(尽管这些栈在空间上是连续的,都是在进程的栈上)。而在ARM上,函数的栈帧是由SP寄存器和FP寄存器来界定的。
R13:又叫堆栈指针寄存器(Stack pointer)SP,SP通常用于保存堆栈地址,在使用入栈和出栈指令时,SP中的堆栈地址会自动的更新。 R12:又叫内部过程调用暂存寄存器(Intra-Procedure-call scratch register)IP,主要用于暂存SP。 R11:又叫帧指针寄存器(Frame pointer)FP,通常指向一个函数的栈帧底部,表示一个函数栈的开始位置...
在AArch64执行状态下,除了通用寄存器外,每一个异常级别都会有一个栈指针寄存器(StackPointer Register, SP),栈指针寄存器为SPEL0和SPEL1。异常级别用于区分指令的执行权限,我们将在本章的第四期介绍。如果处理器实现中包含EL2,那么还有SPEL2。如果处理器实现中包含EL3,那么还有SPEL3。详情可参考链接[5]。
在AArch64执行状态下,除了通用寄存器外,每一个异常级别都会有一个栈指针寄存器(StackPointer Register, SP),栈指针寄存器为SPEL0和SPEL1。异常级别用于区分指令的执行权限,我们将在本章的第四期介绍。如果处理器实现中包含EL2,那么还有SPEL2。如果处理器实现中包含EL3,那么还有SPEL3。详情可参考链接[5]。
MSP:Main Stack Pointer,主栈指针 PSP:Process Stack Pointer,进程栈指针 Cortex-M架构的压栈和弹栈过程: 1、压栈:SP先自减4,然后将待压入的数据存放到SP所指的地址 2、弹栈:从SP指针所指的地址读出数据,然后SP指针自增4 Cortex-M内核何时使用MSP何时使用PSP?