Сборка MIPS - sw, add, sub и т. Д.
Я пытаюсь вычислить промежуток из 10 чисел, но я застрял, прежде чем я могу начать. Я могу загрузить набор в память, используя мои команды LW, но после этого НИЧЕГО не работает. Когда я делаю дамп после выполнения НИЧЕГО не работает. 10 значений есть, но это все. Как мне добавить, вычесть или выполнить любую команду по этому вопросу? Ничего не хранится, точка.
# This program computes and prints the span of a set of ten integers Set.
.data
Set: .word 9, 17, -7, 3, -27, 25, 42, 26, 8, -60
Span: .alloc 1
.text
lw $1, Set($0)
lw $2, Set($1)
lw $3, Set($2)
lw $4, Set($3)
lw $5, Set($4)
lw $6, Set($5)
lw $7, Set($6)
lw $8, Set($7)
lw $9, Set($8)
lw $10, Set($9)
add $11,$2,$3
sw $11, Span($0)
jr $31
Моя команда add ничего не делает в этом примере, как и команда stor. Что я делаю неправильно? Нужно ли предварительно выделять каждое место, которое я хочу использовать в памяти? ($11) например. Я пробовал множество команд, и ни одна из них не делает ничего, кроме моей последней команды lw.
1 ответ
Вот что я написал в попытке создать эквивалентный код тому, что вы пытаетесь сделать:
.data
Set: .word 9, 17, -7, 3, -27, 25, 42, 26, 8, -60
Span: .space 4 #allocate 4 bytes
.set noat #needed to use $1
.text
main:
la $12 Set #load the address of set
lw $1, 0($12) #load first number into $1
lw $2, 4($12) #load second number into $2
lw $3, 8($12) #etc
lw $4, 12($12)
lw $5, 16($12)
lw $6, 20($12)
lw $7, 24($12)
lw $8, 28($12)
lw $9, 32($12)
lw $10, 36($12)
add $11,$2,$3 #add second and third number, store in $11
la $13 Span #load the address of Span
sw $11, 0($13) #store the sum in Span
jr $31
Вы на самом деле не сказали, что именно пошло не так (сбой программы? Отказывается от сборки?), Поэтому я не уверен, какой совет дать, но использование регистров подозрительно - особенно $1, т.е. $, при котором мой ассемблер выиграл ' даже не позволяй мне пользоваться без предупреждения; этот регистр зарезервирован для использования ассемблером.