(ASM)无法将字节加载到寄存器

时间:2013-03-12 16:33:54

标签: assembly mips

我正在尝试将一个字节加载到MIPS中的寄存器中。这是初学者的课程,因此不允许使用高级说明。 (没有循环等)

但是,它加载的值不正确。

我认为这一行不正确:

lb $10,2($8)            # load byte 133

正在加载-123注册$ 10!?

在本课中,我们刚刚学习了加载/存储字节。所以我可能会使用offset + base_address发出错误。虽然,我看不出我的错误。

你能帮忙/建议吗? :)

## sum values, compute average, store result in memory ##
## $7=accumulator   $8=base address     $9=temp     $10=temp
## data segment starts at 0x10000000

.data
.byte 12
.byte 97
.byte 133
.byte 82
.byte 236

.text
main:

lui $8,0x1000       # initialise base address
lb $7,0($8)         # load byte 12
lb $9,1($8)         # load byte 97
ori $10,$0,5        # total amount of integers
lb $10,2($8)        # load byte 133
addu $7,$7,$9       # 12+97
lb $9,3($8)         # load byte 82
addu $7,$7,$10      # add 133 to subtotal
lb $8,4($8)         # load byte 236
addu $7,$7,$9       # add 82 to subtotal
addu $7,$7,$8       # add 236 to subtotal
                ##calculate average##
div $7,$10          # sum / number of items
mflo $10            # average
sb $10,10($8)       # store average in 0x10000010
sll $0,$0,0         # nop for load/store delay

1 个答案:

答案 0 :(得分:1)

您需要更改:

lb $10,2($8)        # load byte 133

为:

lbu $10,2($8)        # load byte 133

这样做的原因是133等于0x85,当使用8位的带符号表示时,这是一个负值。因此,您需要使用无符号加载字节指令lbu,以避免符号扩展。

实际上,您应该为5个加载中的每个加载使用lbu,因为所有值都是无符号的。您将看到第五个值(236)的相同问题。