(Este enunciado será explicado en la primera clase que corresponda a cada grupo)
Funcionamiento
La prueba consiste en la realización de una serie de procedimientos en ENSAMBLADOR que van a ser llamados desde un programa en C que se proporciona. Para que los diferentes ejercicios se puedan realizar de forma independiente (sin necesidad de haber hecho otro), se proporcionan librerías donde ya están hechos. Según se realicen los distintos procedimientos por parte del alumno deben ser sustituidos los que se proporcionan en la librería por los realizados por el alumno.
Los ejercicios consisten en la creación de una serie de procedimientos que una vez realizados deberán sustituir a los existentes en la librería TECLADO.LIB y TRONLIB.LIB respectivamente compilada en modelo LARGE.
Se
recomienda NO usar el entorno del TurboC sino compilar
el fuente en C y
enlazar con el comando tcc. Las compilaciones en ensamblador se
realizarán con el comando tasm y para meter y sacar módulos de
la librería el comando tlib. Cualquiera de estos comandos,
ejecutados sin parámetros, indican cómo deben ser usados. Las depuraciones
podrán realizarse con el TurboDebugger (td) si se utilizan las
banderas de compilación adecuadas. Es importante recordar el uso de las
banderas -ml en C y /mx en ensamblador así como la
declaración PUBLIC de los procedimientos en ensamblador.
La definición detallada de todos los procedimientos que hay que diseñar, de sus parámetros y sus valores de retorno se encuentra en teclado.h y tronlib.h. La descripción de las funciones que realiza el driver están aquí.
Se incluye un fichero ejecutable que muestra el uso de todos los procedimientos
y el resultado que se debe obtener tras cambiar todos los objetos de la
librería entregadas por los alumnos:
TRON.EXE y
DRIVERT.EXE. El fichero TRON.EXE es
El control se realiza con las siguientes teclas: Q sube, A baja, O izquierda y P derecha.
El fichero TRON.C NO SE DEBE MODIFICAR.
Un ejemplo de la secuencia de comandos a ejecutar para añadir el código de una función, por ejemplo ReadKey, escrito en un fichero denominado 3a07p1rk.asm (suponer pareja 7 del turno 3a *) sería:
tasm /mx 3a07p1rk.asm Se ensambla el fuente y se crea el objeto, 3a07p1rk.obj, siempre que no haya errores.
tlib teclado.lib -readkey +3a07p1rk Se extrae el objeto original ReadKey y se incluye el nuevo
tcc -ml tron.c teclado.lib tronlib.lib Se crea el ejecutable tron.exe. Se ejecuta (recordar que el driver debe estar instalado) y si no funciona se pasa a la depuración. Para ello es necesario hacer el proceso anterior con las banderas correspondientes.
Se recuerda que en la evaluación de la práctica será imprescindible el manejo del depurador (Turbo Debugger).
Un resumen de los procedimientos que se tienen que diseñar en ensamblador es:
Nombre del Procedimiento | Fichero Fuente * | Nombre del objeto en la librería ** | Comentarios |
void ClearKeyBuffer(); | xxxxxxk1.asm | CLEARKEY | Limpia el buffer del teclado |
int IsKey(); | xxxxxxk2.asm | ISKEY | Mira si hay tecla pulsada (equivalente a kbhit();) |
int ReadKey(); | xxxxxxk3.asm | READKEY | Devuelve la tecla pulsada. |
int GetKey(); | xxxxxxk4.asm | GETKEY | Función que espera a que se pulse una tecla, momento en la que la devuelve |
int EstadoJuego(); |
xxxxxxt1.asm | ESTADOJU | |
iint VerificaDriver(); | xxxxxxt2.asm | VERIFICA | |
int ModoJuego(char key); |
xxxxxxt3.asm | MODOJUEG | |
void EmpiezaJuego(); | xxxxxxt4.asm | EMPIEZAJ |
|
void PintaTablero(); | xxxxxxt5.asm | PINTATAB | |
char TeclaJugador1(); |
xxxxxxt6.asm | TECLAJU1 | |
char TeclaJugador2(); |
xxxxxxt7.asm | TECLAJU2 | |
void PintaMotos( char Tecla1, char Tecla2); | xxxxxxt8.asm | PINTAMOT | |
int PreguntaGanador(); | xxxxxxt9.asm | PREGUNTA | |
void TerminaJuego(); | xxxxxxta.asm | TERMINAJ | |
int EsperaFLAG(); | xxxxxxtb.asm | ESPERAFL | |
void RestauraFLAG(); | xxxxxxtc.asm | RESTAURA |
* Sustituir las xxxxxx por el nombre correspondiente a cada pareja según está descrito en las normas, es decir, grupo_pareja_práctica_orden.asm. Por ejemplo, 3a07p1k3.asm sería el nombre para el procedimiento ReadKey de la práctica 1 de la pareja 7 del turno 3a (jueves mañana)
** Para obtener el nombre de los objetos basta con ejecutar tlib nombredelalibreria.lib, nombre.lst. Con esto se crea un fichero de texto, nombre.lst donde figura el nombre del objeto y el de los procedimientos declarados como públicos.