2016-04-19 5 views
0

Я просто интересно, почему это не работает:Системный вызов печати INT

Print Integer: li $v0, 1 
      li, $a0, $v0  #with $v0 being an added up value 
      syscall 

Но это работает:

Print Integer: li $v0, 1 
     li, $a0, 100 
     syscall 

Есть ли регистр, который можно использовать для печати целое число, которое имеет были изменены алгоритмом? Я всегда думал, что $ v0 - это регистр, в котором хранятся возвраты.

ответ

2

Прежде всего, у вас есть ошибка синтаксиса здесь:

li, $a0, $v0 

Там не должно быть запятая после li.

Во-вторых, цель li псевдо-инструкции, чтобы загрузить immediates (например, 1, 0x42, или 12345). Если вы хотите переместить (скопировать) содержимое одного регистра на другой, используйте move (как в move $a0, $v0).

И, наконец, вы назначили $v0 значение 1 в первой строке вашего кода, поэтому, даже если вы правильно сказали move $a0, $v0, вы всегда будете получать $a0 = 1. Если вы хотите иметь предыдущее значение $v0, вы должны сделать move $a0, $v0 до li $v0, 1.

+0

Эта запятая была просто ошибкой, когда я вставлял ее здесь, и спасибо, что я закончил делать, это перевести ответ на $ s0 и поставить выше 'li $ v0, 1', как вы сказали. – Submersed24

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