ZHCUCH3A November 2024 – March 2025 F29H850TU , F29H859TU-Q1
可用寻址寄存器中的寄存器 A15 专用于栈指针寄存器 (SP = A15)。A15 寄存器可以访问 CPU 的完整 32 位地址范围 (4GB)(请参阅图 2-2)。
栈的操作如下:
如果需要在软件栈上传递参数,则汇编代码结构如下所示:
; Allocate Parameter Space On Stack:
ADD.U16 A15, A15, #PARAMETER_SPACE
;....pass parameters on stack…
;....pass parameters in registers…
CALL.PROT @func
; 32-bit RPC automacally pushed on stack
; A15 = A15 + 8 (stack pointer incremented by 8 bytes = 64-bits)
; There is a 32-bit hole in the stack that can be used to save
; De-allocate Parameter Space From Stack
SUB.U16 A15, A15, #PARAMETER_SPACE
如果需要在软件栈上分配局部变量,则代码结构如下所示:
func:
; Allocate Local Variable Space On Stack:
ADD.U16 A15, A15, #PARAMETER_SPACE
; ... save on stack any registers used that need to be preserved across call..
; ... function code....
; ... restore from stack any registers used that need to be preserved across call..
; De-allocate Local Variable Space From Stack
SUB.U16 A15, A15, #PARAMETER_SPACE
RET.PROT
; 32-bit RPC automacally popped from stack
; A15 = A15 - 8 (stack pointer decremented by 8 bytes = 64 bits)
在进行正常函数调用时:返回程序计数器(RPC,保持先前的返回地址)寄存器内容被压入栈指针 (SP = A15) 指向的软件栈上。然后,使用新的返回地址初始化 RPC 寄存器。
在正常函数返回时:从 RPC 寄存器读取返回地址。然后,使用软件栈上的值恢复 RPC 寄存器。
有关 RPC 的更多详细信息,请参阅节 2.2