我读了一些描述$ S和$ T之间的区别 我似乎无法理解究竟是什么区别。 对于刚刚开始学习RISC的初学程序员来说。
外行人的条款究竟有什么不同? 似乎他们应该对加法,减法做同样的事情? 区别在于数组吗?
谢谢!
答案 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)
它们完全相同,它们只是寄存器。唯一不同的是在调用约定中,调用函数的协议:
你可能还在开始时,你应该在研究函数调用,堆栈,堆栈框架时找到它。