【问题标题】:Why MIPS assembler has more that one register for return value?为什么 MIPS 汇编器有多个用于返回值的寄存器?
【发布时间】:2013-11-22 05:22:03
【问题描述】:

我刚开始学习 MIPS 汇编器并意识到有 two registers 用于返回值。

首先我认为它被实现是因为有些语言可能返回一个以上的值(但是将寄存器的数量限制为 2 并没有多大意义)。正如this Q&A 所建议的那样,大多数现代编程语言只使用一个返回值,尽管强调“现代”这个词,这意味着过去有返回多个函数值的语言,这就是 MIPS 有 2 个返回寄存器的原因,如果是的,为什么只有 2 个?

【问题讨论】:

标签: assembly mips


【解决方案1】:

为了能够在 32 位 CPU 上返回 64 位值 - e. G。双精度浮点数和 64 位整数。即使是具有单个返回值的主流语言,其数据类型也大于单个寄存器。

【讨论】:

  • 这是否意味着在 64 位机器上没有理由有 2 个返回寄存器?除非存在大于 64 位的数据类型,但是它如何处理大于 64 位的对象?
  • 在 64 位机器上,这两个寄存器仍被指定为返回值以保持兼容性。请注意,只要在函数末尾分配它们,它们仍然可以用作草稿。
  • 好的。但是由值转换的更大的对象会发生什么? 2 个寄存器可能对他们来说不够用。
  • 对于那些,调用者在堆栈上分配一个位置并传递一个隐藏的指针参数。该函数将数据写入那里。这不是 CPU 架构的一部分——它是编译器实现细节或 ABI 的一部分。
  • @AlexandruBarbarosie 在 64 位机器中它们可用于返回 128-bit values 或其他用途。见this
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 2012-01-09
相关资源
最近更新 更多