问题描述
我正在尝试使用数组保存i * j值并从数组中打印值。
我有两个循环 loop1 , loop2 ,其中loop1接受i,loop2接受j。 我正在尝试将i * j保存为空间数据类型的myarray。
我遇到异常内存地址超出范围,无法找到错误所在。
Error: Could not find or load main class application.Main
Caused by: java.lang.classNotFoundException: application.Main
对于n = 4,我期望控制台中的输出为
.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,loop1
#multiply a2 and a3
mul $t1,$a3
sw $t1,0($a1)
addu $a1,$a1,4
addi $a3,$a3,1
j loop2
print_loop:
mul $t3,$a0
bge $t0,$t3,exit
li $v0,4
lw $a0,myarray($t2)
syscall
li $v0,space_line
syscall
rem $t4,$a0
beqz $t4,newline
addu $t2,$t2,4
addi $t0,$t0,1
j print_loop
newline:
li $v0,myarray($t2)
syscall
exit:
# Done,terminate program.
li $v0,10
syscall # all done!
.end main
解决方法
您可以通过单步调试器来发现此问题。从显示的最小输入开始,例如n=1
。在每条指令之后,请验证它是否满足您的要求,并且除了您需要的以外,没有执行其他任何操作。
这里有个提示:请注意la
和lw
之间的区别。另外,如果要将系统调用放在代码或循环的中间,请避免为自己的变量使用$a0
和$v0
注册-只会使事情变得更容易/更好。