# MIPS assembly language example: Arithmetic operations # Author: Ney Calazans # Function: This program applies an algorithm of successive subtractions # to perform the integer division of two positive numbers. # # Examplo de divisão de 10 por 3 com subtrações successivas: # [Dividendo] [Divisor] [Dividendo-Divisor] Contador # 10 3 7 1 # 7 3 4 2 # 4 3 1 3 # d1 d2 resto quociente # # quociente: 3 # resto: 1 # .text .globl main main: la $t0,divisor # lw $t0,0($t0) # coloca valor do divisor em $t0 la $t1,dividendo # lw $t1,0($t1) # coloca valor do dividendo em $t1 li $t2,0 # $t2 conterá o quociente da divisão laco: subu $t1,$t1, $t0 # subtrai divisor do dividendo bltz $t1,end # se menor que 0, acabou, vai desfazer última subtração addiu $t2,$t2, 1 # senão, incrementa quociente j laco # e continua a subtrair end: addu $t1,$t1,$t0 # recupera o valor correto do resto, # pois só quando negativo o laco termina la $t3,quociente # sw $t2,0($t3) # escreve valor do quociente na memória la $t3,resto # sw $t1,0($t3) # escreve valor do resto na memória # Fim de trabalhos, retorna do programa li $v0,10 syscall .data dividendo: .word 0xFAAA # na Base 10: 64170 divisor: .word 0x83 # na Base 10: 131 quociente: .word 0 # resposta deve ser: 0x1E9, ou na Base 10: 489 resto: .word 0 # resposta deve ser: 0x6F, ou na Base 10: 111