MIPS如何在堆栈上保存地址?
|
我有以下代码:
.data
array: .word 13, 11, 5, 9, 0, -3
size: .word 6
.text
Main:
la $a0, array
lw $a1, size
jal PrintIntArray
j Exit
# $a0 - array, $a1 - size
PrintIntArray:
addi $sp, $sp, -12
li $t0, 0
sw $t0, 0($sp) # i
sw $a0, 4($sp) # array
sw $a1, 8($sp) # size
li $a0, \'[\'
li $v0, 11
syscall
lw $t1, 8($sp) # size
ble $t1, $0, EmptyArray
PrintLoop:
lw $t1, 8($sp) # size
lw $t0, 0($sp) # i
bge $t0, $t1, PrintLoopEnd
lw $t0, 0($sp) # i
lw $t2, 4($sp) # array
add $t2, $t2, $t0
lw $a0, 0($t2) # <====== RUNTIME EXCEPTION AT THIS LINE !!!
li $v0, 1
syscall
li $a0, \',\'
li $v0, 11
syscall
lw $t0, 0($sp) # i
add $t0, $t0, 1
sw $t0, 0($sp)
j PrintLoop
PrintLoopEnd:
EmptyArray:
li $a0, \']\'
li $v0, 11
syscall
jr $ra
Exit:
我标记的行产生以下运行时异常:
util.asm 37行错误:运行时
0x00400060处发生异常:获取地址
在单词边界上未对齐
0x10010001
我做错了什么?我想我在加载/存储地址时犯了一些错误。
没有找到相关结果
已邀请:
3 个回复
祁澈盘哼颗
捻盒愧杯
等于1时,您正在尝试加载表格地址
。尝试将t0(i)乘以4,然后再将其添加到t2(数组)
死狸蔽垂藐
而不是
这会将32位整数的大小(以字节为单位)添加到索引中。 MIPS要求将4字节值存储到4字节倍数的地址并从中加载。 (即,低位两位为零。)