You are on page 1of 12

Fundamentos de Informtica

Grado en Ingeniera de Tecnologas de Telecomunicacin

PRCTICA 3: FUNCIONAMIENTO A BAJO NIVEL DE UN ORDENADOR: CODE-2

Objetivos
I.

Comprender el ciclo bsico de ejecucin de instrucciones de un computador.

II.

Comprender la utilidad de un programa ensamblador.

III.

Familiarizarse con el entorno de programacin de CODE-2.

IV.

Ser capaz de escribir un programa de CODE-2 y depurarlo.

Contenido
1.
2.
3.
4.
5.
6.

Introduccin ................................................................................................................................................................. 2
Repertorio de instrucciones mquina ............................................................................................................... 2
Panel frontal de CODE-2 .......................................................................................................................................... 4
Utilizacin del Entorno Integrado (Ensamblador + Simulador + Editor) de CODE-2.................... 5
Requisitos para realizar los ejercicios ............................................................................................................... 9
Ejercicios (a elegir dos) ........................................................................................................................................ 10

Fundamentos de Informtica

Pgina 2 de 12

1. Introduccin
CODE-2 es una mquina de tipo von Neumann que contiene todas las unidades tpicas 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 slo 16 instrucciones mquina.
A travs del lenguaje mquina de CODE-2 tenemos acceso a los siguientes elementos:

Banco de registros: compuesto por 16 registros (r0 .. rF). Todos son de propsito general,
aunque el registro rE se suele utilizar como puntero de pila y rD como registro de direccin.
Unidad aritmtico lgica (ALU): podremos hacer sumas y restas en C2, la operacin NAND y
desplazamientos.
Biestables indicadores: cero (Z), signo (S), acarreo (C) y desbordamiento (V), segn la
operacin 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).

2. Repertorio de instrucciones mquina


El repertorio de instrucciones completo se encuentra en la seccin 8.3.3 del libro de teora. En las
secciones 8.3.4 y 8.3.5 se pueden encontrar diversos trucos de programacin y ejemplos de
programas respectivamente. A modo de resumen se incluye aqu la tabla-resumen con las 16
instrucciones, sus parmetros, formato y una explicacin de su uso:

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 3 de 12

ParForm.
metros

Hex

Nombre

Nemnico

0
1

LD
ST

rx,[v]
[v],rx

F3
F3

LLI

rx,v

F3

LHI

rx,v

F3

rx(15:8)v

4
5
6
7
8

Cargar
Almacenar
Carga inmediata
baja
Carga inmediata
alta
Entrada
Salida
Suma
Resta
NAND

IN
OUT
ADDS
SUBS
NAND

rx,IPv
OPv,rx
rx,rs,ra
rx,rs,ra
rx,rs,ra

F3
F3
F4
F4
F4

Desplaz. izqda

SHL

rx

F1

Desplaz. dcha

SHR

rx

F1

rxIPv
OPvrx
rxrs+ra
rxrs-ra
rx(rsra)
Crx(15), rx(i)rx(i-1), i=15,,1;
rx(0)0
Crx(0), rx(i)rx(i+1), i=0,,14;
rx(15)0

SHRA

rx

F1

Crx(0), rx(i)rx(i+1), i=0,,14

B-

cnd

F2

Si cnd se cumple, PCrD


Si cnd se cumple, rErE-1,
M(rE)PC, PCrD
PC M(rE); rErE+1
Parar

2
3

Desplaz. aritmtic.
dcha
Salto

Subrutina

CALL-

cnd

F2

E
F

Retorno
Parar

RET
HALT

F0
F0

Explicacin

rxM(rD+v)
M(rD+v)rx
rx(15:8)H00;
rx(7:0)v

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 4 de 12

3. Panel frontal de CODE-2


La siguiente figura muestra el panel frontal de CODE-2, en el que podemos ver los interruptores de
encendido y 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 instruccin IR, el contador de programa PC, los
biestables de la ALU y las teclas/botones de control.

