DiseñoSIT 1a7
DiseñoSIT 1a7
Índice (IX):
Registro de 10 bits usado para el direccionamiento de un operando ubicado en la
memoria. El registro Índice puede tener a la mano la dirección del operando para
que pueda ser fácilmente accedido por el microprocesador. El registro índice
también puede tener un desplazamiento que se suma a una dirección base dando
como resultado la dirección física de operando.
Ejemplo de una instrucción que usa el Índice para señalar la dirección:
MOV DIRECC,X ; La dirección física = DIRECC + IX.
Registros Internos
Registro de la instrucción (IR):
Cuando el microprocesador lee la instrucción la deposita en el registro de la
instrucción, Las salidas del registro de instrucción tienen mayor injerencia en la
unidad de control ya que dependiendo de la instrucción la secuencia de control
sigue un flujo de transferencias específico. Este registro es transparente ya que no
aparece en el juego de instrucciones del microprocesador.
Registros utilitarios
FORMATO DE INSTRUCCIONES
Patrón Para Instrucciones de SIT
Instrucciones de memoria.
0 2 3 4 5 6 15
OP 1 AM ADDR
Modo AM Descripción
Directo (00) ADDR es la dirección de OV.
Directo Indexado (01) ADDR + IX es la dirección de OV.
Indirecto Indexado (10) La dirección de OV es M(ADDR) + IX
Inmediato (11) ADDR es OV.
001 0 OP Rd R’/I Rf
^R/I Rf
0 => 0000 => AC
0001 => IX
0010 => SP
0100 => PC
1 Rf = Valor inmediato
Abrv. OP Descripción
ADC (010) Rd <= Rd+ Rf+ cff ; suma con acarreo.
SBC (001) Rd <= Rd – Rf – cff ; resta con préstamo.
ORA (110) Rd <= Rd or Rf ; OR inclusivo bit-wise.
AND (101) Rd <= Rd and Rf ; AND bit-wise.
XOR (111) Rd <= Rd xor Rf ; XOR bit-wise.
MOV (011) Rd <= Rf ; Transfiere de Rf a Rd.
CMP (000) cff, vff, nff, zff <= Rd – Rf ; Compara Rd con Rf..
Patrón Para Instrucciones de SIT
0 2 3 4 6 7 15
0 1 0 0 OP 000000000
Instrucciones de control.
Mnemónico. OP Descripción
CLI 000 Borra iff.
SEI 001 Establece iff.
CLC 010 Borra cff.
SEC 011 Establece cff.
WAIT 100 Activa modo de espera.
ROTRASL 110 Traslación y Rotación de AC.
NOP 101 No operación.
Patrón Para Instrucciones de SIT
Instrucciones de Rotación y Traslación (LSR, ASR, SHL, ROR, ROL, RRC, RLC)
0 2 3 4 6 7 8 9 10 11 12 15
0 = traslación
1 = rotación
0 = izquierda
0 = con acarreo 1 = derecha
1 = sin acarreo
Abrev.
ASR 4 ;Traslación aritmética 4 bits a la derecha
0 = Aritmética
1 = Lógica
Patrón Para Instrucciones de SIT
Instrucciones de pila (PUSH, POP, RET y RTI).
0 2 3 4 6 7 11 12 15
0000 => AC
0001 => IX
0010 => SP
0100 => PC
1000 => Flags
Abrev. OP Descripción
PSH 000 Deposita REG en la pila.
POP 001 Retira REG de la pila.
RTS 001 Retorna de la subrutina. (POP PC)
RTI 011 Retorna de la Interrupción.
Instrucciones de SIT
Tarea codificar las siguientes instrucciones en Presente una secuencia de instrucciones de SIT para
hex: realizar las siguientes acciones:
SECUENCIA DE CONTROL
RESUMEN DE REGISTROS
MODULE: SIT.
MEMORY: AC[16]; IX[10]; SP[10]; PC[10];
IR[16]; MA[10]; MD[16]; SHC[4];CFF;
ZFF; VFF; NFF;IFF.
INPUTS: READY; IRQ; RST; CLK.
OUTPUTS: ADRBUS[10]; NOINST; WR; RD.
BUSES: ABUS[16]; BBUS[16]; OBUS[16]; CIN.
EXBUSES: DBUS[16].
CLOGICOS: ADD[17]; INC[16]; DEC[16]; DEC2[4];
DCD[16].
Preguntas Claves:
1. Presente un diagrama del circuito lógico que describe ADD[17] use el sumador completo como bloque de construcción básico.
2. Presente un diagrama del circuito INC[16].
Inicialización del PC
Registros susceptibles de Inicialización:
PC : Obligatorio.
SP : Opcional.
Opciones para PC
Inicio
EJECUTA INSTRUCCIÓN
Inicio PC y Lectura de la Instrucción
AM Descripción
(00) ADDR es la dirección de OV.
(01) ADDR + IX es la dirección de OV.
(10) La dirección de OV es M(ADDR) + IX.
(11) ADDR es OV.
Secuencia de Control Para lectura de OV
9 NODELAY
ABUS = IR; OBUS = ABUS; MA <= OBUS[6:15]; "MA <= IR[6:15] inmdto"
=>(IR[4])/(12).
10 NODELAY
=>(^IR[5])/(16). "LectOV"
11 ABUS = 6$0,MA; BBUS = 6$0,IX; CIN = \0\;
OBUS = ADD[1:16](ABUS;BBUS;CIN); MA <= OBUS[6:15];
=>(16). "Directo e indexado: done"
12 NODELAY
=>(^IR[5])/(14).
13 ABUS = ^(6$0)&MA[0],MA; OBUS = ABUS; MD <= OBUS;
=>(20). "Inmediato: done"
14 ADRBUS = MA; RD = \1\; MD <= DBUS;
=>(^READY)/(14).
15 ABUS = MD; OBUS = ABUS; MA <= ABUS[6:15];
=>(11).
Modificar esta sección a fin de reemplazar el modo indirecto indexado
por indexado indirecto es decir que primero se realice el indexado y
luego el indirecto
Secuencia de Control Para lectura de OV
NODELAY: Para leer las inst en un sol paso
9 NODELAY
ABUS = IR; OBUS = ABUS; MA <= OBUS[6:15]; "MA <= IR[6:15] inmdto"
=>(IR[4])/(12).
10 NODELAY
=>(^IR[5])/(16). "LectOV"
11 ABUS = 6$0,MA; BBUS = 6$0,IX; CIN = \0\;
OBUS = ADD[1:16](ABUS;BBUS;CIN); MA <= OBUS[6:15];
=>(16). "Directo e indexado: done"
12 NODELAY
=>(^IR[5])/(14).
13 ABUS = ^(6$0)&MA[0],MA; OBUS = ABUS; MD <= OBUS;
=>(20). "Inmediato: done"
14 ADRBUS = MA; RD = \1\; MD <= DBUS;
=>(^READY)/(14).
15 ABUS = MD; OBUS = ABUS; MA <= ABUS[6:15];
=>(11).
Hecho
• Modo de direccionamiento resuelto.
• Instrucción STA ejecutada.
• Dato de la instrucción en MD.
Pendiente
• Ejecución del resto de las instrucciones.
Ejecución de las Instrucciones de
Memoria
Abreviatura Código OP Descripción
ADC (010) AC <= AC + OV + cff
SBC (001) AC <= AC – OV – cff
ORA (110) AC <= AC or OV
AND (101) AC <= AC and OV
XOR (111) AC <= AC xor OV
LDA (100) AC <= OV
STA (011) M*DCD(f(ADDR)) <= AC
CMP (000) cff, vff, nff, zff <= AC – OV
BBUS = AC ADC
SBC
(100)
(001)
AC <= AC + OV + cff
AC <= AC – OV – cff
ORA (110) AC <= AC or OV
AND (101) AC <= AC and OV
XOR (111) AC <= AC xor OV
LDA (010) AC <= OV
STA (011) M*DCD(f(ADDR)) <= AC
CMP (000) cff, vff, nff, zff <= AC – OV
Análisis de ABUS:
resta: complemento a 2
Lleva el valor
de MD al AC
Ciclo de Ejecución Abreviatura Código OP
ADC
Descripción
(010) AC <= AC + OV + cff
SBC (001) AC <= AC – OV – cff
ORA (110) AC <= AC or OV
Compara
CMP $30 = AC - OV
AC + ^MD + 1 = AC - MD
INSTRUCCIONES DE REGISTRO
Instrucciones de dos direcciones
^R/I Rf
0 => 0000 => AC
0001 => IX
0010 => SP
1 => Rf = Valor inmediato
Instrucciones de dos direcciones.
(Proviene del paso 8)
Compare la descripción de BBUS del paso 23 con la del paso 20 y explique la razón de la diferencia
23 BBUS = (AC!^(6$0)&IX[0],IX!^(6$0)&SP[0],SP)*(^(+/IR[7:10]),IR[10],IR[9]);
CIN= (\1\!CFF!^CFF)*(^IR[5]&^IR[6],IR[5],IR[6]);
ABUS = (MD!^MD)*(IR[4]+IR[5],^IR[4]&^IR[5]);
OBUS = ((ADD[1:16](ABUS;BBUS;CIN))!(ABUS@BBUS)!(ABUS+BBUS)! (ABUS&BBUS)!ABUS)*
(^IR[4],IR[5]&IR[6],IR[4]&IR[5]&^IR[6], IR[4]&^IR[5]&IR[6],
IR[4]&^IR[5]&^IR[6]);
AC*((IR[4]+IR[5]+IR[6])&(^(+/IR[7:10]))) <= OBUS;
IX*((IR[4]+IR[5]+IR[6])&IR[10])<= OBUS[6:15];
SP*((IR[4]+IR[5]+IR[6])&IR[9])<= OBUS[6:15];
CFF*(^IR[4]) <= ADD[0](ABUS;BBUS;CIN); NFF <= OBUS[0];
ZFF <=^(+/OBUS);
VFF*(^IR[4])<= ^OBUS[0]&ABUS[0]&BBUS[0]+OBUS[0]&^ABUS[0]&^BBUS[0];
=>(4). "Instrucciones de registro de dos direcciones listas"
¿Cuantos ciclos toma la ejecución de las instrucciones ADC AC, IX; MOV IX, AC;
Descripción de RIC
INSTRUCCIONES DE RAMIFICACIÓN
Instrucciones de Ramificación
(salto relativo).
0 2 3 4 7 8 15
Ejemplo:
BRA DESPL => PC <= PC + DESPL
DEL PASO 21
24 NODELAY
=>(^(&/IR[0:2]))/(31). "Salta a instrucciones especiales"
25 NODELAY
El desplazamiento es un valor con o sin signo explique
=>(^IR[4],IR[4]&IR[7],IR[4]&^IR[7])/(26,28,27).
26 NODELAY
=>(^(+/(DCD[0:7](IR[4:7])&(VFF,^VFF,ZFF,^ZFF,CFF,^CFF,NFF,^NFF))))/(4).
27 BBUS = 6$0,PC; ABUS = ^(8$0)&IR[8],IR[8:15]; CIN = \0\;
OBUS = ADD[1:16](ABUS;BBUS;CIN) ; PC <= OBUS[6:15];
=> (4).
28 BBUS = 6$0,SP; OBUS = DEC(BBUS) ; MA <= OBUS[6:15]; SP <= OBUS[6:15].
29 BBUS = 6$0,PC; OBUS = BBUS ; MD <= OBUS.
30 ADRBUS = MA ; DBUS = MD ; WR = \1\; De todos los saltos relativos ¿Cuáll es el que demora mas y por qué?
=>(^READY, READY)/(30,27). "instrucciones de ramificación”
¿Por qué en el paso 30 se salta al 27 y no directamente al 4?
INSTRUCCIONES DE CONTROL
FORMATO DE INSTRUCCIONES DE
CONTROL
SEI y CLI =>“ok”
Instrucciones de Rotación y Traslación (LSR, ASR, SHL, ROR, ROL, RRC, RLC)
Instrucciones de Rotación y Traslación (LSR, ASR, RRC, ROR, SHL, ROL, RLC)
A[0]<=(A[1]!A[0]!CFF!A[15])*(^IR[9],^IR[7]&^IR[8]&IR[9],IR[7]&IR[8]&IR[9],
IR[7]&^IR[8]&1R[9])
39 SHC <= DEC2(IR[12:15]). “Corregir este paso para incorporar SHC al ABUS”
40 BBUS = AC ;
OBUS[0] = (BBUS[1]!BBUS[0]!CFF!BBUS[15]) *(^IR[9],^IR[7]&^IR[8]&IR[9],IR[7]&IR[8]&IR[9],
IR[7]&^IR[8]&IR[9]);
OBUS[15] = (BBUS[14]!CFF!BBUS[0])*( IR[9],^IR[9]&(^IR[7]+IR[8]),IR[7]&^IR[8]&^IR[9]);
OBUS[1:14] = (BBUS[0:13]!BBUS[2:15])*( IR[9],^IR[9]) ;
AC <= OBUS ; SHC <= DEC2(SHC);
CFF <= (BBUS[15]!CFF!BBUS[0])*(IR[9], ^IR[9]&^IR[7], ^IR[9]&IR[7]);
=>((+/SHC),^(+/SHC))/(40,4). "Completa las instrucciones de control"
SITFIE 1.01
INSTRUCCIONES DE PILA
Instrucciones de pila (PUSH, POP, RET y RTI).
0 2 3 4 6 7 11 12 15
0000 => AC
0001 => IX
0010 => SP
0100 => PC
1000 => Flags
Abrev. OP Descripción
PSH 000 Deposita REG en la pila.
POP 001 Retira REG de la pila.
RTS 001 Retorna de la subrutina. (REG = PC)
RTI 011 Retorna de la Interrupción. (REG = PC)
Flags = 11$0,VFF,CFF,NFF,ZFF,IFF
Flags = 11$0,VFF,CFF,NFF,ZFF,IFF
41 NODELAY
=>(^(IR[0]&^IR[1]&^IR[2]),(IR[0]&^IR[1]&^IR[2]&IR[6]),
(IR[0]&^IR[1]&^IR[2]&^IR[6]))/(53,45,42).
"Inicia Instrucciones de pila"
42 BBUS[6:15] = (AC[6:15]!IX!SP!PC!5$0,VFF,CFF,NFF,ZFF,IFF)*(^(+/IR[12:15]),
IR[15], IR[14], IR[13], IR[12]);
BBUS[0:5] = (6$0!AC[0:5])*((+/IR[12:15]), ^(+/IR[12:15]));
OBUS = BBUS; MD <= OBUS.
43 BBUS = 6$0,SP; OBUS = DEC(BBUS) ;MA <= OBUS[6:15]; SP <= OBUS[6:15].
44 ADRBUS = MA ; DBUS = MD ; WR = \1\;
=>(^READY,READY)/(44,4). "PSH lista"
45 "Instrucciones que extraen de la pila"
BBUS = 6$0,SP; OBUS = BBUS; MA <= OBUS[6:15].
46 BBUS = 6$0,SP; OBUS = INC(BBUS); SP <= OBUS[6:15].
47 ADRBUS = MA ; MD <= DBUS ; RD = \1\;
=>(^READY)/(47). "Dato leido"
48 ABUS = MD; OBUS = ABUS;
AC*(^(+/IR[12:15])) <= OBUS;
IX*(IR[15]) <= OBUS[6:15];
SP*(IR[14]) <= OBUS[6:15];
PC*(IR[13]) <= OBUS[6:15];
(VFF,CFF,NFF,ZFF,IFF)*(IR[12]) <= OBUS[11:15];
=>(^IR[1])/(4).
49 BBUS = 6$0,SP; OBUS = BBUS; MA <= OBUS[6:15].
50 BBUS = 6$0,SP; OBUS = INC(BBUS); SP <= OBUS[6:15].
51 ADRBUS = MA ; MD <= DBUS ; RD = \1\;
=>(^READY)/(51). "Dato leido"
52 ABUS = MD; OBUS = ABUS; (VFF,CFF,NFF,ZFF,IFF)*(IR[12]) <= OBUS[11:15];
=>(4).
Instrucción de JMP absoluto
0 2 3 4 5 6 10
53 NODELAY
=>(^(IR[0]&IR[1]&^IR[2]))/(55).
54 ABUS = 6$0,IR[6:15]; OBUS = ABUS; PC<= OBUS[6:15];
=>(4).
55 NOINST = \1\; ADRBUS = MA;
=>(55).
Interrupción
• Detección de la entrada IRQ = \1\.
• Depositar Flags y PC en la Pila.
• Borrar la bandera de Interrupción.
• Recuperar el Vector de la Interrupción.
• Ejecutar el salto a la interrupción.
1 MA <= 10$1023; IFF <= \0\.
.
.
.
4 BBUS = PC; OBUS = BBUS ; MA <= OBUS ;
=>(IRQ&IFF)/(56).
Detección de la entrada IRQ = \1\.
Depositar PC y Flags en la Pila. Flags = 11$0,VFF,CFF,NFF,ZFF,IFF
Borrar la bandera de Interrupción.
Recuperar el Vector de la Interrupción.
Ejecutar el salto a la interrupción