mips的函数调用与堆栈
mips共有32个register.其中的29为$sp,arm为r13
堆栈向内存地址低的方向增长。<=这个应该与汇编器有关。除了规定堆栈增加
方向外,还有堆栈是满还是空。如ARM的APCS
SGI定义的函数调用参数传递规则与arm有点象
一.传入
前4个传入的参数通过$a0到$a3传递,但堆栈的分配有些怪异,即使堆栈上没有
这4个参数,也要空出空间来。剩下的参数全部通过堆栈传递。
二返回
使用$v0,arm分返回是32位或是64位,使用r0/r1.
三我还搞不清楚参数是按什么方向入栈的,谁负责恢复堆栈。
四函数返回地址
保存在$ra也就是$31(第32个积存器)中
要注意的是,在嵌套的函数调用中,页函数只需保存恢复$ra就可以了。
而nested function需要把$ra保存在堆栈中,返回时并从堆栈中恢复。
因为编译器每次调用函数只是自动把函数返回地址保存在$ra中。
五frame指针
$30 ,$fp这个指针是为了能够脱离sp的变化而固定的对函数参数,local变量进行
寻址。有些高层的编译器使用或者也可以不使用fp
http://logos.cs.uic.edu/366/notes/MIPS%20Quick%20Tutorial.htm
未完...