Modos de funcionamiento:

Seleccionar una posicin de memoria: tecleamos la direccin cuyo contenido queremos ver y
pulsamos la tecla DIRECCIN. En OP1 aparece la direccin tecleada y en OP2 su contenido. Si
ahora pulsamos CONTINUAR, iremos viendo las siguientes posiciones de memoria.
Cargar una informacin en una posicin de memoria: tras seleccionar una posicin de
memoria, podemos introducir una informacin por el teclado y pulsar CARGAR para guardar
en esa posicin de memoria esa informacin. Automticamente se incrementa la posicin de
memoria, de forma que se puede cargar un programa o tabla de datos sin ms que ir
introduciendo el dato y pulsando en CARGAR.
Seleccionar los registros: pulsando en REGISTROS aparece en OP1 el cdigo del registro 0, y en
OP2 el contenido. Pulsando a continuacin en CONTINUAR podemos ver el resto de registros.
Cargar un valor en un registro: una vez que hemos seleccionado un registro, introducimos el
valor por el teclado y pulsamos CARGAR. Se memoriza dicho valor en el registro y se pasa a
visualizar el siguiente registro.
Ejecutar un programa: introducimos por el teclado la direccin de comienzo del programa y
pulsamos EJECUTAR. En el caso de estar en modo Paso a Paso, una vez ejecutada la primera
instruccin del programa, se irn ejecutando las siguientes instrucciones del mismo cada vez
que pulsemos CONTINUAR.

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 5 de 12

4. Utilizacin del Entorno Integrado (Ensamblador + Simulador +


Editor) de CODE-2
El entorno integrado que nos facilitar el manejo de CODE-2 se puede encontrar en la pgina web de
la asignatura (SWAD). El fichero entorno_CODE2.exe ejecuta el simulador. Es necesario haber
descomprimido en el mismo directorio el fichero ensam.exe para que el ensamblador funcione
correctamente. No se debe ejecutar directamente el simulador desde el programa compresor.
La siguiente figura muestra la pantalla completa del entorno integrado de CODE-2
(entorno_CODE2.EXE), cuando est seleccionada la pestaa Simulador. Como se puede ver, el mdulo
superior derecho coincide con el panel frontal de CODE-2. El simulador permite la visualizacin de
cualquier registro, puerto de E/S y contenido de memoria de forma mucho ms sencilla que a travs
del panel frontal. Adicionalmente, esta aplicacin admite que los programas escritos para CODE-2
sean cargados directamente a partir de un fichero .EHC .HEX evitando que el usuario tenga que
teclear directamente cada instruccin.

