Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Objetivos
I.
II.
III.
IV.
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).
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
B-
cnd
F2
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
Fundamentos de Informtica
Pgina 4 de 12
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.
Fundamentos de Informtica
Pgina 5 de 12
Tambin se puede ejecutar dicho entorno integrado desde Linux a travs de Wine
(http://www.winehq.org/). Para ello tecleamos: wine entorno_CODE2.exe.
Fundamentos de Informtica
Pgina 6 de 12
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.
Fundamentos de Informtica
Pgina 7 de 12
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
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.
Fundamentos de Informtica
Pgina 10 de 12
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.