Question: I can't get my code to print

Question

I can't get my code to print

Answers 0
Added at 2017-01-03 23:01
Tags
Question

Hi im currently working on an exercise for School, but I can't get my program to print the lines I want...

.data
    taman:   .asciiz "\n Quantos numeros deseja ordenar (Max. 10): "
    pednum:  .asciiz "\n Introduza um numero: "
    repet1:  .asciiz "\n O primeiro numero aparece repetido: "
    repet2:  .asciiz "\n O segundo numero aparece repetido: "
    repet3:  .asciiz "\n O terceiro numero aparece repetido: "
    repet4:  .asciiz "\n O quarto numero aparece repetido: "
    repet5:  .asciiz "\n O quinto numero aparece repetido: "
    repet6:  .asciiz "\n O sexto numero aparece repetido: "
    repet7:  .asciiz "\n O setimo numero aparece repetido: "
    repet8:  .asciiz "\n O oitavo numero aparece repetido: "
    repet9:  .asciiz "\n O nono numero aparece repetido: "
    repet10: .asciiz "\n O decimo numero aparece repetido: "

.align 4
    array: .space 1000

.text
    tamanho:
        la $a0 taman  # Pergunta ao utilizador o tamanho do vetor
        li $v0 4      # Imprimindo: "Quantos numeros deseja ordenar (Max. 100): "
        syscall


        li   $v0 5    # Le o tamanho introduzido
        syscall
        move $t0 $v0

        bgt  $v0 10 tamanho # Verifica se o tamanho introduzido é maior que 100
        blez $v0 tamanho    # Verifica se o tamanho introduzido é menor ou igual a 0

        sll $a0 $v0 2 # Caso ambas as verificações acima sejam falsas simultaneamente
        li  $v0 9     # Da ao vetor o tamanho introduzido pelo utilizador
        syscall

        la $t2 array
        li $t1 0

    j pedirnum

    li $t3 0

    pedirnum:
        # Pedimos ao utilizador que introduza um numero de cada vez, os elementos do seu vetor (ordenados de forma ascendente)
        li $v0 4
        la $a0 pednum
        syscall

        li $v0 5
        syscall

        move $t4 $v0

        # Caso o valor do numero inserido seja diferente saltamos para 'adic' e aumentamos o $s6
        bne $t4 $t3 adic

        # Caso o valor do numero inserido seja o mesmo que o anterior saltamos para as verificações
        beq $t4 $t3 verif

    adic:
        # Quando o numero e diferente do anterior adicionamos 1 a $s6, avançando assim para o proximo numero:
        add $s6 $s6 1
        j pedirnum2

    verif:
        # Baseando-nos no valor de $s6 e dado que o vetor já esta ordenado, podemos dirigir cada valor diferente para o respetivo contador
        beq $s6 1 contador1
        beq $s6 2 contador2
        beq $s6 3 contador3
        beq $s6 4 contador4
        beq $s6 5 contador5
        beq $s6 6 contador6
        beq $s6 7 contador7
        beq $s6 8 contador8
        beq $s6 9 contador9
        beq $s6 10 contador10

    contador1:
        # $t5 corresponde ao contador para o primeiro numero
        add  $t5 $t5 1
        move $t3 $t4
        j pedirnum2

    contador2:
        # $t6 corresponde ao contador para o segundo numero
        add  $t6 $t6 1
        move $t3 $t4
        j pedirnum2

    contador3:
        # $t7 corresponde ao contador para o terceiro numero
        add  $t7 $t7 1
        move $t3 $t4
        j pedirnum2

    contador4:
        # $t8 corresponde ao contador para o quarto numero
        add  $t8 $t8 1
        move $t3 $t4
        j pedirnum2

    contador5:
        # $t9 corresponde ao contador para o quinto numero
        add  $t9 $t9 1
        move $t3 $t4
        j pedirnum2

    contador6:
        # $s1 corresponde ao contador para o sexto numero
        add  $s1 $s1 1
        move $t3 $t4
        j pedirnum2

    contador7:
        # $s2 corresponde ao contador para o setimo numero
        add  $s2 $s2 1
        move $t3 $t4
        j pedirnum2

    contador8:
        # $s3 corresponde ao contador para o oitavo numero
        add  $s3 $s3 1
        move $t3 $t4
        j pedirnum2

    contador9:
        # $s4 corresponde ao contador para o nono numero
        add  $s4 $s4 1
        move $t3 $t4
        j pedirnum2

    contador10:
        # $s5 corresponde ao contador para o decimo numero
        add  $s5 $s5 1
        move $t3 $t4
        j pedirnum2

    pedirnum2:
        # Finalmente guardamos o valor inserido pelo utilizador no vetor e avançamos a posição no mesmo
        sw    $t4 0($t2)
        addi  $t2 $t2 4
        addi  $t1 $t1 1
        bne   $t1 $t0 pedirnum

    beq    $t1 $t0 print

    print:
        beqz $s6 Fim
        bgtz $t5 print1
        bgtz $t6 print2
        bgtz $t7 print3
        bgtz $t8 print4
        bgtz $t9 print5
        bgtz $s1 print6
        bgtz $s2 print7
        bgtz $s3 print8
        bgtz $s4 print9
        bgtz $s5 print10
        j    Fim

        print1:
            li $v0 4
            la $a0 repet1
            syscall

            li $v0 1
            add $a0 $t5 0
            syscall

            j print

        print2:
            li $v0 4
            la $a0 repet2
            syscall

            li $v0 1
            add $a0 $t6 0
            syscall

            j print

        print3:
            li $v0 4
            la $a0 repet3
            syscall

            li $v0 1
            add $a0 $t7 0
            syscall

            j print

        print4:
            li $v0 4
            la $a0 repet4
            syscall

            li $v0 1
            add $a0 $t8 0
            syscall

            j print

        print5:
            li $v0 4
            la $a0 repet5
            syscall

            li $v0 1
            add $a0 $t9 0
            syscall

            j print

        print6:
            li $v0 4
            la $a0 repet6
            syscall

            li $v0 1
            add $a0 $s1 0
            syscall

            j print

        print7:
            li $v0 4
            la $a0 repet7
            syscall

            li $v0 1
            add $a0 $s2 0
            syscall

            j print

        print8:
            li $v0 4
            la $a0 repet8
            syscall

            li $v0 1
            add $a0 $s3 0
            syscall

            j print

        print9:
            li $v0 4
            la $a0 repet9
            syscall

            li $v0 1
            add $a0 $s4 0
            syscall

            j print

        print10:
            li $v0 4
            la $a0 repet10
            syscall

            li $v0 1
            add $a0 $s5 0
            syscall

            j print

    Fim:

    li $v0, 10
    syscallgg

My main problem is with the branches "Print'X'", as I can't get them to show up... The program runs fine

Answers to

I can't get my code to print

Source Show
◀ Wstecz