首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sparc过程调用约定

Sparc过程调用约定
EN

Stack Overflow用户
提问于 2010-07-15 21:46:59
回答 2查看 852关注 0票数 2

我想在Sparc中做一些“内联”的汇编编程,我想知道如何通过寄存器传递来做到这一点。

最好用一个小例子来解释我的问题

代码语言:javascript
复制
int main()
{
   int a = 5;
   int b = 6;
   int res;

   asm_addition(a,b);

   printf("Result: %d\n", res);
   return(0);
}
  // My assembler addition

.global asm_addition            

.align  4   

    add rs1, rs2, rd
    restore

有人知道我必须使用哪些寄存器才能将值a和b相加吗?最后,我需要为rd指定哪个寄存器,以便将结果与汇编例程后面的最后一个printf语句一起打印出来。

非常感谢你的一些意见!

EN

回答 2

Stack Overflow用户

发布于 2010-07-15 22:51:50

调用约定可能取决于操作系统。我猜想是Solaris。谷歌system v application binary interface sparc,这是很容易找到的。

完整的内联汇编程序文档隐藏在SunStudio PDF中的某个地方,并不容易找到。官方上也可以通过man -s 1 inline访问,不过在我的系统上,我必须手动打开文件。在手册页中,查找“用于SPARC系统的编码约定”。

票数 0
EN

Stack Overflow用户

发布于 2010-08-04 18:33:10

在Solaris上,参数通过寄存器%o0传递到%o5,然后通过堆栈传递。如果被调用的函数是叶函数(即它不调用另一个函数),则寄存器窗口不会向前移动,并且该函数通过%o0到%o5直接访问它们。如果寄存器窗口移动,则函数可通过%i0至%i5寄存器访问参数。返回值通过被调用者中的%i0返回,在调用者中变为%o0。对于浮点参数,它们是通过FP寄存器处理的,但在那里,您必须读取Dummy00001指向的文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3256119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档