Почему этот цикл MIPS останавливает печать строк при запросе целых чисел - PullRequest
1 голос
/ 22 апреля 2019

Я пытаюсь ввести матрицу 4x4 с помощью пользовательских вводных строк. Что-то заставляет одну из строк перестать печатать на третьей итерации, а затем другая строка прекращает печатать на итерации № 7.

Я подумал, что это может быть ошибка эмулятора MARS или что-то в этом роде, я попытался перезапустить его, но ошибка сохраняется. Я уверен, что это должно быть с моим кодом, но я не могу найти ошибку.

.asm, который выдает ошибку:

.data
matrix: .word 16
msg1: .asciiz "Introduce value ["
msg2: .asciiz "] of the matrix: "

.text
li $t0, 0
la $s0, matrix
cols:
    beq $t0, 4, endLoop
    addi $t0, $t0, 1
    li $t1, 0
    rows:
        beq $t1, 4, cols
        addi $t1, $t1, 1

        li $v0, 4
        la $a0, msg1
        syscall

        li $v0, 1
        move $a0, $t0
        syscall

        li $v0, 11
        li $a0, '|'
        syscall

        li $v0, 1
        move $a0, $t1
        syscall

        li $v0, 4
        la $a0, msg2
        syscall

        li $v0, 5
        syscall

        sw $v0, 0($s0)
        addi $s0, $s0, 4

        j rows

endLoop:    

Объем производства:

Introduce value [1|1] of the matrix: 1
Introduce value [1|2] of the matrix: 2
1|3] of the matrix: 3
1|4] of the matrix: 4
2|1] of the matrix: 5
2|2] of the matrix: 6
2|37
2|48
3|19
3|210
3|311
3|412
4|113
4|214
4|315
4|416

-- program is finished running (dropped off bottom) --

Как мы видим, блок ASCII означает, что он печатает что-то ... неправильное (они подавляются MARS и их можно увидеть только при вставке его где-то еще) (Редактировать: также подавляется стеком overflow ... fail)

Ожидаемый результат должен составлять 16 сообщений, запрашивающих ввод данных пользователем в следующем формате:

Introduce value [col|row] of the matrix: 

1 Ответ

1 голос
/ 22 апреля 2019

matrix: .word 16 означает одно слово со значением , равным 16. Как только второй пользовательский ввод будет сохранен в matrix, он будет переполнен в Introduce...строка.Для малых значений, которые вы вводите, вы неизбежно будете хранить несколько нулей в начале строки, что приведет к тому, что она прекратит печатать эту строку раньше.

Простое исправление: просто убедитесь, что вы выделяетедостаточно места для matrix.

matrix: .word 0:16
...