Начинающий MIPS, почему он не напечатает мою третью подсказку? - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь написать программу на MARS (MIPS Assembler и Runtime Simulator), которая будет брать два целых числа у пользователя и затем либо добавлять, либо умножать в зависимости от того, что пользователь решит делать. В любом случае, я еще не слишком углубился в программу, однако я действительно не могу понять, почему она не выведет мою третью подсказку. Можете ли вы помочь мне?

.data
prompt1: .asciiz "Enter an Integer!"
prompt2: .asciiz "Enter Another Integer!"
prompt3: .asciiz  "Would you like to add or multiply? (+ for add, * for multiply)"
resultout: .asciiz "The result is:"

.text

main:
    la $a0, prompt1
    li $v0, 4
    syscall
    li $v0, 5
    syscall
    add $t0, $v0, $zero

    la $a0, prompt2
    li $v0, 4
    syscall
    li $v0, 5
    syscall
    add $t1, $v0, $zero

    la $a0, prompt3
    li $v0, 12
    syscall
    li $v0, 11
    syscall
    add $t2, $v0, $zero

1 Ответ

0 голосов
/ 25 января 2019

Чтобы напечатать подсказку и получить один символ, я думаю, вам нужно загрузить немедленно $v0 правильное значение для syscall. Согласно файлу справки MARS 4.5, таблица доступных служб предполагает, что ваш код должен выглядеть примерно так, как показано в строке 24:

la $a0, prompt3
li $v0, 4
syscall
li $v0, 12
syscall

То есть, вы хотите "напечатать строку", которая находится в prompt3, а затем "прочитать символ", чтобы получить один символ. Первый syscall, который вы делаете, - 12, что означает «читать символ», поэтому он ждал, пока вы что-то введете.

Я рекомендую вводить магические числа, такие как 4 и 12, которые представляют определенные системные вызовы, в код как константы:

.eqv SYS_PRINT_STRING 4
[...]
li $v0, SYS_PRINT_STRING
...