mips32mars-simulator

MIPS Assembly finding if prime or not


I wrote this code to check if something is a prime number or not.

    .data
is_prime:   .asciiz "--Prime--"
not_prime:  .asciiz "--No prime--"
element:    .word 2

    .text
main:
    #importeer prime messages
    la $t3, is_prime
    la $t4, not_prime
    lw $t1, element
    # input variabele n
    li $v0, 5
    syscall
    move $t0, $v0

if_loop:
    beq $t0, 1, prime_true
    bgt $t0, 1, prime_check

prime_check:
    beq $t0, $t1, prime_true
    div $t1, $t0
    mfhi $t6
    beq $t6, 0, prime_false
    addi $t0, $t0, 1

prime_true:
    li $v0, 4
    move $a0, $t3
    syscall
    j exit
prime_false:
    li $v0, 4
    move $a0, $t4
    syscall
    j exit
exit:

However, every time I run it with any input like 3, 4, 5 or 6 it gives --Prime-- when for 4 and 6 it shouldn't.


Solution

  • My MIPS is quite rusty, but as I understand your code, the value you want to check is in $t0 and the incrementing divisor is in $t1. So your code has the following issues