ARQUITECTURA
INGENIERÍA INFORMÁTICA
ARQUITECTURA II
INFORME DEL PROYECTO
PROFESOR: EDUARDO SANABRIA G.
ESTUDIANTES: RAYMOND RUIZ CUBILLO
CALEB OREAMUNO LÓPEZ
DIEGO CEDEÑO SOTO
ABRIL 2009
INTRODUCCIÓN
En este trabajo se presentará un informe sobre la realización del proyecto final de Arquitectura II. Se dará enfoque a las partes delprograma que fueron más importantes para la creación de éste, con una explicación de su funcionamiento.
El objetivo de este informe es servir como una pequeña guía para entender más a fondo el código fuente del programa.
PLANTEAMIENTO DEL PROBLEMA
La temática del proyecto consistía en que se realizara un programa en ensamblador que demostrara de alguna forma un proceso aleatorio.
Al estarpensando que hacer, surgió la idea de los juegos de cartas. Cuando una persona baraja un mazo de cartas, es casi imposible que saque las mismas cartas al inicio en el mismo orden, a menos claro que haga trampa, porque como se dice popularmente, son juegos de azar, que dependen de la suerte. Así que se tomó esta idea para realizar el proyecto y demostrar un proceso aleatorio.
El programaconsiste básicamente en eso, se sacan cinco naipes de un mazo de cartas. El proceso de elegir que carta sale está sujeto a un procedimiento que genera un número aleatorio. Cada naipe tiene un valor asignado de 0 a 51; cuando el procedimiento Random devuelva un número dentro de ese rango, el naipe que tenga asignado ese valor será mostrado en pantalla.
SOLUCIÓN DEL PROBLEMA Y EXPLICACIÓN DE SUFUNCIONAMIENTO
Para poder realizar el programa, primero era necesario encontrar una manera de hacer el procedimiento que generara el valor aleatorio, ya que ensamblador no trae esta y otras funciones predefinidas como lo hacen otros lenguajes. La solución a ese problema se logró gracias a la función 2C de la Interrupción 21h, el Get Time. Con esta función, se consigue obtener la hora delsistema, guardando en CH la hora, en CL los minutos, en DH los segundos y en DL las centésimas de segundo.
La idea viene así: el generar un número aleatorio significa sacar un valor diferente cada vez que se ejecute, pero con la posibilidad de que ese valor pueda volver a salir. Para poder lograr esto, se necesita realizar una operación matemática en algo que se encuentre en constante cambio paragenerar resultados diferentes, pero que se vuelva a reiniciar para tener la posibilidad de volver a sacar un resultado que se consiguió anteriormente.
Pues bien, el reloj es la opción perfecta para esto. Se ignoran la hora y los minutos, y sólo se toman en cuenta los segundos y las centésimas de segundos, porque son valores que se encuentran en constante cambio a un ritmo más acelerado. Sinembargo, había que pensar en una fórmula que permitiera devolver un número que se encontrara dentro del rango deseado (para propósitos de este programa el rango sería 52, sólo que se inicializa en 51 porque se empieza a contar los valores a partir de 0).
La fórmula que se realizó fue esta:
((Resultado del Get Time en el registro DX) * Rango) / 59
Siendo el contenido de DX, los segundos y lascentésimas de segundo, Rango es el rango preestablecido (para este caso 51) y 59 significa hasta donde marcan los segundos del reloj, ya que después de 59 se vuelve a reiniciar en 0. Esta fórmula fue pensada originalmente para ser empleada sólo utilizando los segundos del reloj, pero resultaba que los valores que se obtenían eran diferentes pero salían siempre en escala ascendente, tal como vamarcando el reloj. Así que para solucionar esto, es que se decidió también tomar en cuenta las centésimas de segundo, porque estas cambian a un ritmo muy acelerado. Entonces se agarra todo el contenido de DX, que al realizar la función GET TIME, siempre va a tener almacenado un valor diferente.
Se empleó el siguiente código:
Random proc
RangoMenor:
mov ax,0
mov...
Regístrate para leer el documento completo.