0

MIPSのレジスタにバイトをロードしようとしています。これは初心者向けのコースであるため、高度な手順はまだ許可されていません。(ループなどはありません)

ただし、誤った値をロードしています。

私はこの行が間違っていると思います:

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

$ 10を登録するために-123をロードしています!?

このレッスンでは、バイトのロード/保存について学習したばかりです。おそらく、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
4

1 に答える 1

1

変更する必要があります:

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

に:

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

この理由は、133が0x85に等しいためです。これは、8ビットで符号付き表現を使用する場合の負の値です。lbuしたがって、符号拡張を回避するために、符号なしロードバイト命令を使用する必要があります。

すべての値が符号なしであるため、実際にはlbu5つのロードのそれぞれに使用する必要があります。5番目の値(236)でも同じ問題が発生します。

于 2013-03-12T16:40:16.117 に答える