Está en la página 1de 3

page 60,132

title DIV Divide numeros de una cifra


;----------------------------------------------------------
; OBSERVACIONES
; -------------
;si quiere mas digitos significativos solo aumente CX
;con BX se direcciona a resultado para almacenar. El area
;reservada para el resultado siempre debera ser dos bytes
;mas grande que la precision
;----------------------------------------------------------
pila segment stack
dw 32 dup('la')
pila ends
;----------------------------------------------------------
datos segment

dividendo db 91h
divisor db 67h
resultado db 22 dup(0),'$'
por10 db 10
precision db 8
mensaje db 'Este programa suma dos numeros de 1 digito$'
datos ends
;----------------------------------------------------------
codigo segment
inicio proc far
assume cs:codigo,ss:pila,ds:datos
push ds
sub ax,ax
push ax
mov ax,datos
mov ds,ax

call bopan
call opcur
push cx
push dx
call tamcur
mov dx,0212h
call poner
lea dx,mensaje
call desplegar

leer:
call ls_eco ;lee signo
cmp al,'s' ;si otra tecla
jne leer ;sigue leyendo

call dividir ;divide

mov dx,0c31h
call poner
mov dx,offset resultado
call desplegar
pop dx
pop cx
call tamcur
ret
inicio endp
;---------------------------------------------------------
opcur proc
mov ah,03
mov bh,00
int 10h
ret
opcur endp
;---------------------------------------------------------
bopan proc
mov ah,06
mov al,00
mov bh,07
mov cx,0000
mov dx,184fh
int 10h
ret
bopan endp
;---------------------------------------------------------
tamcur proc
mov ah,01
mov ch,20h
mov cl,12
int 10h
ret
tamcur endp
;---------------------------------------------------------
poner proc
mov ah,02
mov bh,00
int 10h
ret
poner endp
;---------------------------------------------------------
; Lee los numeros a dividir
; -------------------------
l_eco proc
mov ah,01h
int 21h
ret
l_eco endp
;---------------------------------------------------------
; Lee el signo de division
; ------------------------
ls_eco proc
mov ah,07h
int 21h
ret
ls_eco endp
;---------------------------------------------------------
; Dividir
; -------
;Parte entera
;------------
dividir proc
sub ch,ch
sub dh,dh
mov dl,8
mov cl,8 ;numero de digitos
lea bx,resultado ;dir. de resultado
mov al,dividendo
xor al,divisor ;parte entera

giro:
rol al,00000001b
mov ah,al
and ah,01h
or ah,30h ;a ASCII
mov [bx],ah ;almacena parte entera
inc bx

sub cl,1
jnbe giro

mov byte ptr [bx],'.'


inc bx
xchg al,ah ;dividendo=resto

ret
dividir endp
;----------------------------------------------------------
; Despliega el resultado
; ----------------------
desplegar proc
mov ah,09h
int 21h
ret
desplegar endp
;----------------------------------------------------------
codigo ends
end inicio

También podría gustarte