Assembly 为什么这些函数在powerpc汇编堆栈中的用法不同?

Assembly 为什么这些函数在powerpc汇编堆栈中的用法不同?,assembly,stack,powerpc,Assembly,Stack,Powerpc,我有4个示例函数: void test_func1(void) { return; } void test_func2(int a) { return; } int test_func3(void) { return 0; } void test_func4(void) { int a; a = a + 1; return; } 我在vxworks中使用powerpc交叉编译工具编译了它们,并使用生成的elf文件和“

我有4个示例函数:

void test_func1(void)
{
    return;
}

void test_func2(int a)
{
    return;
}

int test_func3(void)
{
    return 0;
}

void test_func4(void)
{
        int a;
        a = a + 1;
        return;
}
我在vxworks中使用powerpc交叉编译工具编译了它们,并使用生成的elf文件和“objdump-d”命令获得以下汇编代码

堆栈大小是汇编代码到第一条语句的结果

f2c:    94 21 ff f0     stwu    r1,-16(r1)
f48:    94 21 ff e0     stwu    r1,-32(r1)
f68:    94 21 ff f0     stwu    r1,-16(r1)
f8c:    94 21 ff d0     stwu    r1,-48(r1)
我的问题是为什么堆栈使用不同?特别是函数“test_func2”和“test_func4”

我的问题是为什么堆栈使用不同?特别是函数“test_func2”和“test_func4”

提示: 测试函数2接受一个参数
test_func4中有一个局部变量。

您熟悉如何将参数传递给函数,以及如何在内存中分配局部变量吗。我可以理解它们的含义并获得堆栈内存布局,但仍然无法理解为什么使用比实际参数和分配的局部变量更多的堆栈大小?只是目的?或者其他原因?即使这不是最好的答案,但我认为我找到了正确的方向!
0x0f8c test_func4 [filecheck2.o]:                       48
0x0f48 test_func2 [filecheck2.o]:                       32
0x0f2c test_func1 [filecheck2.o]:                       16
0x0f68 test_func3 [filecheck2.o]:                       16
f2c:    94 21 ff f0     stwu    r1,-16(r1)
f48:    94 21 ff e0     stwu    r1,-32(r1)
f68:    94 21 ff f0     stwu    r1,-16(r1)
f8c:    94 21 ff d0     stwu    r1,-48(r1)