Documentos de Académico
Documentos de Profesional
Documentos de Cultura
10 Coprocesador10 Coprocesador10 Coprocesador
10 Coprocesador10 Coprocesador10 Coprocesador
Ingeniera Electrnica
SISTEMAS DE COMPUTACIN, ETN903
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:
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
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
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.