Код MIPS не печатает строки, загруженные из памяти - PullRequest
0 голосов
/ 20 октября 2018

Итак, я пытаюсь найти максимум и минимум в массиве пользовательского ввода, однако по какой-то причине моя программа не печатает строки, загруженные по их адресу в некоторых точках, то есть строки 83-85 и строки 91-93

Вот код:

.data
array: .byte 40

output1: .asciiz "\nThe maximum value in array is: "
output2: .asciiz "\nThe minimum value in array is: "

newline: .asciiz "\n"
space: .asciiz " "
max: .word 0
min: .word 0


.text
.globl main

main:
     li $t0, 0
     li $t1, 0
     reader:
            bgt $t0, 36, printArray

            li $v0, 5
            syscall
            move $t2, $v0
            sw $t2, array($t0)
            addi $t0, 4
            b reader
     printArray:
        li $t0, 0 # reintialize counter



        arrayLoop:
            bgt $t0, 36, findMax
            li $v0, 1
            lw $a0, array($t0)
            syscall

            li $v0, 4
            la $a0, space
            syscall

            add $t0, 4
            b arrayLoop
     findMax:
        li $v0, 4
        la $a0, newline
        syscall
        li $t0, 0 #resetting the counter
        lw $t2, array($t0) #assuming index 0 to be max
        add $t0, 4 #adding 4,so that t3 is at array[1]
        greaterLoop:
            bgt $t0, 36, findMin
            lw $t3, array($t0)
            bgt $t3, $t2, updateMax
            add $t0, 4
            b greaterLoop
        updateMax:
            move $t2, $t3
            sw $t2, max
            add $t0, 4
            b greaterLoop
    findMin:
        li $v0, 4
        la $a0, newline
        syscall

        li $t0, 0 #resetting the counter
        lw $t2, array($t0) 
        add $t0, 4
        smallerLoop:
            bgt $t0, 36, printMinMax
            lw $t3, array($t0)
            blt $t3, $t2, updateMin
            add $t0, 4
            b smallerLoop
        updateMin:
            move $t2, $t3
            sw $t2, min
            add $t0, 4
            b smallerLoop
        printMinMax:
            **li $v0, 4
            la $a0, output1
            syscall**

            li $v0, 1
            lw $a0, max
            syscall

            **li $v0, 4
            la $a0, output2
            syscall**

            li $v0, 1
            lw $a0, min
            syscall

            li $v0, 10
            syscall

Проблема возникает в функции printMinMax, где выполняются системные вызовы для печати строк, однако строки не печатаются.Строки сохраняются в данных как output1 и output2.

Это действительно странная проблема, и я не знаю, в чем дело, поскольку также нет сообщения об ошибке.

1 Ответ

0 голосов
/ 20 октября 2018

Шут помог мне найти ошибку.Я должен был выделить 40 байтов, используя .space, а не использовать .byte, который собирается выделить значение 40 для одного байта.

Большое спасибо!

...