Я пытаюсь написать программу в MIPS, которая побуждает пользователя угадать случайное число, которое генерируется генератором случайных чисел. У них 10 попыток правильно угадать или они проиграют. Как только игра закончена, она сообщит пользователю, выиграли ли они или проиграли, и распечатает массив чисел, которые они предположили. У меня возникают проблемы с сохранением ввода и отображения пользователя после завершения игры.Ошибка ввода и печати входного массива MIPS
1
A
ответ
1
Вы можете использовать динамическую память для хранения догадок приращения смещения указателя с каждой догадкой:
li $v0, 9 #allocate memory for new record
li $a0, 60 #enough memory for 15 guesses
syscall
move $s0, $v0 #hang onto the initial address of our array (memory)
li $t6, 0 #Current Offset of our array = 0
Затем в цикле:
li $v0, 5 #enter integer
syscall
add $s1, $s0, $t6 #add our offset to our initial memory location
sw $v0, 0($s1) #Store our guess in the offset location
add $t6, $t6, 4 #add 4 to our offset
Чтобы отобразить их , вы можете сделать это следующим образом:
showlist: #Show us what we guessed
li $t1, 0 #Set our initial offset to 0
listloop:
add $s1, $s0, $t1 #Add our offset to our initial memory location
li $v0, 1
lw $a0, 0($s1) #Print the number at our memory address + offset
syscall
add $t1, $t1, 4 #Add 4 to our offset
bge $t1, $t6, done #If our offset is >= our final guess offset, we're done
li $v0, 4 #Printa coma and space
la $a0, space
syscall
j listloop
См полное решение ниже:
#t0 = Number to guess
.data
nl: .asciiz "\n"
space: .asciiz ", "
prompt1: "\nPlease enter a number: "
toohigh: "\nYou guessed too high"
toolow: "\nYou guessed too low"
winner: "\nThat's correct! You Win!"
guesses: "\nHere are your guesses: "
youlose: "\nYou Lose!"
youlose2: "\nThe Correct Number Was: "
.text
################Generate our random number###################
li $v0, 42 #random number generator
li $a1, 21 #upper bound, gen number from 0-20
syscall # runs whatever is in $v0 (command 42-RNG)
move $t0, $a0 #move stuff from $a0 to $t0
############################################################
li $v0, 9 #allocate memory for new record
li $a0, 60 #enough memory for 15 guesses
syscall
move $s0, $v0 #hang onto the initial address of our array (memory)
li $t6, 0 #Current Offset of our array = 0
##################
# Our Guess Loop #
##################
loop:
li $v0, 4 #prompt for Number:
la $a0, prompt1
syscall
li $v0, 5 #enter integer
syscall
add $s1, $s0, $t6 #add our offset to our initial memory location
sw $v0, 0($s1) #Store our guess in the offset location
add $t6, $t6, 4 #add 4 to our offset
beq $v0, $t0, win #Did we win?
bge $t6, 60, lose #Did we lose? (60 = 4 * 15) We can use that to tell how many guesses we tried
blt $v0, $t0, less #Is our number less than the right number?
li $v0, 4 #Must have guessed too high - let us know
la $a0, toohigh
syscall
j loop
less:
li $v0, 4 #Must have guessed too low - let us know
la $a0, toolow
syscall
j loop
###################
win:
li $v0, 4 #We won!
la $a0, winner
syscall
showlist: #Show us what we guessed
li $v0, 4
la $a0, guesses
syscall
li $t1, 0 #Set our initial offset to 0
listloop:
add $s1, $s0, $t1 #Add our offset to our initial memory location
li $v0, 1
lw $a0, 0($s1) #Print the number at our memory address + offset
syscall
add $t1, $t1, 4 #Add 4 to our offset
bge $t1, $t6, done #If our offset is >= our final guess offset, we're done
li $v0, 4 #Printa coma and space
la $a0, space
syscall
j listloop
lose: #We lost
li $v0, 4
la $a0, youlose #Let us know
syscall
li $v0, 4
la $a0, youlose2 #Display "The correct number was: "
syscall
move $a0, $t0 #Move the right number into $a0 to display it
li $v0, 1
syscall
j showlist #Then show us our guesses
done:
li $v0, 10 #Terminate Program
syscall
Win:
Проиграйте:
Смежные вопросы
- 1. Ошибка печати MIPS
- 2. Ошибка ввода входного файла
- 3. Ошибка ввода входного потока файла
- 4. Попытка создания и печати элементов из массива в MIPS
- 5. MIPS - Ошибка при печати данных в массив
- 6. Ошибка ввода MIPS с клавиатуры с ошибкой
- 7. scanf Ошибка ввода входного сигнала
- 8. MIPS печати символы
- 9. Ошибка печати массива
- 10. Ошибка печати индекса массива
- 11. Сборка целых чисел и строк печати MIPS
- 12. MIPS - строка печати вызывает ошибку при попытке напечатать значение массива
- 13. матрицы ввода и печати
- 14. Номер печати MIPS случайным образом
- 15. Опрос ввода-вывода (MIPS)
- 16. Ошибка сегментации при печати массива
- 17. Ошибка ввода входного файла Python argparse
- 18. Ошибка печати массива C# Консоль
- 19. Ошибка печати массива в C
- 20. Ошибка ввода входного элемента Bootstrap внутри формы
- 21. Ошибка синтаксиса для печати массива
- 22. Эффективный способ печати MIPS Int Array
- 23. Создание (и доступ) массива в MIPS
- 24. MIPS: Пользователь вводит размер массива
- 25. Ошибка ввода массива
- 26. Ошибка сборки C-MIPS
- 27. Ошибка ввода входного файла. Codeigniter 3 и go daddy subdomain
- 28. «Ошибка ввода входного фильтра SSL» Apache и 443
- 29. Ошибка проверки формы входного массива Codeigniter
- 30. MIPS - получение значений массива