c语言函数调用约定,MIPS下C语言函数调用规则

本文介绍了MIPS架构下C语言的三种函数调用约定:o32、n64和n32,并重点讲解了o32约定。在o32约定中,部分参数存储在寄存器[a0,a3]中以提高性能。对于结构体参数传递,文章提到了大小端和对齐问题,并建议避免直接传递大结构体。memcpy函数调用和涉及结构体的示例进一步解释了调用过程。
摘要由CSDN通过智能技术生成

现在mips上支持3种函数调用约定。

1.被称为o32(old 32bit)的,现在被广泛应用的传统的约定

2.n64(new 64bit), 次模式中c语言常用的指针,和long 都会被看成是是64bit,这将会带来很大程度上的误解。也会带来很多现在的程序无法执行。

3.n32(new 32 bit),此模式能够很好的兼容现在广泛应用的代码。参数传递上和N64相同,但是c语言指针,和long 还会以32位来进行编译。 同时为了支持64位,采用long long类型。

下面介绍一下调用约定(除非特别提示,都是以o32为例)

mips的函数调用有点意思, 它会将函数的部分参数直接保存在寄存器中,一般是[a0,a3],来提高性能。

在继续之前,有必要说做一下名词解释 :)(不要怪偶罗嗦哈,慢慢来就知道了)

任何函数调用是都需要堆栈, 并有sp指向栈底。而以sp起始的至少16字节就被mips的标准叫做一个---“堆栈参数结构”的咚咚。

在使用堆栈参数结构的时候有相当多的规则。简单说一下。

1.除非第一个参数是浮点参数,否则不能够讲后续参数传递到FP寄存器中.

2.如果第一个参数是浮点参数,他会被传到FP中,并且后续的浮点参数也将会被传递到FP中 (my god,像费话了)

3.如果函数的结构类型过大,以至于v0,v1不够存放,此函数的调用这会做而外处理。

现在,结束枯燥的叙述,举例说明

1. 一般调用时的情景。

count = memcpy(pd,ps,count);

堆栈描述图                       寄存器描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值