.data str1: .asciiz "Introduza um numero: " str2: .asciiz "O numero em binario e: " .eqv print_string, 4 .eqv read_int, 5 .eqv print_int, 1 .text .globl main # Mapa de registos: # valor: $t0 # bit: $t1 # i: $t2 # flag: $t4 main: la $a0, str1 li $v0, print_string syscall # Imprime a mensagem "Introduza um numero: " li $v0, read_int syscall # Le o numero introduzido pelo utilizador move $t0, $v0 # Guarda o numero introduzido em $t0 li $v0, print_string la $a0, str2 syscall # Imprime a mensagem "O numero em binario e: " li $t2, 0 # Inicializa o contador i a 0 for: bge $t2, 32, endfor # Se i >= 32, termina o ciclo li $t3,0x80000000 and $t1, $t0, $t3 # bit = valor & 0x80000000 beq $t4, 0, if1_2 beq $t4, 1, if2 if1_2: beq $t1, 0, endif1 if2: li $t4, 1 # flag = 1; beq $t1, 0, else2 # Se bit == 0, salta para else li $a0, 1 # Caso contrario, imprime 1 j endif2 else2: li $a0, 0 # Imprime 0 endif2: li $v0, print_int syscall # Imprime o valor de a0 endif1: sll $t0, $t0, 1 # valor = valor << 1 addi $t2,$t2,1 # i+=1 j for endfor: jr $ra # Salta para o endereco de retorno