Está en la página 1de 4

Universidad Mayor de San Andrs

Ingeniera Electrnica
SISTEMAS DE COMPUTACIN, ETN903

Temas 7-8-9-10: COPROCESADOR


Datos Adjuntos:

GRAF1.ASM
(programa principal)
GRAF11.ASM (sub-programa)

Presentado por:
Amrico ALVAREZ SURCI

Grupo:
G04

Docente:
Javier SANABRIA GARCIA
Fecha de entrega: 03 05 2012

1.- OBJETIVO.
Utilizar el Coprocesador, para poder operar nmeros de punto flotante, para realizar
diferentes acciones
Programacin estructurada, para el interfaz grafico.
Utilizar los procesadores 386, adems del coprocesador 387. Para esto habilitar
segmentos de 16bits.
Corregir el error que tiene el MASM cuando se utiliza la instruccin FSIN
2.- ANLISIS.
Nuestro sistema contara con las siguientes prestaciones:
Press g Grafica la funcin = , si aun no se ingresaron datos (a, b), se
graficara la ltima funcin observada.
Press Supr Cuando se presiona la tecla Suprimir, se borra el grafico actual
Press a o b Inserta dato a o b, para reemplazar en la formula, se puede insertar dato por
ejemplo -0.2 luego presionar enter para finalizar la introduccin del dato, o completar las 6
casillas reservadas para el numero
Press Esc Cuando se presiona Escape, sale de nuestro graficador.
Algunas consideraciones: Como se muestrean puntos cada 6 grados, cuando hay valor en f(x)
tienda a infinito (o nmeros muy grandes), solamente se ver lneas cuasi rectas, por este
motivo estas lneas no se observan (a no ser que por casualidad justo estn en entre estos 6
grados de muestreo), por tal motivo para observar mejor el grafico deberamos de graficar cada
2 grados (mnimo) para poder observar esas lneas, Damos un comunicado de fuera de rango
cuando no se pueden mostrar las lneas verticales por nuestros puntos de muestreo.
Todo esto en un interfaz de usuario amigable, de la forma:

Descripcin de lneas y puntos


Puntos ROJOS, obtenidos con el coprocesador matemtico, cada 6 grados. En pixel de
pantalla, hay un punto cada 3 pixeles en el eje horizontal (variable x). Estos puntos
tienen un tamao de 3x3pixeles.
Lneas AZULES CLARAS, obtenidas con bresenham, uniendo puntos rojos, se observa que
hay diferentes pendientes. La lnea es de grosor de 1 pixel.
Lneas BLANCAS, que nos muestran las abscisas de nuestra funcin. Estn dibujadas por
puntos de 1pixel.
3.- APLICACIN.

3.1 Programa Assembler.- Observamos solo el programa principal modo estructurado


(sub-programas), las subrutinas se las conoce por laboratorios anteriores.
.386
.387
page
60,132
GRAFICADOR_DE_FUNCION
extrn
interfaz:far
;-----------> PILA
pila
segment stack
dw
64 dup(?)
pila
ends
;-----------> SIMBOLOS
V
equ
5
N
equ
194
;numero de puntos a graficar
;-----------> DATOS
datos
segment
vian
dw
00
a
dd
-0.2
b
dd
0.7
seno
dd
0
expo
dd
0
frango
db
'Fuera de Rango'
msjBA
db
'a =
';10
msjBB
db
'b =
';10
msjF
db
'INTESERTE NUMERO REAL';21
DESX
equ
44
;primera divicion del eje horizontal
DESY
equ
270
;altura del eje horizontal
title

