Обычно мы храним локальные переменные в этих регистрах. Допустим, вы вычисляете факториал числа по следующему алгоритму:
int f(int a){ int t = a-1; return a*f(t); }
В этом случае вы видите, что здесь есть локальные переменные a
и t
. Поскольку a
является аргументом, во время этой процедуры он будет сохранен в $a0-$a3
. Однако, скорее всего, вы будете хранить эти аргументы в $s0-$s7
или $t0-$t7
. Эта процедура вызывает себя рекурсивно, поэтому значения локальных переменных следует сохранять в стек. (читайте о «записи активации» или «стеке вызовов»). Вы должны поместить эти значения в стек $sp
, а затем извлечь их при возврате в случае остановки.
В основном вы сохраняете значения в этом стеке в процедуре или основной программе. Это всего лишь соглашение, вы можете поместить свои значения в регистры $v
или $t
или $a
, они тоже будут работать, но из-за сложности программы все может испортиться.
Если ваша процедура использует $s
регистров, перед вызовом этой процедуры вы должны сохранить эти регистры в стеке, чтобы "сохранить" их, если ваша процедура исчерпает $t
регистров.
Если вы берете на себя этот вопрос, не беспокойтесь об этом прямо сейчас, вы узнаете намного больше позже.
person
Ahmet Alp Balkan
schedule
27.02.2011