ZHCU820Y September 2004 – June 2021
被调用函数(子函数)必须执行以下任务:
size of all local variables + max = constant
max 参数用于指定放置在每次调用的参数块中的所有参数的大小。
结构体和联合体始终通过引用传递。
通过这种方式,调用方可以用聪明的方式告知被调用函数从哪里返回结构体。例如,在语句 s = func(x) 中,其中 s 是一个结构体,f 是一个返回结构体的函数,调用方只需将 s 的地址作为第一个参数传递并调用 f。然后,函数 f 将返回结构体直接复制到 s 中,并自动执行赋值。
您必须小心操作以正确地声明返回结构体的函数,无论是在调用它们的位置(使调用方正确设置第一个参数)还是声明它们的位置(使函数知道复制结果)。
以下示例是被调用函数如何响应调用的典型示例:
func: ; Called function entry point
PUSH.W r10
PUSH.W r9 ; Save SOE registers
SUB.W #2,SP ; Allocate the frame
:
: ; Body of function
:
ADD.W #2,SP ; Deallocate the frame
POP r9 ; Restore SOE registers
POP r10
RET ; Return