Estimado tengo algo del codigo pero solamente acepta numero de 1 digito hace la la resta pero no se como hacer el contador de cuantas veces se icieron las resta y asi optener el cociente y tambien optener el residuo obtener el cociente y el residuo
muestro el codigo que tengo :
.model small
.stack
.data
n1 db 0
n2 db 0
r db 0
msg0 db 10,13,7,'Ingrese el dividendo menor o igual a 10: ', '$'
msg1 db 10,13,7,'Ingrese el divisor menor o igual a 10: ', '$'
msg2 db 10,13,7,'la resta esss: ', '$'
.code
mov ax, @data
mov ds,ax
;imprimr el mensaje de ingresar un numero y hacer la captura
;visualiza una cadena de caracteres
;mostrar el mensaje msg0
mov ah,09h
lea dx,msg0
int 21h
;capturar el numero dividendo por el teclado que seria la decena
mov ah,01h
int 21h
sub al,30h
mov n1,al
;**********************************
;mostrar el mensaje msg1
mov ah,09h
lea dx,msg1
int 21h
;capturar el numero divisor por el teclado
mov ah,01h
int 21h
sub al,30h
mov n2,al
;r va ha contener el resultado de la Divisicon
mov al,n1
mov bl,n2
sub al,bl
mov r,al
mov ah, 09h
lea dx, msg2
int 21h
mov al,r
AAM
mov bx,ax
mov ah,02h
mov dl,bh
add dl,30h
int 21h
mov ah,02h
mov dl,bl
add dl,30h
int 21h
.exit
end
Hola,
Tu código hace una única resta (sub al,bl), pero la división por resta sucesiva necesita repetir esa resta dentro de un bucle, contando cuántas veces se puede restar el divisor antes de que el resultado sea menor que él. Ese contador es el cociente, y lo que quede en el dividendo cuando ya no se pueda restar más es el residuo:
mov al, n1
mov bl, n2
mov cl, 0 ; cl sera nuestro contador = cociente
division:
cmp al, bl
jl fin_division ; si dividendo < divisor, ya no podemos restar mas
sub al, bl ; restamos el divisor una vez mas
inc cl ; contamos esa resta
jmp division
fin_division:
mov cociente, cl ; cl tiene el numero de restas = el cociente
mov residuo, al ; lo que queda en al = el residuo
Necesitas declarar dos variables más en tu sección .data, junto a n1, n2 y r:
cociente db 0
residuo db 0
La lógica del bucle es exactamente lo que significa «dividir por resta sucesiva»: si tienes 17 ÷ 5, restas 5 de 17 (quedan 12, cociente=1), restas 5 de 12 (quedan 7, cociente=2), restas 5 de 7 (quedan 2, cociente=3), y ahí paras porque 2 < 5. Cociente = 3, residuo = 2. El cmp + jl al principio del bucle es justo la comprobación de «¿todavía puedo restar una vez más?».
Para imprimir cociente y residuo por pantalla, puedes reutilizar exactamente la misma lógica que ya tienes para imprimir r (el AAM + separar en decenas/unidades con mov bx,ax), solo que aplicada a estas dos variables nuevas en vez de a r.
David Carrero