В MIPS я смущен тем, как заставить мод работать. Ниже приведен код, который я привел до сих пор. У меня может быть больше ошибок, кроме мода, но я чувствую, что эти ошибки являются результатом недопонимания мод. Все, что я пытаюсь сделать, чтобы получить рабочий код (Python) здесь:Как правильно использовать оператор mod в MIPS?
i = 1
k = 0
while i < 9:
if i % 2 != 0:
k = k + i
i += 1
print(k)
быть правильно переведены на MIPS. Это мой первый выстрел при сборке, так что может быть больше, чем мода ошибок, которые отключающие меня в коде ниже:
# Takes the odd integers from 1 to 9, adds them,
# and spits out the result.
# main/driver starts here
.globl main
main:
#data segment
.data
Li: .byte 0x01 # i = 1
Lj: .byte 0x09 # j = 9
Lk: .byte 0x00 # k = 0
Ltwo: .byte 0x02 # 2 for mod usage
# text segment
.text
lb $t0, Li # temp reg for i
lb $t1, Lj # j
lb $t2, Lk # k
lb $t3, Ltwo # 2
L1: beq $t0, $t1, L2 # while i < 9, compute
div $t0, $t3 # i mod 2
mfhi $t6 # temp for the mod
beq $t6, 0, Lmod # if mod == 0, jump over to L1
add $t2, $t2, $t0 # k = k + i
Lmod: add $t0, $t0, 1 # i++
j L1 # repeat the while loop
L2: li $v0, 1 # system call code to print integer
lb $a0, Lk # address of int to print
syscall
li $v0, 10
syscall
Вы не объяснили, в чем проблема. Как код ведет себя иначе, чем вы ожидали? Однако эти инструкции 'sb' выглядят подозрительными; целью 'sb' является запись младшего байта регистра в память. – Michael
Ты был прав. Я застрелил там фунт, и теперь код по крайней мере до такой степени, что я могу точно определить проблему. Проблема возникает во время 7-й итерации i. k увеличивается до этой точки. k = 9 при i = 6, что верно. Но следующая итерация приведет к 10 вместо правильного ответа. 16. Проблема может заключаться в том, как я объявил k, но я не уверен. – kcmallard