没有任何字符串,该程序运行良好。 但是,当我添加代码块时,其中说“如果我取出该代码块,它将运行”,则会出现错误,提示“在这里导致错误”。 我得到的错误是“运行时异常在0x00400028:地址超出范围0x00000002”

我不知道为什么会收到此错误。 我看不到打印字符串如何给我一个错误,该错误试图从堆栈中打印一个int。

我已经尝试解决这个问题了好几个小时,但我没有为MIPS找到太多帮助或资源,因此,将非常感谢任何帮助,并将其标记为有用。

.data 
.align 2
list:  .space 40    #an array of 10 ints
blank: .asciiz " "  
mess: .asciiz "The values in the array are "    


.globl main
.text

main:
    jal read

    li $v0, 4
    la $a0, mess
    syscall

    jal print
    jal total
    jal average
    lw $a0, 0($sp)  #load avererage from stack
    li $t0, 1   #print it
    syscall     #causes ERROR here                     ############
    b done      #end program

#reads in 10 digits into array      
read:
    li $v0, 5       #prompts for int
    syscall
    sw $v0, list($t0)   #stores int in array

    addi $t0, $t0, 4    #holds the number 4
    blt $t0, 40, read   #repeats until array is full
    jr $ra          #return to caller

#prints array   
print:
    lw $a0, list($t1)   #loads int from array
    li $v0, 1       #print int
    syscall

    li $v0, 4       #if I take this block out it runs      ########
    la $a0, blank       #
    syscall         #

    addi, $t1, $t1, 4   #counter 
    blt $t1, 40, print  #repeats until array it full
    jr $ra          #return to caller

#adds the total of all array elements 
total:
    lw $t3, list($t2)   #gets ints from array 
    add $s0, $s0, $t3   #adds number to running total
    addi $t2, $t2, 4    #counter 
    blt $t2, 40, total  #repeat until all ints are added
    addi $sp, $sp, -4   #allocate space on array
    sw $s0, 0($sp)      #store total on stack
    jr $ra          #return to caller

#divides the total by 10, for the average       
average:
    lw $a0, 0($sp)      #gets the total from the stack
    addi $t4, $t4, 10   #10 to divide by
    div $a0, $t4 
    mflo $t5
    sw $t5, 0($sp)      #store aveg in stack
    jr $ra      

done:

===============>>#1 票数:1 已采纳

您忘记将$v0设置$v0 1。我猜您设置的是$t0而不是$v0

  ask by Philip Rego translate from so

未解决问题?本站智能推荐:

2回复

如何在MIPS中打印字符串数组?

我有一个字符串数组,我想将它们打印出来。 这是我目前拥有的: 我知道这行不通,因为li $ v0,4仅用于打印字符串。 我不确定从这里下一步该怎么做...
1回复

MIPS-使用整数字符串打开文件,将其转换为整数并打印

给定一个带有数字字符串的文件,我如何将它们转换为INTS然后在MIPS中打印它们? 关于从哪里开始的任何提示?
1回复

mips从寄存器中打印字符串

$ a0-用于传递参数 $ t0-$ a0中用于lw的临时寄存器 这是我的代码 执行后,在“移动$ a0,$ t0”处出现错误“内存越界”。 我也尝试过 而不是从上面移动线,但是我仍然遇到相同的错误 我想看到的是使用syscall打印的$ t0的值(来自[
3回复

在MIPS中打印字符串和变量

这是我在MIPS汇编中尝试做的C表示: 我知道我可以做一个系统调用来轻松打印x =,我也可以做一个系统调用来打印int x(存储在寄存器中)。 然而,这样打印它们(假设x是5): X = 五 如何让它们在同一行上打印?
1回复

装配MIPS:反向打印字符串

假设我们输入单词“ test”,并且希望程序返回该单词反转的输出(“ tset”)。 使用C,典型的for循环可以轻松地完成此工作。 但是在MIPS上,事情至少变得相当混乱。 在尝试通过制作两个循环来使其工作。 一个用于简单读取字符串的每个字符,另一个用于反向打印它们:
1回复

如何在MIPS中修改和打印字符串?

我正在MIPS中进行作业。 我想打印不带小数点的存储字符串,即输出应为110.11的11011。 我认为我的代码正在执行应有的操作,但未显示任何输出。 我对其进行了调试,结果发现addi语句只是不断删除字符串的第一个元素,因此最后没有任何剩余内容。 有什么方法可以在不删除其元素
2回复

MIPS:打印字符串,没有pseduo说明

我有以下 现在,我不确定为什么字符串不打印,它运行没有语法错误。 此外,我不允许使用任何伪指令,所以这就是为什么我这样做的时间稍长。 那是错误的来源,我不知道提示字符串存储在哪里? 任何帮助表示赞赏! 谢谢!
2回复

Mips-打印到文件

我想将一些内容(字符串和浮点数)打印到文件中。 到目前为止,这是我已经实现的: 基本思想是将必要的信息放入缓冲区,然后执行syscall。 由于文件已正确创建,随后打开和关闭,因此似乎可以正常工作。 其中也有内容,但没有预期的结果: 在第一个位置,应该有一个字符串,
1回复

MIPS汇编程序读取字符串将覆盖打印字符串

如果我继续循环,那么我存储在“提示”(系统调用4)中的文本的问题将被输入(系统调用5)覆盖。 我需要清洁$ a0还是问题。 请帮忙 我的结果: 请输入文字 a 再次:1,退出:0。 1个 aa(此处应为“请输入文字”) 1个
1回复

尝试在汇编器中打印字符串

我试图在MIPS中打印一些字符串,但是当我尝试打印第一条消息时,程序将全部打印出来。 对不起,我的语言不好,谢谢您的帮助!