Práctica de Problemas No 4

Anuncio
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
Descargar