mips的函数调用与堆栈

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

 

Saturday, February 28, 2009

http://logos.cs.uic.edu/366/notes/MIPS%20Quick%20Tutorial.htm


未完...

转载于:https://www.cnblogs.com/embed/archive/2004/12/22/80363.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值