MIPS:跳转目标与指令pc 0x400014的高位4位不同

use*_*142 1 assembly mips

好吧,所以我开始编写MIPS代码来乘以两个数组.我想把我到目前为止的内容放到QtSpim中,看看值是否会像我期望的那样改变.

但是,当我尝试将我的文件加载到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
Run Code Online (Sandbox Code Playgroud)

完整代码:

.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
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 5

不要在代码中放置代码.data.你应该在.text之前启动(代码)部分main:,即:

.text
main:
Run Code Online (Sandbox Code Playgroud)

此外,您之前已经有一些指令main:,目前永远不会被执行.我怀疑这些是为了放置main: