Я работаю над проблемой ввода-вывода с отображением в памяти, используя MIPS / QtSPIM для одного из моих классов. Цель - прочитать символы с клавиатуры в буфер фиксированной длины (размер n), на который указывает $ a0. Если буфер достигает индекса n-1 или вводится символ перевода строки, последний шаг заключается в добавлении нулевого символа в конец массива, как вы видите в строке с нулевым символом в конце, и выходе из программы. У меня правильно работает ввод, но когда я пытаюсь добавить нулевой символ на последнем шаге, ничего не происходит. Я пытался жестко закодировать случайный символ в последнем индексе, и даже это не работает, поэтому я чувствую, что упускаю что-то базовое с точки зрения синтаксиса. Вот что у меня есть:
CONS_RECEIVER_CONTROL = 0xffff0000
CONS_RECEIVER_DATA = 0xffff0004
CONS_DISPLAY_CONTROL = 0xffff0008
CONS_DISPLAY_BUFFER = 0xffff000c
CONS_READY_MASK = 0x00000001
ISO_LF = 10
SYS_PRINT_CHAR = 11
.text
.globl main
main:
li $t0, CONS_RECEIVER_CONTROL
la $a0, input_buffer
li $a1, 9
li $t1, 0 # counter
li $t4, 0
# wait for character to be input
key_wait:
lw $v0, ($t0)
andi $v0, $v0, CONS_READY_MASK
beqz $v0, key_wait
lbu $t2, CONS_RECEIVER_DATA
beq $t2, ISO_LF, exit
# print current character
write_poll:
lw $v0, 8($t0)
andi $v0, $v0, 0x01
beq $v0, $zero, write_poll
addu $t3, $a0, $t1 # set byte offset in buffer
sb $t2, ($t3)
sw $t2, 12($t0)
addi $t1, $t1, 1
beq $t1, $a1, exit
j key_wait
exit:
addu $t3, $a0, $t1
sb $t4, ($t3)
li $v0, 10
syscall
.data
input_buffer: .space 10