Primeros N primos en MIPS

.data
.globl main
cad: .asciiz "Introduce un numero n: "
cad2: .asciiz "Calcular los n primeros numeros primos.\n"
espaciado: .asciiz " "
.text
main:

li $v0, 4 #Llamada al sistema para imprimir la cadena indicada
la $a0, cad2 # por el puntero $a0
syscall
li $v0, 4 #Llamada al sistema para imprimir la cadena indicada
la $a0, cad # por el puntero $a0
syscall

li $v0, 5 #Llamada al sistema para leer un nÂœmero
syscall
move $t0, $v0

li $a1, 1
li $a2, 0 #iniciamos un contador
li $a3, 1 #numero qu va desde el uno hasta el numero introducido

jal numero

# li $v0,10
# syscall
numero:
beq $t0, $a3, final
# li $v0,1
# la $a0, ($a3)
# syscall
jal subrutina1
beq $v0, 1, imprimir1 #si es uno(primo) l impirime, si no le suma uno y continua el bucle
addi $a3,$a3,1
j numero

imprimir1:
li $v0,1 #imprime  el numero
la $a0, ($a3)
syscall
la $a0, espaciado #Pasamos como argumento la cadena a imprimir
li $v0, 4 #Llamada al sistema que imprime la cadena
syscall

addi $a3,$a3,1 #suma uno y vuelve al bucle
j numero

final:
li $v0,10
syscall



#####
# mira si es primo o no, devuelve 1 si es primo y cero si no lo es
subrutina1:#devuelve v0
addi $sp, $sp, -4
sw $ra, ($sp)
jal subrutina_2

beq $v0, 1, esp
li $v0, 0
j fins1

esp: li $v0, 1

fins1:

lw $ra, ($sp)
addi $sp, $sp, 4
jr $ra # volvemos al numero


subrutina_2:
beq $a3, $a1, fin
div $a3,$a1
mfhi $t2
beqz $t2, etiqueta # si vale 0 etiqueta
bnez $t2, etiqueta2
etiqueta:
addi $a1, $a1, 1
addi $a2, $a2, 1 #Si  es  0, con lo que incrementamos el contador
j subrutina_2
etiqueta2:
addi $a1, $a1, 1
j subrutina_2
fin:
move $v0, $a2
li $a1, 1 #ponemos en contador a cero
li $a2, 0 #ponemos en contador a cero
jr $ra # volvemos a subritina1