провел поиск и не смог найти однозначного ответа на этот вопрос.Я пытаюсь отобразить строку текста на симуляторе MMIO на ассемблере (марс 4.5 ide).Поэтому в коде я прошу пользователя ввести строку, а затем я перехожу к функции, которая будет обращаться к соответствующему регистру для достижения этой цели.Вот мой код до сих пор
.data
# Do an inputted string text.
input1: .asciiz "Please enter a string: "
# Make enough space for the array.
array1: .space 101
# Resulting string.
output1 :.asciiz "\nInputted string from MMIO: "
.text
# Display the first input and the resulting string.
li $v0, 4
la $a0, input1
syscall
li $v0, 8
la $a0, array1
la $a1, 101
syscall
# Move the address of the first element in a temporary register.
la $t0, ($a0)
# Now store some items on the stack.
addiu $sp, $sp, -12
sw $ra, ($sp)
sw $t0, 4($sp)
# Then call the function to print that output back using a mock syscall
jal print_line
# Restore whats on the stack.
lw $ra, ($sp)
lw $t0, 4($sp)
addiu $sp, $sp, 12
# Terminate the program.
li $v0, 10
syscall
# Define the key_getter function.
print_line:
# Now load some stuff from the stack into this area.
lw $a1, 4($sp)
# Then gather the hard coded memory address of the display terminal
li $a2, 0xffff0000
# At this point, $a1 holds the memory address of the first element in the string.
# And $a2 holds the memory address of the display register for the MMIO.
loop:
#####
display_not_ready:
# Load the word from our display terminal with an offset of 8.
lw $t0, 8($a2)
# Then isolate the bit at the very end.
andi $t0, $t0, 1
# This means if the bit is 1, then the display is ready, if not branch
# until it is ready.
beqz $t0, loop
# Check it the 12th offset is a new line if it is branch to done.
lw $t1, 12($a2)
beq $t1, 10, done
# If we've reached this far then there is a character ready to print.
sw $t1, 12($a2)
# Move to the next character in the array.
addi $a1, $a1, 1
# Then branch back up to loop.
b loop
# Have our done ready.
done:
jr $ra
Проблема : Всякий раз, когда я собираю код и ввожу строку, моя программа застревает в бесконечном цикле вокруг адреса памяти "display_not_ready" иbeqz $ t0, loop.
И он никогда не отображает строку для симулятора MMIO в поле дисплея.
Примечание : после прочтения нескольких ответов на этомвеб-сайт, да, я всегда проверяю, активирована ли кнопка «подключиться к mips».Это не проблема.