Você está na página 1de 7

Aritmtica en coma flotante y programacin en ensamblador en

las prcticas de Estructura de Computadores: Control de un


simulador de radar

P.A. Castillo Valdivieso, M. Garca Cruz, M.G. Arenas, G. Romero, A. Prieto Espinosa
Dpto. de Arquitectura y Tecnologa de Computadores
Universidad de Granada, 18071 Granada
e-mail: pedro@atc.ugr.es

Resumen El radar realiza un barrido de 360 grados


detectando de cuando en cuando, de forma
La enseanza del lenguaje ensamblador es aleatoria, objetivos que debemos capturar.
complicada debido a la dificultad que supone a los El programa intercepta un objetivo a partir de
alumnos enfrentarse a un lenguaje de bajo nivel. la coordenada que le transmita nuestro programa
La experiencia nos dice que plantear unas de control externo. Para ello, ambos programas se
prcticas atractivas al alumno les hace interesarse sincronizan a travs de dos ficheros de texto: el
por dicho lenguaje y por la asignatura de simulador escribe el valor del ngulo y la
Estructura de los Computadores I (en la que se distancia al objeto detectado, y nuestro programa
estudia, en la Universidad de Granada). escribe la coordenada de intercepcin.
La programacin de un control de radar puede Adems de la implementacin de los accesos
ser una prctica atractiva a los alumnos, de forma a los ficheros y de la sincronizacin de los
que la programacin en ensamblador resulte casi programas, se deben realizar clculos matemticos
un juego conforme mejoran la programacin del en coma flotante para el clculo de funciones
clculo de las coordenadas. trigonomtricas. Para la prctica, el programa de
control se debe desarrollar en lenguaje
1. Motivacin ensamblador, con objeto de que aprendan dicho
lenguaje, y la arquitectura 80x86.
El simulador ha sido desarrollado en C++,
La asignatura de Estructura de los Computadores
utilizando la biblioteca de programacin grfica
I, en la Universidad de Granada, estudia el
gtkmm2 [3], de forma que puede ser compilado y
lenguaje mquina, centrndose en la arquitectura
utilizado fcilmente, tanto en Windows como en
de la familia 80x86. Las prcticas de esta
Linux/Unix.
asignatura se basan, principalmente, en el estudio
El resto del artculo est estructurado como
del lenguaje ensamblador.
sigue: en la siguiente seccin se describe el
A pesar de las ventajas que presenta este
simulador desarrollado; en la tercera seccin se
lenguaje en cuanto a poder realizar programas
explica cmo usar el simulador en prcticas. La
completamente adaptados a la mquina y por tanto
cuarta seccin expone diferentes formas de
optimizados en cuanto a velocidad y utilizacin de
calcular el seno y coseno para el clculo de las
recursos [1,2], su estudio debe plantearse de forma
coordenadas a partir de la distancia y ngulo. Por
que sea lo ms atractivo y cmodo para el alumno.
ltimo, la quinta seccin expone una serie de
En este trabajo se presenta una herramienta
conclusiones.
software que simula un radar que debe ser
controlado mediante un programa externo que
calcule una coordenada a partir de un ngulo y 2. El simulador
una distancia. Esta prctica puede resultar
atractiva a los alumnos, de forma que la El sistema constar de dos programas (ver las
programacin en ensamblador sea ms amena. Figuras 1 y 3): un simulador que muestra el radar
(programa grfico, a la izquierda), y otro
programa que realiza el control del primero
508 Recursos docentes

Figura 1. Captura de pantalla bajo Windows en la que el programa-control (a la derecha) enva coordenadas al
simulador del radar (a la izquierda). En este caso, el radar muestra cinco objetivos, de los cuales el control
ha interceptado a dos (a la derecha vemos las coordenadas a las que se ordena interceptar). Conforme el
detector del radar avanza, los objetivos que quedan ms lejanos van desapareciendo.

