我正在尝试从.data节中计算值的平均值,但是我不断收到与PC有关的错误,以及由于读取数据/堆栈中的地址错误而引起的另一个错误。我不了解如何解决此问题。我是从事这项工作的初学者,希望就如何正确计算平均值获得一些帮助。
.data
one: .byte 12
two: .byte 97
three: .byte 133
four: .byte 82
five: .byte 236
.text
main:
ori $8, $0, 0x5
ori $9, $0, 0
lui $10, 0x1000
lbu $11, one($10) #get byte one
addu $12, $11, $9 #add byte one to $9
lbu $11, two($10) #get byte two
addu $12, $11, $12 #add byte two to the sum
lbu $11, three($10) #get byte 3
addu $12, $11, $12 #add byte 3 to the sum
lbu $11, four($10) #get byte 4
addu $12, $11, $12 #add byte 4 to the sum
lbu $11, five($10) #get byte 5
addu $12, $11, $12 #add byte 5 to the sum
divu $12, $8 #divide the sum by 5
mflo $13 #store the result in $13
答案 0 :(得分:0)
您在jr $ra
的底部缺少一个main
,因此即使代码正确执行,也会从头到尾陷入混乱。
但是one($register)
也是伪指令,它将构造one
的完整地址加上实际加载或存储的寄存器值。由于您手动使用了lui $10, 0x1000
(因为MARS默认将其数据段放置在0x10001000
或IIRC之类的东西上),所以您的实际加载地址将太高0x1000 << 16
。
您想要%lo(one)($10)
之类的东西,但MARS却没有:您必须对数字进行硬编码或仅使用lbu $11, one
或lbu $11, one($0)
或la
将数据起始地址写入寄存器,然后将与之相关的所有内容编入索引。
IDK(如果还有其他错误);您缺少MCVE。