.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
.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