Escolar Documentos
Profissional Documentos
Cultura Documentos
data_bus
mmp16
memoria
addr_bus
r
w
ready
int
reset
3. Ciclos de memoria
El mmp16 utiliza dos fases de reloj, fi1 y fi2. Fi1 marca los estados de la mquina, pues gobierna la
unidad de control, mientras que fi2 controla los registros de la unidad de proceso de datos, es decir, todos
los registros internos y los registros generales, etc. Las seales externas y la carga de los buses se
sincroniza con los flancos de fi2.
Ciclo de lectura
Se carga el bus de direcciones con la direccin del dato que se desea leer y se activa la seal de
lectura, todo ello sincronizado con fi2. La direccin deber permanecer estable el tiempo que est activa
1/22
la seal r. La memoria utiliza la seal ready para pedir ciclos de espera (Te) a la CPU hasta tener los
datos listos para entregar. Cuando la memoria active la seal ready, que reconocer el mmp16 en el
siguiente estado definido por fi1, recoger los datos y desactivar la seal de lectura. La recogida de datos
se realiza en los flancos de fi2. Durante los ciclos de espera, la CPU estar recogiendo datos invlidos.
Este proceso se muestra en la figura 2.
T1
Te
Te
T2
T3
fi1
fi2
r
addr_bus
direccin
ready
data_bus
dato
lectura
T1
Te
Te
T2
T3
fi1
fi2
w
addr_bus
direccin
ready
data_bus
dato
4. Organizacin interna
La figura 4 muestra el diagrama de bloques del mmp16. Los bloques en que se divide la CPU estn
detallados en figuras sucesivas. Como puede observarse, toda la organizacin gira en torno a un Bus
Interno de Datos (IDB) que interconecta los diferentes bloques funcionales.
La caracterstica fundamental del mmp16 es que todos los registros y buses son de 16 bits. Esto se
ha hecho as buscando la mayor simplicidad posible. Puede considerarse que el hecho de no poder
2/22
manipular octetos (habitualmente utilizados para representar caracteres) es una limitacin importante,
pero cabe indicar que hoy en da se est trabajando con juegos de caracteres que usan 16 bits por carcter.
El mmp16 es microprogramable. Su memoria de control es de 256 palabras de 32 bits cada una.
Para direccionar la memoria de control se necesitan microdirecciones de 8 bits. Cada palabra contendr
una microinstruccin. Se ha elegido una unidad de control microprogramada frente a una cableada por su
mayor simplicidad. El objetivo de la prctica es consolidar los conocimientos del estudiante en materia de
organizacin interna de la CPU y secuenciamiento de las instrucciones.
micrordenes
seales
externas
reset
Unidad de Control
ready
Control de
microprograma
Seleccin
de
condicin
int
5
IR
IDB
16
Seleccin de operandos
Interfaz
con el Bus de
Datos
Interfaz
con el Bus de
Direcciones
Bus de
Direcciones
ALU
SP
flags
16
16
Bus de
Datos
Bloque de
Registros
PC
3/22
IDB
16
op1R
op2R
op3R
R0
R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R13
SP
PC
pc_sp
MUX
1
2
SEL
3
3
1
CLK
selR
Fi2
MUX
0
opR
3
16
+1
RaIDB
-1
16
imm<7>
8
16
imm<7:0>
8
16
16
sel_op2
MUX
ld_op1
ld_op2
op1
op2
fi2
fi2
op2_0
inv_op2
16
16
op1
op2
ALU
La ALU del mmp16 puede realizar las operaciones aritmticas de suma y resta en complemento a 2
y las operaciones lgicas AND, OR, XOR y NOT. Para ello dispone de un sumador y 3 conjuntos de
puertas lgicas. La operacin NOT tiene un nico operando (op1) y se calcula haciendo la operacin
XOR con todo unos como segundo operando. Su diagrama completo se muestra en la figura 7.
op1
op2
inv_Cin
op2
Cn-2 op1
V
Cn-1
sel_Cin
Cin
C
C
sel_Carry
op_ALU
MUX
N
Z
ALUaIDB
16
IDB
Figura 7. ALU
op_ALU selecciona la operacin que realiza la ALU: operacin con el sumador (tanto para sumas
como para restas), operacin AND, operacin OR y operacin XOR (tanto para XOR como para NOT).
En caso de que se realice una operacin con el sumador
(suma o resta) hay que determinar cual va a ser el acarreo inicial.
Esto se hace mediante las seales sel_Cin e inv_Cin tal como se
muestra en la tabla adjunta.
El acarreo inicial deber ser 0 para hacer la operacin de
suma. La resta se har sumando op1 y el complemento a 2 de
op2, esto es, op2 negado y acarreo inicial 1.
Sel_Cin
0
0
1
1
inv_Cin
0
1
0
1
Cin
0
1
C
not C
Si se desea hacer una suma con nmeros de 32 bits, habr que sumar primero los 16 bits menos
significativos (con acarreo inicial 0) y luego los siguientes 16 utilizando como acarreo inicial el generado
en la suma anterior (esto es lo que se conoce como suma con acarreo). Para la resta de nmeros de 32 bits
se puede utilizar un truco similar. En este caso, se restan las partes menos significativas generando como
flag de acarreo el borrow y luego se restan las partes ms significativas utilizando como acarreo inicial el
flag de acarreo negado.
sel_carry selecciona cual va a ser el nuevo flag de acarreo entre el acarreo ltimo del sumador (bit
de acarreo para las sumas) o su negado (la llevada en las restas borrow-).
La seal ALUaIDB obtenida decodificando la microorden aIDB (figura 11)permite que el resultado
de la ALU pase a IDB a travs del triestado correspondiente.
Los flags
Los flags indican 4 condiciones que pueden producirse como resultado de una operacin en la ALU
y un bit que indica si estn prohibidas o permitidas las interrupciones:
Z:
N:
V:
C:
I:
1 si el resultado es cero y 0 en caso contrario, Z = todos los bits del resultado son 0
1 si el resultado es negativo (bit ms significativo a 1) y 0 en caso contrario, N = bit de signo
1 si se detecta desbordamiento en complemento a 2, V = Cn-1 XOR Cn-2
Cn-1 en caso de suma (carry) y Not Cn-1 en caso de resta (borrow)
1 si estn permitidas las interrupciones y 0 en caso contrario
5/22
En la figura 8 se muestra el registro que almacena los flags. sel_f permite seleccionar si los flags se
cargan desde el bus de datos (pueden haber sido salvados en la pila, y se necesita poder cargarlos desde
IDB para ser restaurados), si se actualizan con los nuevos flags generados en la ALU, si se prohiben o si
se permiten las interrupciones. mod_f permite actualizar el registro de flags. Durante la fase de reset se
activar el flag I para permitir las interrupciones.
La seal flagsaIDB activa el triestado que deja pasar los flags a IDB, por ejemplo para guardarlos en
la pila. Esta seal se obtiene decodificando aIDB (figura 11). El registro de flags es de 5 bits mientras que
IDB y todo lo dems en el mmp16 es de 16 bits. Los 5 bits del registro de flags se corresponden con los 5
bits menos significativos de IDB.
0, Z, V, N, C
I, Z, V, N, C
16
1, Z, V, N, C
data_bus
w
3
sel_f
0
ld_data
MUX
dataaIDB
data
fi2
IDB
mod_f
16
flags
ld_addr
fi2
addr
fi2
I, Z, V,N, C
5
flagsaIDB
w
IDB
16
addr_bus
16
Figura 8. FLAGS.
IDB
aIDB
ld_IR
IR
fi2
DEC
16
3
2
1
0
RaIDB
flagsaIDB
dataaIDB
ALUaIDB
Registro de Instruccin
El registro de Instruccin (IR) puede cargarse desde IDB activando la seal ld_IR. El formato de las
instrucciones en el mmp16 est pensado para que sea muy sencilla su decodificacin. Algunos campos
(grupos de bits) de IR se utilizan en diferentes partes del sistema con diferentes nombres como se muestra
a continuacin:
cop1<3:0> = IR<15:12>
IR
op2R<3:0> = cop3<3:0> = IR<7:4>
cop1
op1R
op2R
op3R
op1R<3:0> = cop2<3:0> = IR<11:8>
cop2
cop3
cond
imm<7:0> = IR<11:4>
imm
cop4
op3R<3:0> = cop4<3:0> = IR<3:0>
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
cond<3:0> = IR<3:0>
Tabla 3. Formato del registro de Instruccin
6/22
V
I
int
ready
sel_cond
inv_cond
fi1
estado
1
MUX
0
0
3
2
1
0
cond
MUX
cond<3:1>
cond<0>
sel_cond
0
0
1
1
2
2
3
3
inv_cond
0
1
0
1
0
1
0
1
cond
Condicin especificada por la instruccin que se est ejecutando
Condicin especificada por la instruccin, negada
ready
Not ready
Interrupcin pendiente
No hay interrupcin pendiente
1 (salto incondicional)
0 (no saltar)
7/22
fi1
Clculo de la
direccin de salto
en funcin de IR
(figura 14)
mPC
save_mpc
save
fi1
+1
d_alt
8
sel_sig
2
2
8
3
MUX
cond
01111100
8
reset
1
MUX
8
Memoria de
microprograma
(mROM)
32
fi1
cop3
cop4
1
0
1
cop3
MUX
cop2
0
0
1
cop2
MUX
cop1
1
1
cop1
MUX
5
f(IR)
8/22
elegido 45. El repertorio de instrucciones del mmp16 est especificado en el apndice 1. En la figura 14
se muestra el circuito que permite calcular la direccin de la memoria de control donde est ubicado el
microprograma correspondiente a la instruccin que est cargada en el registro de instruccin (IR) de
acuerdo con la siguiente tabla:
cop1
cop2
cop3
cop4
direccin
---------1XXXX000
XXXX F
F
------0XXXX000
XXXX F
F
F
---0XXXX100
XXXX F
F
F
F
XXXX
1XXXX100
Tabla 5. Cdigos de operacin y ubicacin del microprograma correspondiente
No todas las instrucciones del mmp16 necesitan el mismo nmero de ciclos de reloj para
completarse ni el mismo nmero de microinstrucciones para su microprograma correspondiente. Los
cdigos de operacin de las diferentes instrucciones y el clculo de la direccin de comienzo de cada
microprograma dentro de la memoria de control se ha hecho reservando para cada instruccin un nmero
suficiente de posiciones de memoria. El espacio reservado a cada instruccin se muestra en el apndice 3.
Las posiciones de la memoria de control comprendidas entre la 7C y la 8F se aprovecharn para
microprogramar en estas direcciones las rutinas de RESET y FETCH, que se darn como ejemplo ms
adelante. La seal de reset ataca un multiplexor que permite seleccionar entre la direccin seleccionada
por el microprograma y la direccin 01111100 (directamente cableada) donde est la rutina que inicializa
el mmp16.
Dada la frecuencia con que habr de hacerse un FETCH de una instruccin y que esto es siempre
igual, puede interesar guardar en el registro save la direccin donde comienza este microprograma para
saltar a l una vez terminada la ejecucin del microprograma correspondiente a una instruccin. De hecho
en la rutina de FETCH que se da como ejemplo, se guarda la direccin de comienzo en el registro save.
sel_sig
inv_cond
sel_cond
sel_f
bus_ext
r_w
save_mpc
mod_f
ld_IR
ld_addr
ld_data
ld_op1
ld_op2
pc_sp
sel_op2
inv_op2
aIDB
op2_0
opR
no usado
selR
inv_Cin
sel_Cin
sel_Carry
op_ALU
d_alt
bus_ext
J
r_w
fi2
estado<7>
bus_ext
fi2
estado<7>
9/22
memoria de control que nos la da. Termina depositando la prxima microinstruccin a la entrada del
registro de microinstruccin. El segmento II parte del registro de microinstruccin que distribuye las
microordenes para controlar los registros, ALU, buses, etc. En particular, genera los flags que pueden
controlar la actividad del otro segmento durante el prximo ciclo.
flags
fi1
seales externas
registro de estado
Segmento I
seleccin de
condicin
control de
microprograma
memoria de
microprograma
ALU
flags antiguos
seleccin de
operandos
IDB
registros
buses externos
seleccin de
registros
operacin
nuevos
buses externos
nuevos
registros
operacin
fi2
nuevos flags
fi1
nuevos
operandos
Segmento II
fi1
estado
6. Microprogramacin
El mmp16 arranca con un RESET, que le lleva a ejecutar la microinstruccin 01111100. Aqu debe
hacerse la inicializacin de la mquina que consistir en poner a FFFE el contador de programa (PC) y
prohibir las interrupciones. En la direccin FFFE deber haber una instruccin de salto incondicional
absoluto al comienzo del programa de inicializacin del sistema. Todo ello estar en memoria ROM. La
direccin 0 de la memoria principal est reservada para el vector de interrupcin. El mmp16 dispone de
una nica lnea externa de peticin de interrupcin. Ser labor del usuario (o el sistema operativo) cargar
en la posicin 0 de memoria la direccin de comienzo de la rutina de tratamiento de dicha interrupcin.
A continuacin se pasa a la fase de bsqueda de la instruccin en memoria (FETCH). Para ello se
comprueba si hay una interrupcin pendiente de ser tratada. De ser as, habr que guardar en la pila el
registro de flags y el PC actual, cargar en el PC el valor almacenado en la direccin 0 de memoria y
prohibir las interrupciones. Esta prohibicin es necesaria para evitar que se aniden las interrupciones.
10/22
stas volvern a permitirse cuando termine la rutina mediante la instruccin RETI o cuando la rutina
ejecute la instruccin SETI. A continuacin, hubiera o n interrupcin pendiente, se hace un ciclo de
lectura en memoria para traer la instruccin a la que apunta el PC (caso de instruccin de 16 bits) o la
primera palabra de la instruccin (caso de instruccin de 2 palabras). Se utilizar la parte que indique el
cdigo de operacin (cop1, cop2, cop3 y cop4) para saltar al microprograma que implementa dicha
instruccin. Cuando se termina la ejecucin de una instruccin, se vuelve a la rutina de FETCH
Es labor del microprogramador prever las microinstrucciones necesarias para las fases de RESET y
FETCH y para cada una de las instrucciones del mmp16. La microprogramacin del mmp16 es laboriosa
pero bastante sencilla. A continuacin se muestran algunos microprogramas a modo de ejemplo en los
que se muestran las microinstrucciones en un lenguaje simblico de aconsejado seguimiento por parte del
alumno a la hora de codificar sus microprogramas junto con su codificacin en unos y ceros.
Ejemplo 1: RESET
La operacin de RESET se realiza mediante dos microinstrucciones que deben almacenarse a partir
de la direccin 01111100 de la memoria de microprograma. La primera carga FFFF en el registro op1 de
la ALU y pasa a la siguiente microinstruccin. La segunda genera FFFE en la ALU a partir del FFFF de
op1 y lo carga en PC, prohibe las interrupciones y pasa a ejecutar la siguiente microinstruccin.
Para cargar FFFF en op1 se hace lo siguiente: en la ALU, se hace un OR con op2=FFFF. Esto se
consigue con op2_0=0, inv_op2=1 y op_ALU=2. El resultado obtenido en la ALU (FFFF) se carga de
nuevo en op1 (ld_op1=1) llevndolo a travs de IDB (aIDB=00).
Para generar FFFE en la ALU, se resta 1 a op1 (FFFF). Esto puede hacerse sumando FFFF (op1)
con FFFF (generado como op2 mediante op2_0=0 e inv_op2=1) despreciando el desbordamiento. A
continuacin se lleva el resultado al PC (aIDB=00, opR=11, selR=pc_sp y pc_sp=1).
Para prohibir las interrupciones hay que poner un 0 en el bit I del registro de flags. Esto se consigue
seleccionando sel_f=2. De esta forma, el resto de los flags se quedan como estaban e I toma valor 0.
En cuanto a la eleccin de la siguiente microinstruccin a ejecutar, esta debe ser la situada en
mPC+1. Por tanto cond AND sel_sig debe ser 0. Esto se puede hacer de varias formas. Una de ellas es
conseguir que cond sea 0 (de esta forma nos da igual que valor tome sel_sig). Por tanto sel_cond=11 e
inv_cond=1 (1 XOR 1 = 0) con lo que cond=0. Estos son los valores por defecto que deben tomar las
seales sel_cond e inv_cond como puede verse en la figura 15.
El resto de los campos de la microinstruccin se rellenan siguiendo el siguiente criterio: las seales
que habilitan la carga de algn registro deben desactivarse y las dems son indiferentes. Las que tienen
valor indiferente estn marcadas con una x. La seal bus_ext se pone a 0 para indicar que no se va a
trabajar con la memoria. Los valores de relleno de cada campo se pueden ver en la figura 15. As el
microprograma completo quedara como sigue:
;RESET
;op2_0=0, inv_op2=1, op_ALU=OR, ALUop1;
01111100: 10xxxx01xxx0000x010000xx111xx0x0
;op2_0=0, inv_op2=1, sel_Cin=0, inv_Cin=0, op_ALU=ADD, ALURegistros,
selR=pc_sp, pc_sp=PC, sel_f=2, mod_f=1;
01111101: 00x00x011111100x00000110111xx0x0
Ejemplo 2: FETCH
La fase de FETCH es notablemente ms compleja que la fase de RESET. Aqu hay que comprobar si
se ha producido una interrupcin o no. Si ha sido as, habr que salvar en la pila los flags y el contador de
programa (PC), acceder al vector de interrupcin (direccin 0 de memoria principal) para obtener la
direccin de la rutina de tratamiento de la interrupcin y cargarla en el PC y por ltimo prohibir las
interrupciones. Entonces se pasa a traer propiamente la siguiente instruccin (fase de fetch clsica). Si no
ha habido interrupcin, nicamente hay que hacer la fase de fetch clsica. La figura 18 muestra el
ordinograma correspondiente a la fase de fetch siguiendo el diseo que se muestra a continuacin:
Si hay interrupcin pendiente
Almacenar los indicadores en la pila
Almacenar el contador de programa en la pila
Leer el vector de interrupcin y cargarlo en el contador de programa
Prohibir las interrupciones
Traer a IR la instruccin apuntada por PC e incrementar PC
Saltar al microprograma correspondiente a la nueva instruccin a ejecutar
11/22
NO
SI
int?
PCaddr, incPC, r
DecSP, flagsdata
data_busIR
NO
SPaddr, decSP, w
ready?
SI
NO
ready?
SI
0I
f(IR)?
PCdata
SI
microprograma
correspondiente
NO
SPaddr, w
ready?
data_busPC
0addr, r
SI
ready?
12/22
NO
Cada rectngulo del ordinograma representa un estado en la unidad de control. Los rombos indican
condiciones sobre las cuales se puede pasar a dos estados diferentes dependiendo de que la condicin se
cumpla o no. En una unidad de control microprogramado, como sta, todas las salidas estn asociadas a
estados y no hay salidas condicionales. Cada microinstruccin corresponde a un estado del autmata.
Como puede observarse en el ordinograma de la figura 18, hay dos ciclos de lectura en memoria y
otros dos de escritura en este microprograma.
Un ciclo de escritura consta de 3 microinstrucciones:
Enviar el dato a escribir al registro interfaz con el bus de datos
Enviar la direccin al registro interfaz con el bus de direcciones y activar w
Esperar a que la operacin se complete (se active ready)
Un ciclo de lectura consta de 2 microinstrucciones:
Enviar la direccin al registro interfaz con el bus de direcciones y activar r
Cargar lo que venga por el bus de datos en el registro destino, insistiendo hasta que se active
ready
El apndice 5 muestra varios ejemplos de microprogramas correspondientes a algunas instrucciones
del mmp16.
7. La prctica
La prctica consiste en elegir al menos una instruccin (diferente de las que se muestran como
ejemplo en el apndice 5) de cada uno de los siguientes grupos:
1) aritmticas y lgicas
2) carga
3) almacenamiento
4) ruptura de secuencia
5) manejo de la pila
Elegidas las intrucciones, se debern realizar los microprogramas correspondientes, que debern ser
traducidos a micropalabras de acuerdo con el formato de microinstruccin descrito en la figura 15. En
esta figura se indican tambin los valores por defecto para cada uno de sus campos. A continuacin
realizar un pequeo programa de prueba (utilizando las instrucciones elegidas) que deber probarse en el
simulador del mmp16 que est disponible en el laboratorio.
Mediante este simulador se deber probar que los microprogramas implementan correctamente las
instrucciones elegidas. Los mandatos del simulador pueden consultarse en el apndice 6. Lo ms
interesante ser ver los valores que van tomando los registros a cada golpe de reloj, tanto fi1 como fi2.
Se recomienda escribir en un fichero los mandatos del simulador necesarios para cargar los
microprogramas en la memoria de control. En ese mismo fichero o en otro diferente, escribir los
mandatos necesarios para cargar en la memoria principal el programa de prueba. De esta forma, no habr
que volver a escribirlos todos en cada prueba.
Deber entregarse una memoria de la prctica en la que se incluirn:
1. Las instrucciones del mmp16 elegidas, justificando su eleccin y aadiendo una breve
descripcin de lo que hacen.
2. Los microprogramas para interpretar esas instrucciones tanto en lenguaje simblico como su
codificacin en unos y ceros.
3. Comentarios, crticas, mejoras a introducir, etc. sobre la prctica.
13/22
14/22
15/22
16/22
Descripcin
Selecciona la direccin de salto en el microprograma (Fig.13)
op_ALU
xx
sel_Carry
sel_Cin
inv_Cin
op2_0
inv_op2
pc_sp
selR
xx
opR
00
aIDB
xx
sel_op2
ld_op2
ld_op1
ld_data
ld_addr
ld_IR
mod_f
sel_f
xx
17/22
Campo
sel_cond
Descripcin
Selecciona la condicin de salto en el microprograma (Fig.12) 00: la
condicin especificada por el campo cond de IR, 01: la seal ready
previamente sincronizada en el registro de estado (estado<7>), 10: hay
una interrupcin pendiente de ser tratada, 11: un uno (verdadero)
inv_cond
sel_sig
xx
save_mpc
r_w
bus_ext
001
010
011
100
101
110
LDR
STR
STI
CALLI
NOT
LDD
STD
JMP
CALL
PUSH
RET
JMPI
MOV
CMP
LDI
RETI
LDD
STD
JMP
CALL
PUSH
RET
LIM
POP
libre
RETI
RESET/FETCH
RESET/FETCH
STX
AND
OR
XOR
ADD
SUB
ADC
SBB
ADI
libre
SETI
CLRI
LDX
JMPR
POP FLAGS
CALLR
SBI
PUSH FLAGS
PUSH FLAGS
libre
18/22
111
Smbolo
LE
GT
LT
GE
LOS
HI
HIS/C
LO/NC
MI/N
PL/NN
EQ/Z
NE/NZ
V
NV
ALW
Significado
Menor o igual que (con signo) Lesser or Equal
Mayor que (con signo) GreaTer
Menor que (con signo) - Less Than
Mayor que (con signo) - Greater or Equal
Menor o igual (sin signo) - LOwer or Same
Mayor que (sin signo) Higher
Mayor o igual que (sin signo) - HIgher or Same / C
Menor que (sin signo) - Lower / No C
Negativo Minus / N
Positivo Plus / No N
Igual Equal / Z
Distinto - Not Equal / No Z
Desbordamiento oVerflow
No desbordamiento - Not oVerflow
Siempre (salto incondicional) ALWays
Clculo
(NV)+Z
! ((NV)+Z)
NV
!(NV)
!C+Z
!(!C+Z)
C
!C
N
!N
Z
!Z
V
!V
1
Ejemplo 2: STX
;selR=op1R, Registrosop1;
10010000:
xxxxxxxxx000011x010000xx111xx0x0
;selR=op2R, Registrosop2;
10010001:
xxxxxxxxx0100110100000xx111xx0x0
;op2_0=1, inv_op2=0, sel_Cin=0, inv_Cin=0, op_ALU=, ALUaddr;
10010010:
00x00x10xxx0000x000100xx111xx0x0
;selR=op3R, Registrosdata, w;
10010011:
xxxxxxxxx100011x001000xx111xx001
;jmp $ if not ready;
10010100:
10010100xxx00xxx000000xx011100x0
;jmp save;
10010101:
xxxxxxxxxxx00xxx000000xx110010x0
Ejemplo 3: JMPR
;selR=pc_sp, pc_sp=PC, Registrosop1, sel_op2=inmediato, ld_op2, jmp save if not cond;
11100000:
xxxxxxxx11100111110000xx001010x0
;op2_0=1, inv_op2=0, sel_Cin=0, inv_Cin=0, op_ALU=, ALURegistros, selR=pc_sp, pc_sp=PC,
;jmp save;
11100001:
00x00x101111100x000000xx110010x0
Ejemplo 4: POP
;selR=pc_sp, pc_sp=SP, Registrosaddr, rincR, r;
01011100:
xxxxxxxx0110111x000100xx111xx011
;data_busRegistros, selR=op3R, jmp $ if not ready;
01011101:
01011101x101101x000000xx011100x0
;jmp save;
01011110:
xxxxxxxxxxx00xxx000000xx110010x0
19/22
Ejemplo 5: LDD
;selR=pc_sp, pc_sp=PC, incR, Registrosaddr, r;
00100100:
xxxxxxxx1110111x000100xx111xx011
;data_busop1, jmp $ if not ready;
00100101:
00100101xxx0001x010000xx011100x0
;op2_0=0, inv_op2=0, op_ALU=OR, ALUaddr, r;
00100110:
10xxxx00xxx0000x000100xx111xx011
;data_busRegistros, selR=op3R, jmp $ if not ready;
00100111:
00100111x101101x000000xx011100x0
;jmp save;
00101000:
xxxxxxxxxxx00xxx000000xx110010x0
Binario: 0[bB][01]+
Un cero seguido, bien por una b minscula o una B mayscula y despus uno o ms dgitos
binarios (unos o ceros).
Nmeros binarios correctos: 0b10011, 0B0, 0B1, 0b0101
Estos no son nmeros binarios correctos: 0b, 0B, 0b21, 78, 100, 0BA
Decimal: [0-9]+
Una secuencia de uno o ms dgitos decimales, es decir comprendidos entre 0 y 9.
Nmeros decimales vlidos: 56, 100, 0
Estos no son nmeros en base 10: 67A, B52, 0X89
Hexadecimal: 0[xX][0-9A-Fa-f]+
Un cero seguido de una x minscula o una X mayscula y uno o ms dgitos hexadecimales (los
dgitos decimales ms las letras A, B, C, D, E, F, a, b, c, d, e y f.
Nmeros hexadecimales vlidos: 0x89, 0XAF, 0x10, 0XA00, 0x9f
Estos no son nmeros hexadecimales: 78, 0bAF, 0X5H,
Mandatos para asignar valores a registros y memorias
registro = nmero
Este mandato carga el registro seleccionado con el valor indicado. registro debe ser el nombre de
algn registro del mmp16: mI, estado, save, mPC, addr, data, op1, op2, flags, IR y los registros de uso
general (desde R0 hasta R15, SP y PC que corresponden a R14 y R15 respectivamente). nmero ser un
valor numrico expresado en cualquiera de los formatos anteriormente definidos. Es responsabilidad del
usuario no intentar cargar valores que no quepan en los registros.
Como caso excepcional, la seal externa de peticin de interrupcin puede ser activada y desativada
por el usuario, de forma que se puede comprobar el funcionamiento de la gestin de las interrupciones por
parte de la CPU. Por tanto se pueden dar los valores 0 o 1 a la seal int.
Ejemplos: mPC = 0x00, op1 = 10, SP=0x0000, flags=0b00101, int=1
memoria[nmero]=nmero
Este mandato carga en la palabra de la memoria indicada entre corchetes el valor indicado a la
derecha del signo =. Los nmeros se pueden expresar en cualquiera de los formatos numricos vlidos.
Este mandato se puede usar con mem y mROM que son respectivamente la memoria principal del sistema
y la memoria de control de microprograma.
Ejemplos: mem[0x1000] = 56, mROM[0x00]=0b00000000000000000000000000000000
20/22
21/22
fin
Se abandona el simulador. Usado en modo interactivo, termina la simulacin. Dentro de un fichero,
termina la lectura de mandatos desde el fichero y se vuelve a leer mandatos del teclado.
Mandatos adicionales
salvar nombre de fichero
Permite salvar el estado de la mquina en el fichero indicado. Lo que hace es generar un fichero con
mandatos del simulador que permitir cargar en los registros y memorias los valores que tenan cuando se
salv. Sin embargo, no salva el estado de los buses, seales externas y flipflops jk. El nombre del fichero
debe ir entre comillas y puede ser un nombre relativo o absoluto.
Ejemplos: salvar simulacin.sim, salvar directorio/fichero.sim
cargar nombre de fichero
Permite ejecutar los mandatos que hay en un fichero. Este puede ser uno generado previamente con
el mandato salvar o un fichero generado por el usuario, por ejemplo con las rdenes necesarias para
cargar los microprogramas en la memoria de control de microprograma. Esto evita tener que teclear todos
los mandatos cada vez.
Ejemplos: cargar microprogramaADD.sim
?
Muestra una pequea ayuda sobre la sintaxis de los mandatos del simulador.
;
El punto y coma se puede utilizar para aadir comentarios en los ficheros de mandatos del
simulador. Todo lo que vaya desde el punto y coma hasta el final de lnea ser considerado como
comentario y ser ignorado por el intrprete de mandatos del simulador.
22/22