首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QTSPIM中运行代码时内存超出边界异常

在QTSPIM中运行代码时内存超出边界异常
EN

Stack Overflow用户
提问于 2020-09-25 21:23:40
回答 1查看 131关注 0票数 0

我正在尝试一个数组来保存i*j值并打印数组中的值。

我有两个循环loop1,loop2,其中loop1取i,loop2取j,我试图将i*j保存在一个myarray中,这是一个空间数据类型。

我得到异常内存地址超出界限的,无法找到什么错误。

代码语言:javascript
复制
 .data

myarray:    .space  10000
n:  .word   1
space_line: .asciiz " "
new_line:   .asciiz "\n"

    .text
    .globl main

main:

    lw $a0, n
    la $a1, myarray
    li $a2, -1  #row
    li $t0, 0  
    li $t2, 0  
    
    
    loop1:
        addi $a2, $a2,1
            
        bge $a2, $a0, print_loop    
        li $a3, 0 #column
        j loop2
         

    loop2:
        bge $a3, $a0, loop1 
        
        #multiply a2 and a3
        mul $t1, $a2, $a3
        
        sw $t1, 0($a1)
        
        addu $a1, $a1,4
        
        addi $a3, $a3,1
        
        j loop2
        
    print_loop:
    
        mul $t3, $a0, $a0
        
        bge $t0, $t3, exit
        
        li $v0, 4
        lw $a0, myarray($t2)
        syscall 
        
        li $v0, 4
        lw $a0, space_line
        syscall 
        
        rem $t4, $t3, $a0

        beqz $t4, newline
        
        addu $t2, $t2, 4
        
        addi $t0, $t0, 1
        
        j print_loop
    
    newline:
        li $v0, 4
        lw $a0, myarray($t2)
        syscall 
    
exit: 
#  Done, terminate program. 
li $v0, 10 
syscall # all done! 
.end main

对于n =4,我期望控制台中的输出为

代码语言:javascript
复制
 0 0 0 0 
 0 1 2 3 
 0 2 4 6
 0 4 8 12
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-25 22:01:18

您可以通过在调试器中单步执行就可以发现这个问题。从尽可能小的输入开始,如您正在显示的n=1。在每条指令之后,验证它是否做了您想做的事情,并且除了您想要的之外,它没有做任何其他事情。

这里有一个提示:也要注意lalw. 之间的区别,如果您想将syscalls放在代码或循环的中间,那么避免为您自己的变量设置$a0$v0寄存器--这只会使事情变得更容易/更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64071471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档