MIPS保存并临时

时间:2014-01-12 23:56:51

标签: assembly mips mips32

我读了一些描述$ S和$ T之间的区别 我似乎无法理解究竟是什么区别。 对于刚刚开始学习RISC的初学程序员来说。

外行人的条款究竟有什么不同? 似乎他们应该对加法,减法做同样的事情? 区别在于数组吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

寄存器的工作方式没有区别。传统上如何使用寄存器有所不同。根据MIPS calling convention,$ S寄存器$ S0,..,$ S7的值在函数调用中保留,并且$ T0,...,$ T9寄存器的值可能会被更改为被调用的函数。

将以下代码视为一个具体示例:(请注意,syscall基本上是一个函数调用。)

li   $s3, 42
li   $t0, 81
move $a0, $t0         # the value in $a0 will be printed
li   $v0, 1           # syscall 1 is print integer
syscall

syscall之后,调用约定仍然保证$ s3具有值42,而其他$ sxx寄存器'价值不变。我们不知道调用后$ T0中的值是什么,因为约定不需要保留其值。

(已编辑添加示例。)

答案 1 :(得分:2)

它们完全相同,它们只是寄存器。唯一不同的是在调用约定中,调用函数的协议:

  • 临时寄存器:被调用函数callee可能会更改其内容。来电者负责保存他们的内容。
  • 保存的寄存器,被叫方不得更改其内容,如果需要这样做,则必须先存储其内容,然后在返回之前恢复其内容。

你可能还在开始时,你应该在研究函数调用,堆栈,堆栈框架时找到它。