1
好的,所以我开始编写MIPS代码来乘以两个数组。我想把我到目前为止的内容加入到QtSpim中,看看价值是否会随着我的期望而改变。MIPS:跳转目标与指令PC的高4位不同0x400014
然而,当我尝试我的文件加载到QtSpim我收到此错误:
Target of jump differs in high-order 4 bits from instruction pc 0x400014
你看我要去哪里错了,还是有调试任何好的想法?我不确定问题出在哪里或哪里。
谢谢。
编辑:这工作:
main:
la $a2, array1
la $a3, array2
li $a1, 5
li $v0, 1
add $a0, $a1, $0
syscall
lw $a0, 0($a2)
syscall
lw $a0, 0($a3)
syscall
li $v0, 10
syscall
.data
array1: .word 10, 10, 10, 10, 5
array2: .word -10, -10, 10, 10, 5
全码:
.data
array1: .word 10, 10, 10, 10, 5
array2: .word -10, -10, 10, 10, 5
main:
li $a2, 5
addiu $15, $a2, 1
la $a0, array1
la $a1, array2
j MAC
MAC:
addiu $sp, $sp, -4
sw $ra, 4($sp)
li $v1, 0
li $s0, 0
loopInMAC:
beq $s0, $15, main2
j mult1
add $v1, $v1, $v0
addiu $s0, $s0, 1
j loopInMAC
mult1:
lw $s1, 0($a0)
lw $s2, 0($a1)
slt $s3, $s1, 0
slt $s4, $s2, 0
addiu $sp, $sp, -4
sw $ra 0($sp)
bne $s3, 1, skip1
sub $s1, $0, $s1
skip1:
bne $s4, 1, skip2
sub $s2, $0, $s2
skip2:
li $v0, 0
loopInMult:
beq $s1, $0, skip3
andi $t0, $s1, 1
beq $t0, $0, skipAdd
add $v0, $v0, $s2
skipAdd:
sll $s2, $s2, 1
srl $s1, $s1, 1
j loopInMult
skip3:
beq $s1, $s2, equalSign
sub $v0, $0, $v0
equalSign:
jr $ra
之后不,我不能把它放在主之前。它需要主要在第一行,除非我创建一个globl。主,这是我的老师昨晚告诉我的。不过他说最简单的办法是简单地将.data放在文件末尾,这样我就永远不会在我的代码 – user3251142
_中出现错误 - “我不能将它放在main之前,它需要main第一行“_嗯,是的,你可以,而且,不,不。 '.text'不会生成任何代码/数据。它只是告诉汇编程序,您希望将后面的代码和数据放在'.text'部分。 – Michael
.text表示我在做代码? – user3251142