为什么MIPS ISA中的临时寄存器要分开?

问题描述 投票:0回答:1

我目前正在上一门涵盖 MIPS ISA 的课程,我注意到的一件事是临时寄存器的分割:

enter image description here

临时寄存器

$t0
$t7
存储在
$8
$15
中,但
$t8
$t9
存储在
$24
$25
中。这是为什么呢?哪些决定促使 MIPS ISA 设计者不让临时寄存器连续?

mips cpu-registers calling-convention abi instruction-set
1个回答
0
投票

在 MIPS 中,$t0 到 $t9 等临时寄存器根据谁负责在函数调用期间保存其值分为两组。

调用者保存的寄存器($t0 到 $t9): 它们用于不需要在函数调用之间保存的临时数据。当一个函数调用另一个函数时,如果稍后需要它们的值,则由调用函数(发出调用的函数)来保存这些寄存器。被调用的函数(被调用者)可以自由更改这些寄存器,因此调用者必须在需要时保存它们。

被调用者保存的寄存器($s0 到 $s7): 这些寄存器用于存储需要在函数调用之间保留的值。如果函数使用这些寄存器,则被调用函数(被调用者)负责保存和恢复它们。这样,调用函数就不会丢失重要的值。

为什么要分裂? 这种拆分有助于使函数调用更加高效:

调用者只需担心在需要时保存临时数据,这减少了它要做的工作。 被调用者确保重要数据保持完整,但它只需保存和恢复真正重要的值。 这种设计有助于避免不必要的工作,并保持函数调用期间的顺利运行。

© www.soinside.com 2019 - 2024. All rights reserved.