2013-03-12 90 views
0

我正在嘗試將一個字節加載到MIPS中的寄存器中。這是初學者的課程,所以先進的說明是不允許的。 (無循環等)(ASM)將字節加載到寄存器中時出現故障

但是,它加載的是不正確的值。

我覺得這條線是不正確的:

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

你需要改變:

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

到:

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

這樣做的原因是,133等於0x85這是一個負值使用時簽署以8位表示。因此,您需要使用無符號加載字節指令lbu,以避免符號擴展。

真的,你應該使用lbu爲你的每個負載,因爲你所有的值都是無符號的。你會看到與第五個值相同的問題(236)。

+0

謝謝。我只是想到了這一點。 – BBedit 2013-03-12 16:44:21

+1

@ user2071506:如果這是解決問題的方法,您可能需要將此答案標記爲已接受。 – Michael 2013-03-12 17:39:23