MIPS代码不打印从内存加载的字符串

时间:2018-10-19 22:03:36

标签: assembly mips

因此,我试图在用户输入数组中查找最大值和最小值,但是由于某些原因,我的程序无法在某些点(即第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函数中,该函数完成了用于打印字符串的系统调用,但是未打印任何字符串。字符串将作为输出1和输出2保存在数据中。

这是一个非常奇怪的问题,由于没有错误消息,我也不知道这是怎么回事。

1 个答案:

答案 0 :(得分:0)

Jester帮助我找到了错误。我不得不使用.space分配40个字节,而不是使用.byte来将40的值分配给一个字节。

非常感谢!