ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
被调用函数(子函数)必须执行以下任务:
size of all local variables + max = constant
max 参数用于指定放置在每次调用的参数块中的所有参数的大小。
通过这种方式,调用方可以用睿智的方式告知被调用函数从哪里返回结构体。例如,在语句 s = f(x) 中,其中 s 是一个结构体,f 是一个返回结构体的函数,调用方只需将 s 的地址作为第一个参数传递并调用 f。然后,函数 f 将返回结构体直接复制到 s 中,并自动执行赋值。
无论是在调用函数时(使调用方正确设置第一个参数)还是声明函数时(以便函数知道复制结果),都必须注意正确地声明接受结构体参数的函数。
下述示例是被调用函数如何响应调用的典型示例:
; called function entry point
STMFD SP!, {V1, V2, V3, LR} ; save V1, V2, V3, and LR
SUB SP, SP, #16 ; allocate frame
... ; body of the function
ADD SP, SP, #16 ; deallocate frame
LDMFD SP!, {V1, V2, V3, PC} ; restore V1, V2, V3, and store LR
; in the PC, causing a return