I am learning MIPS as a part of my Computer Organization class at school and I am writing a simple program that reads in a positive integer from the user and tells the user whether the number is even or odd. The program works, but the way I had to split the loop and conditionals into different labels concerns me a little bit.
I could not figure out another way to do it, but as loops and conditionals are very common in code, I want to see if there is a way to do it without creating so many labels. If and when I tackle a bigger project in MIPS, I do not want to have to have 10 different loop labels if there is a better way to do it.
.data prompt: .asciiz "\nEnter a integer: " even_msg: .asciiz "\nThe number is even.\n" odd_msg: .asciiz "\nThe number is odd.\n" goodbye: .asciiz "\nGoodbye!\n" .text main: j loop loop: la $a0, prompt li $v0, 4 syscall # Read in value li $v0, 5 syscall # If number is negative, exit program. slt $t0, $v0, $zero bne $t0, $zero, exit # Call even_or_odd on value add $a0, $v0, $zero jal even_or_odd j loop even_or_odd: addi $t0, $zero, 2 # Set divisor to 2 div $a0, $t0 mfhi $t0 # Save remainder beq $t0, $zero, even j odd even: la $a0, even_msg li $v0, 4 syscall j return odd: la $a0, odd_msg li $v0, 4 syscall j return return: lw $t0, 0($sp) addi $sp, $sp, 4 jr $ra exit: la $a0, goodbye li $v0, 4 syscall li $v0, 10 syscall