Что означает li $v0,10 в Mips?

Я только начинаю работать с Mips, так что это может показаться простым, но:
Когда я написал приведенный выше код без инструкции li $v0,10, я получил сообщение об ошибке: адрес памяти вне границы< br /> Когда я его добавил, он работал без предупреждений.
Что это значит?

.text
.globl main
main:
 li $t1,27
li $t2,2
mulou $t3,$t1,$t2
li $v0,10
syscall

person brucebanner    schedule 18.10.2020    source источник


Ответы (1)


Сам li просто загружает непосредственное в регистр. В этом конкретном случае служебная процедура на другой стороне syscall просматривает значение в $v0, чтобы определить, какая функция запрошена. 10 — это код для exit (см. список системных вызовов, поддерживаемых спим). Если вы не установите $v0, то будет выполняться какая-то случайная функция, основанная на том, какое значение содержит $v0. Скорее всего, это не будет exit, поэтому процессор пытается продолжить выполнение того, что находится после вашего кода в памяти, что рано или поздно приведет к сбою.

person Jester    schedule 18.10.2020
comment
так что в терминах HLL 10 означает выход? - person brucebanner; 18.10.2020
comment
Да. Вы можете представить себе сервисную процедуру ОС, имеющую что-то вроде switch ($v0) { case 10: do_exit(); } - person Jester; 18.10.2020
comment
Я читал, что регистры v0, v1 хранят результаты. Есть ли шанс, что v0 используется для чего-то другого, кроме выхода из программы? И почему не все программы сборки заканчиваются этой инструкцией (я видел в сети код без нее). - person brucebanner; 18.10.2020
comment
Вы можете использовать $v0 для всего, что захотите. Это регистр общего назначения. В зависимости от среды могут быть другие способы выхода, например. jal exit или даже просто вернуть jr $ra. - person Jester; 19.10.2020
comment
Если непонятно, это не li делает выход. syscall вызывает операционную систему, которая затем просматривает $v0. Вы можете загрузить 10 в $v0, и ничего особенного не произойдет, если вы затем не начнете делать syscall (так что ваш процесс, который, будучи непослушным в моих глазах, должен его задушить). - person Jester; 19.10.2020