long long int i=57745158985; #the C code
0000000000100004: li r7,13
0000000000100008: lis r8,29153
000000000010000c: ori r8,r8,0x3349
0000000000100010: stw r7,24(rsp)
0000000000100014: stw r8,28(rsp)
0000000000100018: lfd fp0,24(rsp)
000000000010001c: stfd fp0,8(rsp)
你好,当我反汇编CodeWarrior c代码时,出现了这段代码。在代码中,偏移量被赋予寄存器。我不明白为什么给定的偏移量是24、28和8。它是如何确定的?如果它赋给任何其他值,它会工作吗?
1条答案
按热度按时间omhiaaxx1#
这取决于您的平台和架构的ABI。
假设您的平台是PowerPC e500 Application Binary Interface。所讨论的寄存器(rsp)是堆栈指针。这些偏移量是函数堆栈帧中的引用。要了解函数的堆栈帧,您需要查阅ABI。
如果你看2.3节1的堆栈帧,你会看到函数堆栈帧的布局,这就是编译器在确定偏移量24和28时的目标。