#Realizar un programa que declare un vector de 20 enteros en el segmento de datos y
#contenga una subrutina que devuelva el nœmero depositivos, negativos y ceros del vector.
.data
num: .word 23, 25, 2, -3, 0, 3, -6, 0, 0, 34, -45, -5, 1, -9, 0, 8, 7, 77, 9, 0
cad: .asciiz "El nœmero de enteros positivos es: "
cad2: .asciiz "\nEl nœmero de enteros negativos e: "
cad3: .asciiz "\nEl nœmero de ceros es: "
.globl main
.text
main:
la $a0, num #Se le pasa como argumento la direcci—n del vector
li $a1, 20
jal calcula
move $t0, $v0 #Se guarda el primer resultado en $t0 (para no perderlo)
li $v0, 4 #Llamada al sistema para imprimir la cadena indicada
la $a0, cad # por el puntero $a0
syscall
move $a0, $t0 #Se imprime el nœmero de positivos
li $v0, 1
syscall
li $v0, 4 #Llamada al sistema para imprimir la cadena indicada
la $a0, cad2 # por el puntero $a0
syscall
move $a0, $v1 #Se imprime el nœmero de negativos
li $v0, 1
syscall
li $v0, 4 #Llamada al sistema para imprimir una cadena
la $a0, cad3
syscall
lw $a0, ($sp) #Sacamos de la pila el 3er resultado
addi $sp, $sp, 4
li $v0, 1 # y lo imprimimos con una llamada al sistema
syscall
li $v0, 10 #Fin del programa
syscall
calcula:
li $v0, 0 # Contador de nœmeros positivos
li $v1, 0 # Contador de nœmeros negativos
li $t0, 0 # Contador de ceros
addi $t1, $a1, 1 # Controla que hayamos le’do 20 nœmeros
bucle:
lw $t2, ($a0) # Leemos un nœmero del vector
addi $a0, $a0, 4 #El puntero pasa a apuntar al siguiente nœmero
addi $t1, $t1, -1 #Actualizamos el contador
beq $t1, $zero, fin #Si no hemos acabado de recorrer el vector
bltz $t2, negativo #Comprobamos si es negativo
bgtz $t2, positivo #o si es positivo
addi $t0, $t0, 1 #Si no es positivo ni negativo es 0, con lo que incrementamos el contador
j bucle #y seguimos iterando
negativo:
addi $v1, $v1, 1 #Actualizamos el contador de negativos
j bucle #y seguimos iterando
positivo:
addi $v0, $v0, 1 #Actualizamos el contador de positivos
j bucle #y seguimos iterando
fin: addi $sp, $sp, -4 #Guardamos en la pila el tercer resultado que devuelve
sw $t0, ($sp)
jr $ra #Fin de la funci—n