.data
strA: .asciiz "Original Array:\n"
strB: .asciiz "Second Array:\n:"
newline: .asciiz "\n"
space : .asciiz " "
# This is the start of the original array.
Original: .word 200, 270, 250, 100
.word 205, 230, 105, 235
.word 190, 95, 90, 205
.word 80, 205, 110, 215
# The next statement allocates room for the other array.
# The array takes up 4*16=64 bytes.
#
Second: .space 64
.align 2
.globl main
.text
main:
la $t0, Original #load address of original array
li $v0, 4 #system call code for printing
la $a0, strA
syscall
addi $t1, $zero,0
sll $t2, $t1, 2
add $t3, $t2, $t1
li $v0, 4
lw $a0, 0($t3)
syscall
我正在尝试制作一个转置矩阵的程序。但是我不断收到错误地址:0x00000000。我尝试加载矩阵的地址,然后将0加载到$ t1中作为开始索引,然后将其乘以4并将其添加到数组的基址。
正如您所看到的,我已经加载了数组的地址,并且还添加了带有sll的i * 4数量。为什么我会收到此错误?
答案 0 :(得分:2)
系统调用4打印字符串。如果要打印整数数组,则必须编写循环并对数组中的每个整数使用系统调用1(print_int
)。
异常发生在lw $a0, 0($t3)
,如果你看一下设置$t3
的方式,那么显然它不能有任何其他值而不是0,所以我&#39 ;我不确定你预计会发生什么。
我假设您正在使用像SPIM或MARS这样的模拟器,因此您可以自己轻松找到这些类型的东西。模拟器将报告发生异常的地址,因此您只需在该地址处设置一个断点(或者直到该地址为止一步)并查看寄存器的值以查看它们是否有意义。