(programa que se ejecuta en modo texto en una decida no actuar; en ese caso, los valores
ventana de comandos, a la derecha). para X e Y deben ser igual a 0. En
cualquier otro caso, las ecuaciones a
El sistema funciona de la siguiente forma: utilizar sern las siguientes:
1. La sincronizacin entre el programa- X = 200 + distancia * cos(angulo)
control y el simulador se hace a travs de Y = 200 - distancia * sen(angulo)
dos ficheros (S y A). 5. Una vez calculada la coordenada a
2. El simulador inicializa la ventana, dibuja interceptar, se guardan los valores X e Y
el radar, y va haciendo avanzar el en el fichero A (en la primera lnea,
indicador de forma constante. A cada separados ambos nmeros por un
paso escribe en el fichero S el ngulo espacio). Para ello hay que pasar a
actual del indicador y la distancia a un cadena cada uno de los nmeros, y
objetivo detectado en ese momento (si no escribirlos en el fichero como caracteres
hubiera objetivo, escribe el valor 0 como individuales (texto plano). As, si la
distancia). coordenada es (45,70) se guardara como
3. El programa-control, que estaba en un la secuencia de caracteres 4, 5, , 7,
bucle de espera hasta que hubiera datos 0, 13, 10 (el \n , en MSDOS, se cambia
en el fichero S, lee los 2 valores. Se trata por los dos caracteres con cdigos ASCII
de acceder al fichero en modo de texto e 13 y 10).
ir leyendo carcter a carcter hasta
encontrar un espacio, lo que indicar que La sincronizacin por ficheros hace ms
se ha ledo un nmero ms. Seguiremos fcilmente portable el sistema, y al tiempo
leyendo esa lnea hasta haber ledo los 2 delimita los aspectos que el alumno debe estudiar
nmeros; despus se pasan esas cadenas para hacer la prctica:
ledas a nmeros enteros. !" E/S por pantalla
4. El control procesa esos dos valores para !" E/S por fichero
calcular la coordenada cartesiana (X,Y) !" Estructuras de control complejas para la
donde debemos interceptar. Es posible sincronizacin
que en alguna ocasin (si la distancia es
0, esto es, si no hay objetivo), el control
XI Jornadas de Enseanza Universitaria de la Informtica 509

Figura 2. Controles del simulador para iniciar o detener su funcionamiento, para reiniciarlo, obtener informacin sobre
la versin del programa, o para terminar su ejecucin.

!" Clculos matemticos con nmeros !" Reiniciar : si queremos probar diferentes
enteros y en coma flotante programas-control, pulsaremos este botn, de
!" Formato IEEE-754 de representacin de forma que se reinicie el valor del nmero de
nmeros reales objetivos y aciertos, y el indicador se site en
!" Transformacin de datos entre diversas su posicin inicial.
representaciones !" Ayuda : muestra informacin sobre la
versin del programa simulador.
3. Cmo usar el simulador en prcticas? !" Salir : termina el programa.

Hemos desarrollado una versin del simulador Para sincronizar ambos programas a travs
de los dos ficheros, el bucle principal del
para Linux y otra para Win32, por lo que la
prctica puede plantearse en ambos sistemas programa-control (el programa que debemos
operativos. realizar en ensamblador) debe ser similar al
Las versiones del simulador para los siguiente:
repetir
diferentes sistemas pueden descargarse de la URL abrir_fichero("S")
http://atc.ugr.es/~pedro/docencia/simuladores mientras(no_hay_datos_en(S)){
El programa simulador dispone de varios cerrar_fichero
botones para iniciar o detener su funcionamiento, hacer_pausa
o reiniciarlo (ver Figura 2). Su funcin queda abrir_fichero("S")
descrita a continuacin: fin_mientras
// leer los datos
!" Parar : detiene el simulador. El indicador angulo = leer_del_fichero
deja de girar y las comunicaciones se paran. distancia = leer_del_fichero
!" Continuo : comienza el funcionamiento del cerrar_fichero
radar. El indicador ir girando, y de cuando //calcular coordenada
en cuando detectar nuevos objetivos. Las x = calcular_coord_X
comunicaciones se llevarn a cabo y = calcular_coord_Y
//escribir en A la coordenada
continuamente con el programa de control.
510 Recursos docentes

abrir_fichero(A) Pues bien, nosotros vamos a partir de los


