2014-01-12 4 views
3

Ive прочитал некоторые описания различий между $ S и $ T Я не могу понять, в чем различие. Итак, для начинающего программиста, который только начал изучать RISC.MIPS сохранен и временно

В чем именно заключается разница в условиях laymans? Кажется, они должны делать то же самое для сложения, вычитания? Является ли разница в массивах?

Спасибо!

+0

Это не имеет ничего общего с RISC, и не имеет ничего общего с MIPS либо другие, чем это случается, платформа, которая использует это именование, и вызов конвенции и сборки. –

ответ

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 будет после вызова, потому что соглашение не требует сохранения его значения.

(ред добавить пример.)

+0

«Сохраняется через вызовы функций», «регистры могут быть изменены вызываемой функцией». Это та часть, с которой мне трудно понять. Можете ли вы привести простой пример? Это поможет много! – user3175173

+0

@ user3175173 Я боюсь, что это не будет иметь смысла, пока вы не поймете концепцию вызова функции. Может быть, это поможет думать о них как «t = временный» и «s = менее временный»? Пока вы не начнете использовать 'jal' и' jr $ ra', вам не нужно беспокоиться о «разности» между $ t # и $ s #. – RobertB

1

Они полностью такие же, они просто регистры. Единственным отличием является соглашение о вызове, протокол вызывающих функций:

  • временные регистры: вызываемая функция, вызываемая, может изменять их содержимое. Вызывающий отвечает за сохранение своего контента.
  • сохраненные регистры, вызываемый не должен изменять свой контент, если это необходимо, оно должно сначала сохранить их содержимое, а затем восстановить их содержимое до его возвращения.

Возможно, вы все еще в начале, вы должны узнать об этом, когда изучаете функции вызова, стека, стека.

Смежные вопросы