ZHCUAQ1F july 2015 – april 2023
被调用函数(子函数)必须执行以下任务:
帧指针用于从堆栈中读取参数并处理寄存器溢出指令。如果任何参数被放置在堆栈上或者如果帧大小超过 128K 字节,帧指针 (A15) 将按以下方式分配:
如果不满足上述条件,则不分配帧指针 (A15)。在这种情况下,通过从寄存器 B15 (SP) 中减去一个常数来分配帧。寄存器 B15 (SP) 在此函数内的任何其他位置都不会递减。
无论是在调用函数时(以便结构体参数作为地址传递)还是在声明函数时(以便函数知道将结构体复制到本地副本),都必须注意正确地声明接受结构体参数的函数。
如果该函数返回一个结构体,则调用方会为该结构体分配空间并将返回空间的地址传递给 A3 中的被调用函数。若要返回结构体,被调用函数会将该结构体复制到由额外参数指向的内存块。
通过这种方式,调用方可以用睿智的方式告知被调用函数从哪里返回结构体。例如,在语句 s = f(x) 中,其中 s 是一个结构体,f 是一个返回结构体的函数,调用方实际上可以像 f(&s, x) 那样进行调用。然后,函数 f 将返回结构体直接复制到 s 中,并自动执行赋值。
如果调用方不使用返回结构体值,则可以将地址值 0 作为第一个参数进行传递。这会指示被调用函数不要复制返回结构体。
无论是在调用函数时(以便传递额外参数)还是在声明函数时(以便函数知道复制结果),都必须注意正确地声明接受结构体参数的函数。