escribir_en_fichero x , y valores conocidos para ciertos ngulos, y vamos a
cerrar_fichero obviar el porcentaje de error cometido para
fin_repetir
calcular los ngulos intermedios:
Sen(0) 0
4. Clculo del seno y coseno Sen(15) 0,259
Sen(30) 0.5
Para realizar esta prctica es imprescindible Sen(45) 0.707
utilizar nmeros reales para el clculo del seno y Sen(60) 0,866
del coseno de un ngulo (ver el Apndice I para Sen(75) 0,966
una descripcin de los clculos en coma flotante Sen(90) 1
usando el coprocesador matemtico). En cuanto
Para ngulos intermedios sumaremos un valor
a posibles formas de calcular el seno y coseno de
calculado como (sen(a2)-sen(a1))/15 de forma
un ngulo, daremos varias posibilidades.
que obtendremos un valor aproximado con un
error aceptablemente pequeo.
4.1. Desarrollo en serie De esta forma, y a partir de estos clculos
podemos obtener los valores correspondientes al
Podemos calcular el seno y coseno de un ngulo seno de los ngulos de los restantes cuadrantes, y
mediante los siguientes desarrollos en serie: los correspondientes al coseno.
$
x 2 n &1
sen( x) % # (&1) n &1 4.3. Construir la tabla completa
n %1 (2n & 1)!
$
x 2 n&2 Una variacin consiste en tener una tabla
cos( x) % # (&1) n &1
completa (360 entradas, para los 360) para el
n %1 (2n & 2)! clculo del seno y otra diferente para el clculo
del coseno. De esta forma, para cada valor del
Las sumatorias las haremos con t trminos, tal ngulo slo tenemos que ir a la posicin de la
que la diferencia entre la suma desde 1 hasta t y tabla para obtener el valor ya calculado.
la suma desde 1 hasta t+1 sea menor que una En este trabajo no las vamos a poner, y de
constante dada que determinar la precisin. hecho se recomienda utilizar cualquiera de los
otros mtodos antes que ste.
4.2. Geometra recreativa
4.4. Usar las instrucciones del coprocesador
La idea bsica la tomamos de la pgina web:
http://es.geocities.com/geometriarecreativa/g La ms rpida y sencilla de las opciones
eomrecreat05.html propuestas. El Apndice I describe la forma de
En ella se nos explica cmo calcular ciertas realizar clculos en coma flotante usando el
funciones matemticas de una forma un tanto coprocesador matemtico. Las instrucciones
manual, sin recurrir a tablas, calculadoras, ni aritmticas que utilizaremos son las siguientes:
nada. FCOS : calcula el coseno del valor contenido
Es cierto que con estos clculos, el error en la cima de la pila del coprocesador. Se
cometido puede variar y ser algo ms alto que con supone expresado en radianes (habr que
el mtodo anterior, pero resulta mucho ms transformar los ngulos ledos en grados a
sencillo de programar. radianes, multiplicando por PI y dividiendo
La idea bsica que se expone es subdividir el por 180). Se sustituye la cima de la pila por el
primer cuadrante del crculo para ir calculando el valor calculado.
seno de cada ngulo simplemente sumando una FSIN : calcula el seno del nmero real
cantidad fija que podemos calcular por semejanza contenido en la cima de la pila. Se supone
de tringulos. Segn se explica en la pgina, expresado en radianes. Se sustituye la cima
podemos cometer errores de menos del 2% en el por el valor obtenido.
clculo del seno de cualquier ngulo.
XI Jornadas de Enseanza Universitaria de la Informtica 511

FSINCOS : halla el seno y el coseno del El funcionamiento de los registros internos del
ngulo (en radianes) que hay en la cima de la coprocesador matemtico es diferente al del 8086.
pila, y deja ambos valores en la cima y en la No existen aislados ni con nombres distintos.
siguiente posicin de la pila. Estn estructurados en forma de pila cclica de
ocho elementos. Cada elemento de la pila es de
5. Conclusiones 10 bytes de longitud (80 bits), y el formato de los
datos es real temporal, de forma que el rango de
El aprendizaje del lenguaje ensamblador suele valores representable va de 3.4E-4932 hasta
resultar complicado a los alumnos, as como llegar 1.2E4932. La representacin binaria interna sigue
a hacerles ver la necesidad de su estudio. Sin el formato IEEE754 [4,5].
embargo, plantearles unas prcticas amenas y El puntero de pila indica en todo momento
atractivas puede motivarlos, evitando que les cul es el elemento que se encuentra en la
resulte tan engorroso el estudio a tan bajo nivel de cabecera de la pila (Stack Top). Puede valer entre
la programacin. 0 y 7, es decir, seala el nmero del elemento.
Este trabajo presenta un simulador de radar La mayor parte de las instrucciones del 8087
desarrollado con esta idea. El alumno debe usan los registros de la pila. As, las aritmticas
desarrollar un programa de control que recibe el utilizan uno o dos operandos de la pila y el
valor de la distancia y ngulo del objetivo resultado se deja tambin en la pila.
detectado, y le enva la coordenada cartesiana del Todos los nombres simblicos de las
objetivo a interceptar. instrucciones empiezan por F. El conjunto de
El primer ao en que se ha ofertado esta instrucciones se puede dividir en los siguientes
prctica varios alumnos han desarrollado tipos(ver [1,2] para obtener ms detalles):
programas de control siguiendo las diferentes
opciones para el clculo del seno y coseno. Les !" de transferencia de datos. Sirven para mover
result estimulante y motivador comprobar cmo operandos entre los elementos de la pila y la
sus programas calculaban las coordenadas memoria:
correctamente y acertaban en los objetivos. FLD cargar real en la pila
FST almacenar real en mem.
FILD cargar entero en la pila
Referencias FIST almacenar entero en mem.

