ESTRUCTURA DE COMPUTADORES
Prácticas de Laboratorio
DEPARTAMENTO DE AUTOMÁTICA
Universidad de Alcalá Departamento de Automática Área de A.T.C.
consecutivos. Esto lo hace muy útil en aquellos sistemas que puedan tener DECIMAL GRAY
estados de ambigüedad al cambiar dos o más bits a la vez. Mientras que unos 0 0000
bits pasan a cero, los otros pasan a uno. Cuando una posición pasa de 0111 a 1 0001
1000 (de 7 a 8), el dispositivo conectado puede recibir datos falsos según 2 0011
cómo interprete los estados intermedios de 0 a 1 y 1 a 0, especialmente si los 3 0010
tiempos de transición entre niveles son distintos. 4 0110
5 0111
Un procedimiento para convertir un numero binario a código Gray consiste en
6 0101
desplazar un bit a la derecha el número binario rellenando el hueco resultante
7 0100
con un cero y a continuación se comparan bit a bit el numero original y el 8 1100
resultante del desplazamiento. Si los bits son iguales en su lugar se pone un 9 1101
cero y si son distintos se pone un uno. 10 1111
Por ejemplo: convertir el número binario 1011 a Gray 11 1110
12 1010
1011 ; Binario 13 1011
14 1001
0101 ; Desplazamos 1 bit a la derecha y rellenamos con cero 15 1000
------ ; Comparamos dígitos, si son iguales ponemos 0 y si no 1
1110 ; Gray
1111
17. Programa que haga la conversión opuesta a la del programa anterior. Un procedimiento consiste en
comparar el bit de mayor peso con cero, si son iguales se pone el bit de mayor peso del número
binario resultante a cero y si son distintos se pone a uno. El siguiente bit del número codificado en
Gray se compara con el bit del resultado anterior y siguiendo la misma norma, si son iguales el bit del
resultado se pone a cero y si son distintos se pone a uno. Así sucesivamente hasta recorrer todos los
bits del número codificado en Gray. Ejemplo de conversión del número codificado en Gray 1110:
18. Programa que analiza un dato de 16 bits situado en memoria para contar los bits puestos a uno que
contiene. El resultado se almacena en la memoria.
19. Programa que a partir de los datos contenidos en una tabla de 10 números enteros de un byte,
distintos de cero, cuente los datos positivos, los negativos, los pares y los impares. Los resultados se
almacenan en la memoria.
20. Programa que analiza un dato de 16 bits, cuyos 15 bits de menor peso corresponden al dato,
estando reservado el bit de mayor peso para el bit de paridad. El programa genera el bit de paridad y
lo incorpora como bit de mayor peso al dato. La paridad consiste en contar los bits a uno del dato y
generar un bit que es cero si la cantidad de unos es par o uno si la cantidad de unos es impar.
21. Se pretende realizar la transmisión de una serie de caracteres de 8 bits a un dispositivo lejano. Para
evitar posibles errores en la transmisión, se obtendrá el bit de paridad de cada carácter. Como el
dispositivo de transmisión sólo nos permite transmitir bytes, los bits de paridad se agruparán de ocho
en ocho formando bytes con objeto de mejorar la eficiencia de la transmisión. De esta manera, por
cada ocho caracteres que enviemos, enviaremos un byte de paridades que, además, se mandará
duplicado para facilitar la detección de los errores, en este dato, por parte del receptor.
Nuestro programa debe codificar una tabla de 40 caracteres intercalando adecuadamente los bytes
de paridad, así pues deberemos crear una nueva tabla que es la que en realidad se enviará.
Ejemplo:
Tabla1 DB 45h,27h,18h,0E5h,1Eh,2Fh,3Eh,10h,05h,3Dh,34h,... ;Tabla de 40
caracteres.
Tabla2 DB 45h,27h,18h,0E5h,1Eh,2Fh,3Eh,10h,97h,97h,05h,3Dh,34h,... Tabla transmitida de
50 caracteres donde
97h es el byte
formado con los bit
de paridad de los
ocho primeros bytes.
NOTA: Para la detección de paridad NO se pueden utilizar los saltos condicionados JP, JPE, JPO, JNP.
Estructura de Computadores Prácticas de Laboratorio Página 2
Universidad de Alcalá Departamento de Automática Área de A.T.C.
22. Programa que recoge un byte de la memoria e invierte el orden de los bits.
Ejemplos: Dato: 10110011 --> Resultado: 11001101
Dato: 01101011 --> Resultado: 11010110
para controlar el altavoz que permite generar una señal de frecuencia programable. Además el
altavoz se puede activar y desactivar a través de un puerto de control.
Para hacer que el altavoz emita un sonido de una frecuencia determinada durante un tiempo hay que
seguir los siguientes pasos:
1. Cargar el periodo de la frecuencia deseada en el temporizador:
mov al,0B6h ;prepara el temporizador para recibir
out 43h,al ;el valor del periodo (contador = 1193180 / frecuencia)
mov ax,periodo
out 42h,al ;parte baja del periodo al puerto 42h
xchg al,ah
out 42h,al ;parte alta del periodo al puerto 42h
2. Activar el altavoz a través del puerto 61h. Se lee el puerto y se modifican los bits 0 y 1
poniéndolos a 1.
3. Se pone en marcha el retardo de 2 segundos. Se puede utilizar la función 2Ch de la interrupción
21h, descrita en el programa 36, para contar los segundos.
4. Desactivar el altavoz poniendo a cero los bits 0 y 1 del puerto 61h.
41. Programa que pide el nombre de pila del usuario y lo muestra desplazándose por el centro de la
pantalla de arriba a abajo. La salida del programa se realiza cuando se pulsa cualquier tecla.
42. Programa que muestra una frase desplazándose por la pantalla lateralmente. La frase aparece por el
centro del lateral izquierdo de la pantalla y termina saliendo por el lateral derecho. La salida del
programa se realiza cuando se pulsa cualquier tecla.
43. Programa que solicite dos números de dos cifras hexadecimales como máximo cada uno, y que
luego presente el menú siguiente:
1. Sumar A + B
2. Restar A - B
3. Multiplicar A x B
4. Dividir A / B
0. Salir
Introduzca una opción: 1, 2, 3, 4 ó 0:
En función de la opción escogida, deberá presentar el resultado de la operación en hexadecimal en
pantalla. Si el usuario escoge un carácter diferente a las opciones, el programa deberá emitir un
pitido y presentar nuevamente el menú. Si la operación elegida es la división, deberá proporcionar el
cociente y el resto.
44. Programa que convierte números en binario, de 16 bits como máximo, en su correspondiente
representación decimal. El programa comprueba la entrada de caracteres no válidos, admitiendo
cualquier cantidad de ceros y unos inferior o igual a 16; después de cada conversión pregunta si se
quiere continuar.
45. Programa que escribe una cadena en un recuadro de la pantalla. El programa escribirá una cadena
de texto, que será leída por teclado, dentro de recuadro en la pantalla (configurada en modo texto
80x25), determinado por las coordenadas de su esquina superior izquierda y su esquina inferior
derecha. No es necesario dibujar el recuadro, solamente insertar dentro el texto.
46. Programa que muestra un carácter en movimiento (por ejemplo el carácter ASCII 219, '█') por la
pantalla, partiendo del centro y siguiendo el movimiento marcado por las teclas del cursor del teclado
extendido: flecha arriba (48h), flecha abajo (50h), flecha izquierda (4Bh) y flecha derecha(4Dh).
Cuando se mueva el carácter debe dejar un "rastro" en la pantalla. El programa termina cuando se
pulsa la tecla ESC (1Bh).
47. Programa para trazar dos ejes de coordenadas en un punto de la pantalla en modo texto, tanto en
modo 80x25 como en 40x25, utilizando los símbolos ASCII de trazado de líneas y recuadros: 179 '│'
, 196 '─' y 197 '┼' . El programa debe pedir el modo de vídeo que se desea y las coordenadas del
punto para trazar los ejes.
48. Programa que simula un indicador de temperatura en la pantalla; pulsando la tecla A, aumenta la
temperatura un grado, pulsando Z disminuye un grado; si se pulsa S termina el programa. La escala
de temperatura se muestra en la pantalla divida en grados centígrados desde -20 hasta +40. Se
utilizan los caracteres 195 '├', 196 '─' , 194 '┬', 197 '┼' y 180'┤' para construir la escala. Con los
caracteres '█' y ' ' se dibujan los incrementos y disminuciones de temperatura. La escala podría
tener el aspecto siguiente:
██████████████████
├────┬────┼───┬────┬───┬────┤
-20 -10 0 10 20 30 40
Atributos para imprimir caracteres con colores, video inverso, etc. con la función 09h de la int 10h:
Byte de atributo para los modos 0, 1, 2 y 3 de vídeo P = Parpadeo o intensidad de fondo (por defecto =
Bit 7 6 5 4 3 2 1 0 parpadeo)
I = Intensidad de primer plano o selección de caracteres
P Fondo I Primer plano (por defecto = intensidad)
Valores por defecto para programar los colores y controlar los bits P o I:
Azul Verde Cyan Rojo Magenta Blanco
Negro Azul Verde Cyan Rojo Magenta Marrón Blanco Gris Amarillo
pálido pálido pálido pálido pálido intenso
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
NOTA: Se puede optar por no modificar ninguna variable del sistema operativo, realizando sólo el
apartado 1 (descomprimir el fichero en un directorio). En ese caso, cada vez que se quiera trabajar con
el ensamblador, hay que iniciar una sesión del Procesador de comandos de Windows (icono Símbolo del
sistema) y una vez en ella, situarse en el directorio donde se ha descomprimido dicho programa. Cuando
se esamble un programa hay que ejecutar el ensamblador con los parámetros /Zi /L (por ejemplo: MASM
/Zi /L progr.asm) y cuando se enlace, ejecutar el enlazador con el parámetro /Co (por ejemplo: LINK /Co).