Tambin se puede ejecutar dicho entorno integrado desde Linux a travs de Wine
(http://www.winehq.org/). Para ello tecleamos: wine entorno_CODE2.exe.

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 6 de 12

Ejemplo de uso del Entorno Integrado de CODE-2


Enunciado de un ejercicio de ejemplo:
Escriba un programa para CODE-2 que se cargue a partir de la direccin H000A de
memoria cuyo cometido sea sumar el contenido de las posiciones H0000 y H0001 de
memoria y almacenar el resultado en la posicin de memoria H0002, es decir,
M[H0002] M[H0000]+M[H0001].
Asimismo, el resultado deber visualizarse por el puerto de salida OP2.
Ejemplo: Si M[H0000] = H0B59 y M[H0001] = H0004, tras la ejecucin del programa
M[H0002] debe contener el valor H0B5D (ya que H0B59 + H0004 = H0B5D)
Primer paso: Escritura del programa en lenguaje ensamblador
El entorno integrado de CODE-2 incluye un Editor de textos donde podemos escribir, ensamblar y
depurar los errores tipogrficos de nuestro programa. Para ello, seleccionamos la pestaa Editor y
escribimos nuestro programa en lenguaje ensamblador de CODE-2. Aparte de las instrucciones
propias del lenguaje ensamblador de CODE-2, el programa ensamblador ensam.exe (que es el
ejecutable al que llama el entorno integrado cuando pulsamos el botn Ensamblar del men del
Editor) incorpora dos directivas especiales:

ORG Direccin: le indica al ensamblador a partir de qu direccin de memoria se van a escribir


las instrucciones que se especifican a continuacin de dicha directiva, y
END: especifica el final del programa.

Adems, el programa ensam.exe admite que se aadan comentarios en el propio programa utilizando
el carcter ;. Nada de lo que se escriba en una lnea tras el ; ser tenido en cuenta por el
programa ensamblador.
Para nuestro ejemplo, el programa que debemos escribir debera quedar aproximadamente como se
muestra en la siguiente figura, suponiendo que hemos guardado nuestro programa con el nombre
U:\prueba1.asm.

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 7 de 12

Segundo paso: Ensamblado del programa


El cometido del programa ensamblador (ensam.exe) es traducir un programa escrito en lenguaje
ensamblador de CODE-2 a lenguaje mquina de CODE-2. El entorno integrado de CODE-2 busca el
fichero ensam.exe en el mismo directorio donde se encuentra el propio entorno integrado. Si se da
esta condicin, para ensamblar nuestro programa de ejemplo bastar seleccionar el botn Ensamblar
de la Barra de botones del propio entorno integrado.
Si no hay errores, nos aparecer un mensaje indicndonos que el fichero en cdigo mquina de
CODE-2 (en nuestro caso de ejemplo u:\prueba1.ehc) ha sido generado. En el caso de haber errores,
aparecer una sub-ventana debajo de nuestro programa enumerando los distintos errores
encontrados. Haciendo doble clic en cada mensaje de error, el programa nos posiciona en la lnea del
programa ensamblador que ha generado dicho error.
Los errores ms frecuentes que nos podemos encontrar son:
Tipogrficos:
ADS r2,r0,r1 en lugar de ADDS r2,r0,r1
CALL en lugar de CALLR
etc.
Sintcticos:
OUT r4,H01 en lugar de OUT H01,r4
LD [rD+H01],r2 en lugar de LD r2,[rD+H01]
etc.
y, sobre todo, no se debe olvidar que conviene siempre especificar AL MENOS una sentencia ORG
para indicar al ensamblador a partir de qu direccin de memoria vamos a cargar el programa 1 y
recordar que TODOS los programas deben acabar con la directiva END.
Como ya se ha indicado, si el proceso de ensamblado se realiza con xito, se habr generado un
fichero con el mismo nombre pero con extensin .ehc (y su equivalente con extensin .hex) que
contiene el conjunto de instrucciones en lenguaje mquina. En nuestro caso, el fichero sera
u:\prueba1.ehc.
Tercer paso: Simulacin del programa
Para poder simular el programa que hemos escrito, seleccionamos la pestaa Simulador del entorno
integrado de CODE-2 (que es la que aparece por defecto al ejecutar el programa por primera vez).
Una vez hecho esto, para simular nuestro programa debemos:
1. Encender CODE-2: Botn On/Off del panel frontal.
2. Cargar el programa: Men Archivo Cargar programa objeto, y seleccionamos como fichero
de entrada u:\prueba1.ehc.
1

Por defecto, si no se especifica ninguna sentencia ORG se comienza a partir de la direccin H0000 de memoria.
Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 8 de 12

3. Introducimos la direccin de inicio por el teclado de CODE-2 (a travs del panel frontal) y
pulsamos Ejecutar. Con esto, ya habremos ejecutado la primera instruccin del programa. El
aspecto en este punto de la simulacin es el que se indica en la figura de la pgina 5Error!
Marcador no definido..
4. Si nos encontramos en Modo Paso a Paso (que por defecto est activado), se ejecutarn las
siguientes instrucciones del programa cada vez que pulsemos el botn Continuar.
Nota 1: Uso de etiquetas en el lenguaje ensamblador de CODE-2
Para facilitar el uso de saltos (condicionales o no) en un programa de CODE-2, el programa
ensamblador permite el uso de etiquetas. Para definir una etiqueta basta escribir al principio de una
lnea el nombre que le queramos poner a dicha etiqueta y acabar dicho nombre con el carcter :.
Cuando queramos realizar un salto a la instruccin inmediatamente posterior a la localizacin de
dicha etiqueta, tendremos que cargar en RD la direccin de dicho salto. Con el uso de etiquetas,
bastar escribir las instrucciones:
LLI RD, lo(nombre_etiqueta)
LHI RD, hi(nombre_etiqueta)
y el programa ensamblador reemplazar durante el proceso de ensamblado lo(nombre_etiqueta)
por los 8 bits menos significativos de la direccin de salto y hi(nombre_etiqueta) por los 8 bits ms
significativos. Gracias a las directivas lo y hi, la persona que escribe el programa no tiene que
estar recalculando las direcciones de salto cada vez que se inserte una nueva instruccin en el cdigo.
A modo de ejemplo, los dos programas siguientes producen exactamente el mismo cdigo CODE-2
cuando se ensamblan:
; Sin usar etiquetas
ORG H'0100
LLI r1,H'01
LLI r3,H'F7
LHI R3,H'24
OUT OP1,r3
ADDS r3,r3,r1
LLI rD,H'03
LHI rD,H01
BR
END

;Usando etiquetas
ORG H'0100
LLI r1,H'01
LLI r3,HF7
LHI r3,H'24
salto:
OUT OP1,r3
ADDS r3,r3,r1
LLI RD,lo(salto)
LHI RD,hi(salto)
BR
END

Nota 2: Directiva DATA para la introduccin de datos en un programa


Normalmente, un programa en CODE-2 acta sobre ciertos datos guardados en la memoria principal
del computador. Con la directiva DATA del lenguaje ensamblador podemos inicializar dichas
posiciones de la memoria principal con los valores que queramos. De este modo, cuando carguemos
un fichero en el simulador de CODE-2, adems de cargar nuestro programa en una determinada zona
de la memoria de CODE-2, tambin podemos inicializar la zona donde estn los datos sobre los que

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 9 de 12

vamos a actuar. A modo de ejemplo, el siguiente programa de CODE-2 es idntico al que usamos en
el ejemplo de esta prctica (el de la suma del contenido de las dos primeras posiciones de la
memoria), salvo que adems inicializamos las posiciones de memoria M(H0000) y M(H0001) con los
valores H0B59 y H0004, respectivamente. De esta forma, al ejecutar el programa ya sabemos que si
ha funcionado bien, la posicin de memoria H0002 debera valer H0B5D (H0B59 + H0004 =
H0B5D), y no tenemos que aadir nosotros manualmente los datos cada vez que carguemos el
programa.

5. Requisitos para realizar los ejercicios


Para realizar los programas de los ejercicios propuestos al final de este guin, se debern seguir los
siguientes pasos:
1. Describir el algoritmo a implementar por medio de un organigrama o pseudocdigo.
2. Efectuar una asignacin de registros y posiciones de memoria para los parmetros y variables
utilizadas en el programa.
3. Redactar el programa en nemnicos (lenguaje ensamblador) de CODE-2.
4. Codificar las instrucciones en cdigo mquina (hexadecimal) tanto de forma manual como a
travs del programa ensamblador.
5. Simular el programa utilizando el programa emulador.
6. Documentar adecuadamente el programa, indicando los pormenores para uso del programa:
direccin a partir de la que se debe cargar el programa, datos que solicita el programa
durante su ejecucin, significado de los resultados de salida, etc.

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 10 de 12

6. Ejercicios (a elegir dos)


AYUDA: el fichero seminarioCODE2.zip contiene el siguiente ejercicio de ejemplo completamente
resuelto. Se puede usar como plantilla para el resto de los ejercicios, que son muy similares en cuanto
al planteamiento general del problema.
EJEMPLO. Tenemos en memoria un conjunto con H0F datos (una tabla). El primer dato (inicio de la
tabla) se encuentra en la posicin H00C0. Hacer un programa que vaya leyendo los datos de la tabla
y cuente cuntos nmeros positivos, negativos y ceros hay en el conjunto. Cuando llegue al final, debe
mostrar por OP1, primero cuntos nmeros negativos haba, a continuacin cuntos ceros, y por
ltimo cuntos positivos haba. Cargar el programa a partir de la posicin H0010.
NOTA: Los ficheros .ASM contendrn, adems de la implementacin de los programas, las directivas
DATA para cargar datos de prueba que cubran todos los casos posibles.
1. Tenemos en memoria una tabla desordenada que comienza en la direccin H0101 y cuyo tamao
viene especificado en la direccin de memoria H0100. Queremos trasladar aquellos elementos de la
tabla que sean pares a una tabla que comience en la direccin de memoria H0150 y finalmente dar
por OP1 el nmero de elementos transferidos. Cargar el programa a partir de la posicin H0050.
2. Disponemos a partir de la posicin H00B1 de una tabla de calificaciones de D15 alumnos, cuyas
valoraciones van de 0 (H0000) a 100 (H0064). Realizar un programa en CODE-2 que copie
consecutivamente las calificaciones de los alumnos aprobados a partir de la posicin H00C0.
Suponga que la nota de corte para aprobar se proporciona en la posicin H00B0. El programa se
debe cargar a partir de la posicin H0000.
3. Tenemos un conjunto de datos con H'12 elementos (una tabla). El primer elemento est en la
posicin H'00A0. Hacer un programa que vaya leyendo los datos de la tabla y cuente cuntos
nmeros estn entre el valor 2 y el 8 (mayores que 2 y menores que 8). Tras procesar el ltimo
elemento de la tabla, mostrar por OP1 el recuento final. Cargar el programa a partir de la posicin
H'0000.
4. Tenemos un conjunto de datos con H'07 elementos (una tabla). El primer elemento est en la
posicin H'0000. Hacer un programa que vaya leyendo los datos de la tabla y los procese de la
siguiente forma: si el nmero ledo es menor que 100, que lo sustituya por un 1; si es mayor que 100
y menor que 200, que lo sustituya por un 2; en otro caso, que lo sustituya por un 0. Comprobar que
las posiciones de memoria se modifican de acuerdo al algoritmo propuesto. Cargar el programa a
partir de la posicin H'0A00.
5. Tenemos en memoria una tabla desordenada que contiene H0A datos. El primer dato (inicio de la
tabla) se encuentra en la posicin H00F0. Buscamos un nmero (que almacenaremos en r2). Si
durante la bsqueda se encuentra dicho nmero, se da su posicin dentro de la tabla por OP1. Si no
est, se inserta al final de la tabla, y se da su posicin dentro de la tabla por OP1. Cargar el programa
a partir de la posicin H0000.
6. A partir de la posicin de memoria H0000 tenemos una tabla que contiene D10 valores enteros
de 16 bits sin signo. Escriba un programa para CODE-2 que copie los valores que sean menores

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

Fundamentos de Informtica

Pgina 11 de 12

estrictos de H9000 a partir de la direccin H0010 de memoria y aquellos que sean mayores o iguales
a partir de la direccin H0020 de memoria. El programa debe comenzar en la direccin H0100.

Qu hay que entregar?


Para cada ejercicio elegido:

Organigrama: realizado con cualquier programa que el estudiante considere apropiado.


Tabla de asignacin de variables del organigrama a registros de CODE-2.
Fichero .ASM: conteniendo la implementacin del programa y la insercin de datos de
prueba.

Prctica 3: Funcionamiento a Bajo Nivel de un Ordenador: CODE-2

You might also like