Почему моей программе не удается загрузить нулевое значение в окончательный индекс массива? - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю над проблемой ввода-вывода с отображением в памяти, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...