尝试计算平均值时出现错误

时间:2019-09-24 00:57:21

标签: assembly mips

我正在尝试从.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

1 个答案:

答案 0 :(得分:0)

您在jr $ra的底部缺少一个main,因此即使代码正确执行,也会从头到尾陷入混乱。

但是one($register)也是伪指令,它将构造one的完整地址加上实际加载或存储的寄存器值。由于您手动使用了lui $10, 0x1000(因为MARS默认将其数据段放置在0x10001000或IIRC之类的东西上),所以您的实际加载地址将太高0x1000 << 16

您想要%lo(one)($10)之类的东西,但MARS却没有:您必须对数字进行硬编码或仅使用lbu $11, onelbu $11, one($0)

la将数据起始地址写入寄存器,然后将与之相关的所有内容编入索引。

IDK(如果还有其他错误);您缺少MCVE。

相关问题