Programa en ensamblador para AVR que realiza división entera con cociente y resto usando restas repetidas en ATmega328P (Arduino Uno).
; Programa en ensamblador para división entera con cociente y resto
; Arquitectura: AVR (ATmega328P)
; Entrada:
; R16 = dividendo (numerador)
; R17 = divisor (denominador)
; Salida:
; R18 = cociente
; R16 = resto
.include "m328pdef.inc" ; Incluir definiciones para ATmega328P
.cseg
.org 0x0000
rjmp start ; Vector de reinicio
start:
; Inicializar registros
ldi r16, 25 ; Ejemplo: dividendo = 25
ldi r17, 4 ; Ejemplo: divisor = 4
clr r18 ; Cociente = 0
division_loop:
cp r16, r17 ; Comparar dividendo con divisor
brlt division_end ; Si dividendo < divisor, terminar
sub r16, r17 ; dividendo = dividendo - divisor
inc r18 ; cociente = cociente + 1
rjmp division_loop ; Repetir ciclo
division_end:
; R16 contiene el resto
; R18 contiene el cociente
end_loop:
rjmp end_loop ; Bucle infinito para detener el programaMicrocontrolador: ATmega328P (Arduino Uno)
Pinout Arduino: