Introducción a las Computadoras Digitales Año 2008 Práctica de Problemas No 4 Lenguaje Ensamblador Ejercicio 1 Las siguientes instrucciones son muy comunes en cualquier programa: If(n = 0) . . . If(i > j) . . . If(k < 4) . . . Escriba tres fragmentos de código en ASM85 que realicen cada una de las sentencias anteriores. Ejercicio 2 ¿Cómo se puede “limpiar” (esto es, poner todos los bits en 0) el contenido de un registro sin tener una instrucción precisa que lo haga? Ejercicio 3 Indique en ASM8 una forma de intercambiar el contenido de 2 registros A y B, sin utilizar una tercer variable ni otro registro. Pista: piense en la operación OR-Exclusivo. Ejercicio 4 Diseñe un bloque de instrucciones en ASM85 que represente la siguiente sentencia: While a 6= b do { ... } Ejercicio 5 Analizar el comportamiento de los fragmentos de programa de la Tabla 1. Determinar la función que realizan. Ejercicio 6 ¿Cuál es la diferencia entre una instrucción y una pseudo-instrucción? Ejercicio 7 Escribir un bucle infinito en ASM85, utilizando sólo una instrucción. ¿Qué utilidad puede tener esta estructura? 1 Laboratorio de Sistemas Digitales Introducción a las Computadoras Digitales SUMAR: ACA: LXI SP, 20C8H LXI H, 2800H LXI D, 000AH MVI C, 0AH PUSH H MOV A, M DAD D ADD M DAD D MOV M, A POP H INX H DCR C JNZ ACA RET PONM1: LXI SP, 20C8H LXI H, 280AH MVI C,0AH MVI A, FFH MOV M, A INX H DCR C JNZ PONM1 CALL SUMAR BSQD: FN: NST: Año 2008 MVI A, FFH STA 200BH LXI H, 2000H LDA 200AH SUB M INX H JNZ BSQD MOV A, L SUI 0BH JZ NST LDA 200AH RST 1 LDA 200B JMP FN Cuadro 1: Fragmentos de programa. Ejercicio 8 Explique la diferencia entre una macro y una subrutina, indique las ventajas de una y otra. ¿Cómo se le pueden pasar parámetros a una subrutina? Ejercicio 9 PASCAL es un lenguaje de programación estructurado en bloques. Ésto permite anidar bloques de rutinas, no sólo dentro del programa principal, sino también dentro de otra rutinas. Cada rutina puede tener sus propias declaraciones y definiciones locales, incluso se puede redeclarar en ella un identificador que haya sido declarado en un bloque más externo. Una rutina declarada en un nivel más interno tiene acceso a las declaraciones y definiciones hechas en todos los bloques que la contienen. La parte del programa donde se tiene acceso a un identificador se llama ámbito o alcance del identificador. Fuera de ese dominio, un identificador no tiene significado o tiene significado diferente. Concretamente, el ámbito de un identificador es el bloque donde ha sido declarado. Como los bloques pueden estar anidados, el alcance de un identificador puede incluir a bloques situados a niveles inferiores en la jerarquı́a del programa. Tenga en cuenta el programa planteado en el Cuadro 2. PROGRAM exterior; VAR i:integer; PROCEDURE interior VAR j:integer; j := 1; PROCEDURE masInterior VAR i:integer; i := 5; END masInterior; masInterior i := i + j; END interior; i := 2; interior; write( i ); END exterior; Cuadro 2: Alcance de identificadores. a) Indicar el valor escrito por la instrucción write. b) Reescribir el programa planteado en ASM85, utilizando subrutinas y los registros B y C para las variables i y j, respectivamente. Evaluar el funcionamiento del programa. c) ¿Qué cuidados especiales se deben tener en cuenta al trabajar con subrutinas en lenguaje ensamblador que no son tenidos en cuenta en un lenguaje como Pascal? 2 Laboratorio de Sistemas Digitales Introducción a las Computadoras Digitales Año 2008 d) Averiguar qué significa cambiar el contexto en términos de un sistema operativo. ¿En qué se relaciona este concepto con su respuesta a la pregunta c)? Ejercicio 10 La programación de cualquier sistema, en general, no se realiza mediante la codificación de único archivo de programa. Es una buena práctica de programación dividir el programa en módulos que comparten ciertas caracterı́sticas (recordar la pseudo-instrucción uses de Pascal). En lenguaje ensamblador también es posible realizar esto. Observe el esquema de la Figura 1 y responda: Modulo1.asm Modulo2.asm Global v1 External v2 Global v2 External v1 v1: ADI B, 10H RET CALL v2 ... END v2: MVI A, FFH RET CALL v1 ... END Figura 1: Uso de las directivas global y external a) ¿Qué función cumplen las directivas global y extern? b) ¿Cómo es el proceso de ensamblado y linkeo de los archivos mostrados? Ejercicio 11 Identificar los modos de direccionamiento en las siguientes instrucciones, justificando la respuesta: 1. 2. 3. 4. 5. 6. MVI A, 32 MOV M, A INX H MOV A, E XTHL LDA label1 Ejercicio 12 Identificar los ciclos de máquina que componen las siguientes instrucciones, determinando la cantidad de perı́odos de reloj que consumen cada uno de ellos: 1. 2. 3. 4. 5. 6. 7. 8. MOV A,D CMP H SPHL NOP POP D RRC DCR M STA label2 Ejercicio 13 Los Sistemas de Tiempo Real son una clase de sistemas computacionales que involucran restricciones de tiempo en su especificación. Uno de los requerimientos en esta clase de sistemas es el conocimiento del tiempo que dura la ejecución de una cierta tarea. En base al Ejercicio 12, piense alguna forma de determinar dicho tiempo. ¿Cómo se determina este tiempo si el programa involucra ciclos condicionales? 3 Laboratorio de Sistemas Digitales Introducción a las Computadoras Digitales Año 2008 Ejercicio 14 Implementar un semáforo de 2 y 3 movimientos (como el realizado en el laboratorio) mediante un programa en ASM85. Asuma que los estados R1 , R2 , A1 , A2 , V1 , V2 se encuentran mapeados en el puerto 40h de I/O (debe utilizar la instrucción out). Escriba el programa completo, respetando las restricciones de tiempo indicadas en el laboratorio. Ejercicio 15 - Opcional Implementar una macro instrucción que realice el modo de direccionamiento indexado en el microprocesador 8085. Ejercicio 16 - Opcional Implementar una macro instrucción que realice el modo de direccionamiento basado en el microprocesador 8085. Ejercicio 17 - Opcional Implementar para el microprocesador 8085 una macro instrucción que realice un salto a subrutina relativo indexado: BRANCHX DESPLA Donde DESPLA es una cantidad de 16 bit con signo. Descripción: PC ← PC + X + DESPLA Donde X es un registro de 16 bits contenido en dos lugares de memoria consecutivos (el primero de ellos está etiquetado como X). Realizarla en lenguaje ensamblador detallando con comentarios. 4 Laboratorio de Sistemas Digitales