Ошибки при попытке вычислить среднее - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь вычислить среднее значение из раздела .data, но продолжаю получать ошибки, связанные с ПК, и другую ошибку для неверного адреса при чтении данных / стека.Я не понимаю, как решить проблему.Я новичок, работающий над этим заданием, и надеялся получить некоторую помощь в том, как правильно рассчитать среднее значение.

.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 голосов
/ 24 сентября 2019

Вам не хватает 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.

...