[1] RODRGUEZ-ROSELL, M. A.: "8088- !" Aritmticas. Permiten hacer operaciones


8086/8087. Programacin ensamblador en aritmticas. Los operandos pueden ser
entorno MSDOS". Anaya Multimedia, 1993 elementos de la pila o de memoria. El
[2] BELTRN DE HEREDIA, Jon: "Lenguaje resultado se almacena en la pila:
ensamblador de los 80x86" Anaya FADD sumar reales
Multimedia. Coleccin Guas prcticas para FIADD sumar num. enteros
programadores. ISBN: 84-7614-622-1 FSUB restar num. reales
[3] http://gtkmm.sourceforge.net/gtkmm2 FISUB restar num. enteros
[4] STEVENSON, D.: "A Proposed Standard FMUL multiplicar reales
for Binary Floating-Point Arithmetic: Draft FIMUL multiplicar enteros
8.0 of IEEE Task P754." IEEE Comput. FDIV dividir reales
14 51-62, 1981. FIDIV dividir enteros
[5] A. Prieto Espinosa, A. Lloris Ruiz, J.C. FSQRT raz cuadrada
Torres Cantero: "INTRODUCCIN A LA FABS valor absoluto
INFORMTICA 3ed". Editorial McGraw-
Hill. ISBN: 8448132173 !" de comparacin. Sirven para comparar dos
operandos. Para analizar el contenido del
Apndice I. Arquitectura del coprocesador cdigo de condicin hay que transferir a
memoria la palabra de estado:
FCOM comparar dos valores reales
FICOM comparar dos valores enteros
512 Recursos docentes

FXAM examina el tope de la pila,


para determinar si contiene un valor fistp dword [z] ; z=st0
normalizado, renormalizado, cero, infinito o
vaco.

!" de clculo de funciones. Sirven para calcular Z = sqrt( (X-Y) / Z )


funciones trigonomtricas, logartmicas y
exponenciales:
fld dword [y] ; st0=y
FPTAN tangente de un ngulo
fld dword [x] ; st0=x st1=y
FCOS coseno de un ngulo
FSIN seno de un ngulo
fsubrp st1 ; st0=x-y st1=x st2=y
FSINCOS seno y coseno de un ngulo
fld dword [z] ; st0=z st1=x-y st2=x
!" relativas a constantes. Sirven para cargar una
constante en la pila: fdivp st1 ; st0=(x-y)/z st1=z ...
FLDZ cargar 0.0
FLD1 cargar 1.0 fsqrt ; st0=sqrt((x-y)/z) . . .
FLDPI cargar PI
fistp dword [Z] ; Z=st0
!" de control del microprocesador. Corresponden
a actividades internas del coprocesador
(inicializacin, cambiar modo de redondeo,
permitir o inhibir interrupciones, etc): X = dist * cos(angulo)
FINIT inicializar coprocesador
FDISI desactivar ints fld dword [pidiv180] ; st0=PI/180
FENI activar ints fld dword [ang] ; st0=ang st1=PI/180
FSTSW almacenar palabra de estado
FNOP no operacin fmul st1 ; st0=a=ang*PI/180

Las del clculo del seno y coseno fcos ; st0=cos(a) st1=a


corresponden al 80387, de forma que el 8087 no
puede ejecutarlas. fld dword [dist] ; st0=dist st1=cos(a)
fmul st1 ; st0=dist*cos(a) st1=dist
A modo de ejemplo, veamos cmo realizar
tres operaciones aritmticas sencillas y la fistp dword [X] ; X=st0
comparacin entre dos valores. No mostraremos
todo el programa ensamblador, sino slo las
instrucciones que usaramos para hacer el clculo. Comparar X e Y

fldz ; st0= 0
Z=YX*X fld dword [y] ; st0=y st1=0
fld dword [x] ; st0=x st1=y st2=0

fld dword [x] ; st0=x ; comparer st0 con st1 (st0-st1)


fcomp st1
; st0=st0*st0 ;cargar la palabra de estado en AX
fmul st0 ; st0=x*x st1=x fnstsw

fld dword [y] ; st0=y st1=x*x st2=x ; si (st0<st1) entonces ah=???????1 (x<y)
; si (st0>st1) entonces ah=???????0 (x>y)
; st0=st1-st0 and ah,00000001b
fsubrp st1 ; st0=y-x*x st1=y st2=x*x jnz x_menor
XI Jornadas de Enseanza Universitaria de la Informtica 513


x_menor:

Figura 3. Captura de pantalla bajo Linux en la que el programa-control (abajo a la derecha) enva coordenadas al
simulador del radar (arriba a la izquierda). En este caso, la pantalla del simulador muestra tres objetivos,
uno de los cuales ha sido interceptado.

Você também pode gostar