¿Cómo uso correctamente el operador mod en MIPS?

En MIPS, estoy confundido sobre cómo hacer que el mod funcione. A continuación se muestra el código que he encontrado hasta ahora. Puede que tenga más errores además del mod, pero creo que esos errores son el resultado del malentendido del mod. Todo lo que estoy tratando de hacer es obtener el código de trabajo (python) aquí:

i = 1 k = 0 while i < 9: if i % 2 != 0: k = k + i i += 1 print(k) 

para ser correctamente traducido al MIPS. Esta es mi primera oportunidad en el ensamblaje, por lo que puede haber más que errores de modulación que me hacen tropezar con el siguiente código:

 # 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 

Estás viendo registros SPIM en hexadecimal Hexadecimal 10 es decimal 16.

Después de resolver los problemas, el siguiente código funciona como un amuleto. Para usar correctamente el operador mod en MIPS, uno debe utilizar HI y LO. Necesitaba i% 2 == 0 para la statement, así que mfhi fue muy útil. Referencia debajo del código para resultados de trabajo:

 # 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 0x0A # j = 10 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 Lmod and increment 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 move $a0, $t2 # move integer to be printed into $a0 syscall li $v0, 10 # close the program syscall