Kaiser89 Ответов: 1

MIPS – почему следующее печатает “OK”?


Следующий фрагмент кода MIPS приводит к печати “OK”, когда я запускаю его на QtSpim.

Но почему это происходит?

addi	$v0,	$zero,	11
addi	$a0,	$zero,	79
syscall
addi	$v0,	$zero,	11
addi	$a0,	$zero,	75
syscall
addi	$v0,	$zero,	10
syscall


Что я уже пробовал:

Я ожидал, что регистр $v0 будет хранить 32 (11 + 11 + 10) и $a0 для хранения 154 (79 + 75).

Но они хранят значения только временно, и конечный результат "ОК", но я не знаю почему.

1 Ответов

Рейтинг:
6

CPallini

Цитата:
Я ожидал, что регистр $v0 будет хранить 32 (11 + 11 + 10) и $a0 для хранения 154 (79 + 75).
Ваши предположения неверны.
addi $v0, $zero, 11
можно было бы написать (псевдокод)
v0 <- ([$zero]+11)
То есть: добавьте непосредственное целое число 11 с содержанием регистра 0 и сохраните результат в регистре v0.


Итак, последовательность
addi	$v0,	$zero,	11
addi	$a0,	$zero,	79
syscall
является
$v0 <- 11
$a0 <- 79
syscall

syscall вызывается с помощью кода 11 ('print_character') и аргумент 79 (ASCII кодекс поведения 'O').
Аналогичный аргумент применим и к остальным строкам программы.