Está en la página 1de 4

;----------------------------------------------------------

page 60,132
;----------------------------------------------------------
title SISTEMAS DE COMPUTACION ETN903
;----------------------------------------------------------
; Descripcion del programa:
; Autor:
;----------------------------------------------------------
; SEGMENTO DE PILA (STACK SEGMENT)
;----------------------------------------------------------
pila segment para stack 'stack'
dw 32 dup(0)
pila ends
;----------------------------------------------------------
; SEGMENTO DE DATOS (DATA SEGMENT)
;----------------------------------------------------------
datos segment para 'data'

numero1 db 1 ;
dividendo
numero2 db 7 ;
divisor
resultado db 10 dup (0),'$' ; para el
resultado de la divicion
fil dw 0 ;
POSICION PARA IMPRIMIR
col dw 0
color db 0
car db 'o' ;
caracter
; (Aqui se insertan las variables)

datos ends
;----------------------------------------------------------
; SEGMENDO DE CODIGO (CODE SEGMENT)
;----------------------------------------------------------
codigo segment para 'code'
programa proc far
assume ss:pila,cs:codigo,ds:datos,es:datos
push ds
sub ax,ax
push ax
mov ax,datos
mov es,ax
mov ds,ax

call bopan_m ; borra la


pantalla por acceso a memoria
call divi ; optiene el
resultado de la division
call dibuja ; dibuja el
histograma
mov ah,07
int 21h
; (Aqui se insertan las instrucciones ejecutables)
ret
programa endp
;---------------------------------------------------------
; DIBUJA EL HISTOGRAMA DE MANERA HORIZONTAL
;---------------------------------------------------------
dibuja proc
; para imprimir el resultado de la divicion
mov si,0 ; inicializa
el puntero
mov fil,6 ; posicion
para imprimir el resultado
mov col,29
mov color,74h ; color del
texto
salto2:
mov al,resultado[si] ; agarra el valor
mov car,al ; lo
guarda en car para imprimir
call imprime ; lo imprime
en pantalla
inc si ;
incrementa el puntero
inc fil ;
incrementa la fila
cmp resultado[si],'$' ; verifica si
finalizo la cadena
jne salto2

; para imprimir el histograma


mov color,47h ; color a
imprimir
mov si,0 ; inicializa
el puntero
mov fil,6 ; posiciona
para imprimir el histograma
salto3:
mov col,32
mov al,resultado[si] ; recibe el valor
en ASCII
cmp al,2eh
je salto6
mov ah,0
mov cx,ax ; inicializa
el contador en ASCII
and cx,0fh ; lo
convierte de ASCII a decimal
cmp cx,0
je salto6
salto4:
mov car,' ' ;
guarda el caracter en blanco o espacio(20h)
push cx
call imprime ; imprime en
pantalla
pop cx
inc col ;
incrementa la columna
loop salto4
inc si ;
incrementa puntero
inc fil ;
incementa la fila
jmp salto5
salto6:
inc si ; si
es "." solo incrementa putero
inc fil ;
incrementa fila para obiar al valor "."
salto5:
cmp resultado[si],'$' ; verifica si
termino la cadena
jne salto3

ret
dibuja endp
;--------------------------------------------------------
; DIVICION con 8 digitos de precision
;--------------------------------------------------------
divi proc

mov cx,9 ; cantidad


de veces que repetira
mov ah,0
mov si,0 ; inicializo
el puntero
salto0:
mov al,numero1 ; cargo el
primer numero
mov bl,numero2 ; cargo el
segundo numero
div bl ;
divido
or al,30h ;
convierto en ASCII
mov resultado[si],al ; guardo el valor
cmp si,0 ; comparo si es el
primer valor
jne salto1
inc si ;
incremento para poner el punto decimal
mov resultado[si],'.' ; guado el punto
decimal
salto1:
mov al,ah ; el residuo
lo guardo en al
mov bl,10
mul bl ;
multiplico el residuo por 10
mov numero1,al ; guardo el
resultado en numero1
inc si ;
incremento puntero
loop salto0

ret
divi endp
;----------------------------------------------------------
; BORRA LA PANTALLA CON "o"
;----------------------------------------------------------
bopan_m proc

mov fil,0 ; fila 0


for4:
mov col,0 ; columna 0
for3:
mov color,71h ; pone el
atributo
call imprime ; imprime
directo en memoria
inc col
cmp col,80 ;
verifica si llego al limite de la columna
jne for3
inc fil
cmp fil,25 ;
verifica si llego al limite de la fila
jne for4

ret
bopan_m endp
;----------------------------------------------------------
; IMPRIME EN PANTALLA POR LA MEMORIA DE VIDEO
;----------------------------------------------------------
imprime proc

mov ax,0b800h ; DIRECCION


DE MEMORIA DE VIDEO
mov es,ax
call pon_p
mov al,car ; EN
AL SE PONE EL CARACTER
mov ah,color ; EN AH SE
PONE EL ATRIBUTO
mov es:[di+bx],ax

ret
imprime endp
;---------------------------------------------------------
; POSICION DE LA PANTALLA
;---------------------------------------------------------
pon_p proc

mov ax,fil
mov bx,160
mul bx ;
(FILA*ANCHO*2)
mov bx,ax
mov ax,col
mov cx,2
mul cx ;
(COLUMNA*2)
mov di,ax

ret
pon_p endp
;----------------------------------------------------------
; (Aqui se insertan las instrucciones adicionales)
;----------------------------------------------------------
codigo ends
;----------------------------------------------------------
end programa

También podría gustarte