Contador de números negativos, positivos y ceros de un array en MIPS

 #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