Guion CODE2
Guion CODE2
Guion CODE2
ICCP
Fundamentos de Informática
Grado en Ingeniería Electrónica Industrial
Objetivos
I. Comprender la utilidad de un programa ensamblador.
II. Familiarizarse con el entorno de programación de CODE-2.
III. Ser capaz de escribir un programa de CODE-2 y depurarlo.
Contenido
1. Introducción ................................................................................................................................................................. 2
2. El panel frontal de CODE-2 ..................................................................................................................................... 2
3. El entorno integrado de CODE-2 (simulador, editor y ensamblador) .................................................. 3
4. Ejemplos de uso del simulador ............................................................................................................................. 4
5. Actividades a realizar ............................................................................................................................................... 7
6. Otras actividades recomendadas ......................................................................................................................... 8
7. Referencias.................................................................................................................................................................... 9
Fundamentos de Informática Página 2
1. Introducción
CODE-2 es una máquina de tipo von Neumann que contiene todas las unidades típicas de este
modelo: entradas, salidas, unidad de control, unidad de procesamiento y memoria de datos e
instrucciones. CODE-2 es de 16 bits de longitud de palabra y tiene tan sólo 16 instrucciones máquina.
A través del lenguaje máquina de CODE-2 tenemos acceso a los siguientes elementos:
• Banco de registros: compuesto por 16 registros (r0 .. rF). Todos son de propósito general,
aunque el registro rE se suele utilizar como puntero de pila y rD como registro de dirección.
• Unidad aritmético-lógica (ALU): podremos hacer sumas y restas en complemento a 2, la
operación NAND y desplazamientos.
• Biestables indicadores: cero (Z), signo (S), acarreo (C) y desbordamiento (V), según la
operación realizada en la ALU.
• Memoria principal: compuesta por 64Kpalabras de 16 bits (128KB).
• Puertos de entrada: se pueden usar hasta 256 puertos de entrada (desde el IP00 a IPFF).
• Puertos de salida: se pueden usar hasta 256 puertos de salida (desde el OP00 a OPFF).
La figura anterior muestra el panel frontal de CODE-2, en el que podemos ver los botones de
encendido y ejecución paso a paso, el teclado hexadecimal con el puerto de entrada IP1 conectado a
éste, los dos puertos de salida OP1 y OP2, el registro de instrucción IR, el contador de programa PC,
los biestables de la ALU y las teclas/botones de control.
El entorno integrado que nos facilitará el manejo de CODE-2 se puede encontrar en el fichero
CODE2.zip en SWAD.
También se puede ejecutar dicho entorno integrado desde Linux a través de Wine
(http://www.winehq.org/), aplicación de código abierto que implementa el API de Windows sobre
entornos X, OpenGL y Linux. Para ello tecleamos: wine entorno_code2.exe
Escriba un programa para CODE-2 que se cargue a partir de la dirección H’000A de memoria cuyo
cometido sea sumar el contenido de las posiciones H’0000 y H’0001 de memoria y almacenar el
resultado en la posición de memoria H’0002, es decir,
M[H’0002] ← M[H’0000]+M[H’0001].
Asimismo, el resultado deberá visualizarse por el puerto de salida OP2.
Ejemplo:
Si M[H’0000] = H’0B59 y M[H’0001] = H’0004, tras la ejecución del programa M[H’0002] debe contener el
valor H’0B5D (ya que H’0B59 + H’0004 = H’0B5D)
Para este ejemplo, el programa que debemos escribir debería quedar aproximadamente como se
muestra en la siguiente figura, suponiendo que hemos guardado nuestro programa con el nombre
prueba1.asm.
Y, sobretodo, no se debe olvidar que conviene siempre especificar al menos una sentencia ORG para
indicar al ensamblador a partir de qué dirección de memoria vamos a cargar el programa y recordar
que todos los programas deben acabar con la directiva END. Por defecto, si no se especifica ninguna
sentencia ORG se comienza a partir de la dirección H’0000 de memoria.
5. Actividades a realizar
2. Tenemos en memoria un conjunto con H’0F datos (una tabla). El primer dato (inicio de la tabla) se
encuentra en la posición H’00C0. Hacer un programa que vaya leyendo los datos de la tabla y
cuente cuántos números positivos, negativos y ceros hay en el conjunto. Cuando llegue al final,
debe mostrar por OP1, primero cuántos números negativos había, a continuación cuántos ceros, y
por último cuántos positivos había. Cargar el programa a partir de la posición H’0010.
En este apartado se propone, con carácter opcional, practicar diversos aspectos en relación con los
lenguajes máquina y ensamblador de Code-2, mediante diferentes ejemplos y ejercicios resueltos
que se presentan en el material docente de la asignatura:
1. Realizar un programa en CODE-2 que sume uno a uno los elementos de dos tablas (vectores),
T1 y T2, y deje los resultados en otra tabla T3, es decir: T3(i) = T1(i) + T2(i); i= 0, 1, …., 31.
Suponer que: T1 comienza en d1=0040, T2 en d2=0080, y T3 en d3=00C0. La longitud de las
tablas es de 32 elementos, nT=H’20. (Resuelto en lección L3.5).
7. Referencias