seriex
dw
N dup(0)
seriey
dw
N dup(0)
abci_1
dw
N dup(0)
abci_2
dw
N dup(0)
tem
dw
0
SaveCW dw
?
MaskCW dw
?
spix
dw
0
spix2
dw
0
xa
dw
0
ya
dw
0
xb
dw
0
yb
dw
0
d_x
dw
0
d_y
dw
0
datoextr db
V dup('0') ;15 numeros
signo
db
0
haysigno dw
0
entero
dw
0
fraccion dw
V
fac_mul dw
1
expobin dw
0
val_bin1 dw
0
val_bin2 dw
0
convertido dd
0
datos
ends
;========================================================
;------------------ PROGRAMA PRINCIPAL -----------------;========================================================
codigo
segment use16
inicio
proc
far
assume ss:pila,ds:datos,cs:codigo
push
ds
sub
ax,ax
push
ax
mov
ax,datos
mov
ds,ax
call
guarda
;guardamos modo antiguo
reset:
call
iniciamoss
bucle:
call
haytecla
jz
bucle
;si no hay tecla va a bucle Z=1
call
leer_se
;lee la tecla introducida
cmp
ax,011bh
je
fin
;accion boton "ESC"
cmp
al, 'a'
je
ac_a
;accion boton "a"
cmp
al, 'b'
je
ac_b
;accion boton "b"
cmp
ax,53e0h
je
reset
;accion boton "Supr"
cmp
al,'g'
je
ac_g
;accion tecla "G"
jmp
bucle
ac_a:
call
buttomA
jmp
bucle
ac_b:
call
buttomB
jmp
bucle
ac_g:
;call
iniciamoss
call
ob_puntosY
;obtiene puntos Y
call
ob_puntosX
;obtiene puntos X
call
fuera_rango
call
unimosp
call
graf_puntos
;graficamos puntos
mov
ax,word ptr[b+0]
cmp
ax,0
jne
siabcis
mov
ax,word ptr[b+2]
cmp
ax,0
je
noabcis
siabcis:
call
graf_abcisa
noabcis:
jmp
bucle
fin:
call
repone
ret
inicio
endp

3.2 Diagrama de Flujo


Programa Principal
Guardamos modo de video
Ponemos modo12h
Dibujamos fondo(interfaz grafico

iniciamos
BUCLE

Hay tecla?

no

Obtiene
puntos Y
Obtiene
puntos X

SI

Divide valores x
cada 3 pixles
O 6 grados

Fuera de rango
Reponer
Video
antiguo

si

RET

si

Press ESC

Obtenemos Puntos
Con el
COPROCESADOR

Unimos
Puntos (X,Y)

Lineas con
BRESENHAM

no

Press a

si

no

Press b

si
si

ACCION de Tecla B

B=0
no

Graficar
Abcisas

no

si

Graficamos
Puntos (X,Y)

ACCION de Tecla A

Press SUPR
no

Press g

si

BUCLE
no

4.- CONCLUSIONES Y SUGERENCIAS


-

El ingreso de nmeros, debe de ser de la forma entera (-5.2; 5.0; +0.2; -0.5; 0), hay un
error cuando solamente se coloca un numero suelto (5, 2, -7). Se debe de modificar la
sub-rutina ingresar, para realizar esto.

El programa se lo presento en modo estructurado, GRAF1 contiene el programa


principal, mientras que GRAF11 solamente contiene el interfaz grafico, de esta manera
se realizo el programa de una manera ms entendible, y fue adems de fcil realizacin.

En la lnea 96 del programa principal, esta la instruccin ;call


iniciamoss que esta como
comentario, si se desea des-comentar esta instruccin borrara la grafica anterior para
graficar una nueva.
Se lo puso como comentario, para observar la anterior grafica trazada en memoria, para
borrar las graficas se aadi el botn de SUPR ya explicado arriba.

La grafica en algunas situaciones muestra el mensaje FUERA DE RANGO, cuando no se


pudo graficar las lneas cuando el valor de Y tiende a infinito. El coprocesador 387
puede manejar infinitos (definido en su manual de referencia), entonces el problema no
est en el coprocesador matemtico, est en la separacin de puntos de muestra, que es
cada 6 grados, que se lo puso as para poder apreciar de mejor manera las lneas de
BRESENHAM. Para eliminar este error de fuera de rango, el muestreo debera de ser
cada 1 grado.

También podría gustarte