Você está na página 1de 23

Representacin de nmeros

Frmula general de rango: Con n bits: 0,2 n 1 . Ej.: n = 5, [0, 31] En operaciones, si el resultado est fuera de rango: Overflow. Si hay overflow se activa (valor 1) el bit de carry o acarreo. Representacin de enteros: S-M (Signo-Magnitud): De los n bits, el ms significativo es el del signo. Siendo 1 para negativo y 0 para positivo. Con el resto codificamos el valor absoluto del nmero. Doble representacin del cero ( 000 (+0) = 100 (-0) = 0) Rango: 2 n 1 , 2 n 1

[ ( ) ( )]

Otra forma es codificar los n bits del valor absoluto del nmero (paso 1). Y luego copiar de derecha a izquierda todos los bits hasta llegar al primer 1. A partir de ah invertimos (cambiar 0 por 1 y viceversa). Ej: M: -7, n = 4. Abs(-7) = 7d = 0111b (Paso 1). Invertimos el 0111: 1001b Rango: 2 n 1 , 2 n 1 1

[ ( )(

)]

En la suma en C2 hay overflow cuando el bit de los operandos a sumar es igual en ambos (ambos 0 o ambos 1), pero el bit del resultado es distinto (Por ej. Los sumandos es 0 pero el resultado es 1, y viceversa). En la resta A-B, si el bit ms significativo de A es 0, y el de B es 1 y el resultado es 1 el bit ms significativo de A es 1, el de B es 0, y el resultado es 0 hay overflow.

ww

Ej: 4 bits (n = 4). Representar -7: 2 4 7 = 16 7 = 9d = 1001b (Primer 1, bit signo)


w.

at

Bit ms significativo representa el signo (Como en S-M). Los nmeros positivos se representan en los bits restantes en binario natural. Los nmeros negativos, representamos 2 n M con n bits, donde M es el nmero a representar. Si el bit ms significativo no es 1 no se puede representar.

em at

ic

a1

.c

om

Representacin de enteros:Complemento a 2:

Representacin de enteros:Exceso a Z: Se suma al entero el exceso (Z) y se representa el resultado en binario. Para que el resultado sea representable no puede ser negativo y ha de caber en los n bits. Ej: 4 bits, Exceso a 8: 5 5 + 8 = 3 0011 5 5 + 8 = 13 1101 Rango: El extremo inferior ha de ser el nmero el cual, al sumarle el exceso, de cmo resultado 0. El extremo superior debe cumplir, en cambio, que al sumarle el exceso el resultado sea todo unos. As, con n = 4, Z = 8: (-8,7) Pues: 7+8 = 15d = 1111b En general: [ Z ,2 n 1 Z ]

Para el -26,8750 hacemos el C2 olvidndonos de la coma. Ej: -26.8750d = 100101,0010b Rango: Depende de los bits de la parte entera y fraccionaria. Con n = 6 y m = 4 tenemos: Ms pequeo: 100000,0000 = -32 = 2 5 Ms grande: 011111,1111 = 32,9375 = 32 + 2 4 En general: 2 n 1 ,2 n 1 2 m

Representacin de reales:Coma flotante: Se parte de la idea de que cualquier nmero se puede representar como: R = Mantisa * B EXP . Ej: 23.45 = 0.234 * 10 2 = 2345 * 10 2 La normalizacin todo fraccin consiste en que la mantisa no tenga dgitos enteros y que el bit decimal siguiente a la coma no sea 0.

ww

26 = 011010 0.8750 = 0,1110 = 2 x10 1 + 2 x10 2 + 2 x10 3 26.8750 = 011010,1110


w.

at

em

Se representan por separado la parte entera y la fraccionaria en C2, empleando n+m bits. As, con n = 6, m = 4:

at ic

a1

Representacin de reales: Coma fija:

.c om

Caractersticas del nmero: El exponente se representa en exceso a Z = 8 La mantisa se representa en S-M La normalizacin es todo fraccin El cero se representa con la mantisa a 0 y cualquier exponente, aunque por convenio se pone mantisa = 0 y exponente = 0.

Ej: 13,625 = 1101,101 = 01101101 * 2 4 = 01101101 1100 (12. Exp = 4. 4 En exc 8 = 4+8 = 12) Rango: Con n bits para la mantisa y m para el exponente: m m 1 2 n 1 2 (2 1 Z ) , 1 2 n 1 2 (2 1 Z )

[(

)(

)(

)(

)]

Para sumar y restar: 1. Igualar el exponente del nmero de menor exponente al de mayor. Se pierden dgitos. 2. Sumar 3. Normalizar el resultado. Se pueden volver a perder dgitos. 4. Comprobar si hay desbordamiento en el exponente.

Exponente: Exceso Z = 127. Mantisa: 24 bits, Exponente: 8 bits. Tipo normalizado: A la izquierda de la coma siempre hay un 1. Ese 1 (bit implcito) no se representa. Tipo desnormalizado: Todos los bits del exponente son 0. Usado para valores muy pequeos. Exponente ser -126. Casos especiales: Mantisa y exponente todo 0 = 0 Mantisa todo 0, signo +, exponente todo 1 = Infinito. Mantisa todo 0, signo -, exponente todo 1 = - Infinito. Mantisa 0, exponente todo 1 = NaN (Not a Number) Codificacin de caracteres: ASCII Estndar: Usa 7 bits, con lo que se pueden representar 128 caracteres. Los del 0 al 31 son caracteres de control. Idioma anglosajn: Faltan caracteres como la .

ww

Formato IEEE-754:

w.

at

em

at ic

a1

.c om

Codificacin de caracteres: ASCII Extendido: Se amplia el nmero de bits a 8. Nuevos caracteres. En este cdigo, si el bit ms significativo es 0 se codifican igual que el estndar. IMPORTANTE: En IEEE fijarse bien en el signo. En coma flotante recordar que el formato de la mantisa es 0,1__ El exponente es siempre: Exp Z = X o Exp + Z = X En IEEE con bit implcito recordar que es siempre 1,__ donde el ___ (La mantisa) es el nmero binario que tenemos en el nmero original. En resumen, que se aade un 1, delante siempre.

Sistemas digitales
Dos tipos: Sistemas combinacionales: Dos tcnicas para diferenciar los sistemas. Funciones booleanas: Describe de manera matemtica la funcin. Variables y operadores. Tablas de verdad: Proporciona el valor de las salidas para cada combinacin de valores de las entradas.
ww w.
.c om

Sistemas combinacionales complejos: Multiplexador: Tiene n entradas de seleccin y 2 n lneas de entrada. Una salida. Para cada combinacin de las entradas de seleccin llega a la salida una sola lnea de entrada. Demultiplexador: Tiene n lneas de seleccin, 1 lnea de entrada y 2 n salidas. Funcionamiento inverso al multiplexador, para cada combinacin de lneas de seleccin hay 1 salida a la cual se lleva la entrada, permaneciendo el resto a 0. Codificador: Tiene 2 n entradas. Solo una de ellas se pone a 1 y n salidas. Cada combinacin de entrada genera una secuencia de 1 y 0 en las n salidas. Decodificador: Tiene n entradas y 2 n salidas. Las entradas codifican el ndice de la salida que debe ponerse a 1. Las dems a 0. Sumador elemental (De 1 bit): Sistema combinacional para poder sumar dos bits sin operar con nmeros. Sistemas digitales secuenciales:

at

em

at

ic a1

Biestable sincrono: Nivel alto: Con c a 0, da igual R y S Q no cambia. Con c a 1: Si R y S son 0 No cambia Si R y S son 1 No permitido. Si R S ((R=1 y S=0) (R=0 y S=1)) S (Coge el valor de S) Nivel bajo: Al contrario con la c: Con c a 1, da igual R y S Q no cambia. Con c a 0: Mismas combinaciones que nivel alto. Por flanco ascendente: Cuando se produce un flanco ascendente la entrada de control pasa de 0 a 1, y en ese pequeo intervalo hace que se cambie el estado interno reduciendo al mnimo los errores del sistema. Funciona igual que los otros solo que el flanco hace que c cambie de 0 a 1.

Es un sistema secuencial sincrono por flanco ascendente (FA). Empleado para almacenar 1 bit de informacin. Dicho bit a almacenar se pone en la entrada D. A continuacin ponemos un flanco ascendente en la entrada de control (c) y el bit aparece a la salida. D = 0 FA Q = 0 D = 1 FA Q = 1 D = x Otro caso Q = No cambia Registros: Ver apuntes.

Memoria: 2 M * N M = Lneas de direccin. Una combinacin de bits de estas lneas identifica una palabra. M lneas 2 M palabras/registros. N = Nmero de bits de cada palabra/registro. Tambin es el nmero de lneas de datos.

ww

w.

Biestable D:

MEMORIAS

at

Hace que c pase de 1 a 0.

em

at

Por flanco descendente:

ic

a1

.c

om

Como M es el nmero de lneas y tenemos 2 M palabras de N bits cada palabra, el tamao de la memoria es 2 M * N Clasificacin de las memorias: Posibilidad lectura: Si es de solo lectura significa que solo se puede grabar una sola vez. Volatibilidad informacin: Voltiles: Pierden la informacin al desaparecer una fuente de energa. No voltiles: No la pierden. Necesidad refresco: Son aquellas que necesitan refrescar (reescribir la informacin de nuevo) cada cierto tiempo. Las de solo lectura son no voltiles y no necesitan refresco. Tipos de memorias: ROM: Solo lectura, no voltil, no necesita refresco. PROM: Similar a ROM. Solo puede escribirse una vez con un grabador. EPROM: Es solo lectura pero podemos escribir tantas veces como queramos, con un equipo especial. Antes debe borrarse la informacin que contiene con luz ultravioleta. EEPROM: Igual que la EPROM pero para borrarla se le aplica corriente elctrica. FLASH: Evolucin de la EEPROM. Ms rpida y barata. Escritura ms sencilla. RAM Esttica: Memoria de lectura y escritura, voltil pero no necesita refresco. RAM Dinmica: Como la esttica pero esta si necesita refresco. El tiempo desde que se producen las entradas hasta las salidas se llama tiempo de lectura. El tiempo que transcurre desde que se da la orden de lectura hasta que la informacin aparece en las rdenes terminales de salida es el tiempo de escritura. El tiempo de ascenso es la media de los tiempos de lectura y escritura. IMPORTANTE: En los ejercicios de biestables: En biestables D, que llegue un 1 a la seal de control (CLK, el triangulito), significa que lo que haya en D pasa a la salida (Q), Q ser la salida negada. En la CLK ha de llegar un flanco ascendente, es decir, que en cronograma suba una lnea hacia arriba. En los R-S a secas (biestables asncronos, aquellos sin CLK o triangulito), el estado puede variar en cualquier momento. Es decir, cada vez que cambia uno de los valores de entrada (R o S) puede (y digo puede porque depende de la combinacin de los valores de entrada, recordar que solo cambia cuando R S) cambiar la salida (Q), es decir, no hay que esperar a seales de reloj como en los sincronos. En los R-S sincronos (los que tienen CLK, triangulito), depende de si son por flanco ascendente o descendente, cambiaran su estado cuando haya estos flancos.
ww w.

at e

at ic

a1

.c om

IMPORTANTE MEMORIA: Organizacin memoria esttica: X x Y. Ej: 16K x 4 X = 16K Y = 4 Nmero lneas datos del chip (d) = Ancho palabras chip (N) d = N = Y. En el ej: d = N = 4 Lneas de direccin que llegan al chip (a) se relacionan con el nmero de palabras (M) de la siguiente forma: M ' = 2 a = X En el ej: 2 a = 16 K = 2 4 x 210 = 214 a = 14 Sumando a y d (14+4) obtenemos el nmero de lneas de direccin y de datos necesarios para manejar dicho chip. Organizacin memoria dinmica:
.c om

El clculo es muy parecido a con la memoria esttica. Ver ej: X x Y. Ej: 1Mx1 d = N = 1 ; M ' = 2 r 1 diferencia. Se pone r en vez de a 2 r = M ' = 2 0 x 2 20 r = 20 Pero en el caso de la memoria dinmica el ancho de direcciones (r) NO coincide con el nmero de lneas de direccin a recibidas por el chip ya que las recibe de forma partida (fila, columna), por lo tanto, las lneas de direccin del chip son la mitad que el nmero de bits de las direcciones.
r 20 = = 10 2 2 a + d = 10 + 1 = 11 a=
ww w.

Sobre memoria dinmica..: En memoria dinmica, acceder a las filas es operacin RAS (Row Access?) y a las columnas CAS (Column Access?). Cuando se quiere acceder a una palabra concreta en estos chips se acta de la siguiente forma: 1. Codificamos el nmero de palabra en binario. Ej: Palabra 9: 1001 2. Los 2 primeros bits es la columna (10) y los otros 2 la fila (01). 3. Leemos la fila (op RAS). Activamos CS, LE a 1 (es lectura) y RAS. En las lneas de direccin ( ai ) ponemos los bits de la fila. A continuacin repetimos la operacin activando la lnea CAS (no desactivamos la RAS) pero cambiamos el valor de los bits ai . En d obtendremos el resultado.

at

em

at

ic

a1

Chips necesarios para dispositivos de memoria: Partiendo del nmero de lneas para las direcciones (a). En el ej: 20 El nmero de lneas para los datos (N). En el Ej.: 8 Y el tipo de chip. En el Ej.: 512Kx1 Calculamos el nmero de palabras del dispositivo (M): M = 2 a = 2 20 = 210 x 210 = 1024 K Ahora calculamos el nmero de bancos (NBD): M 1024 K = =2 NBD = M ' 512 K Ahora el nmero de chips por banco (NCB): N 8 NCB = = =8 N' 1 Y para saber el nmero de chips total multiplicamos NBD y NCB: Nmero chips = NBD x NCB = 2 x 8 = 16

Bus de control: La CPU pone las instrucciones a ejecutar, que recogen los sistemas de memoria y E/S. Ancho CPU terica: 16 lneas de datos: Registros internos, bus de datos y ALU son de 16 bits. Ancho palabra memoria: 16 bits: CPU tiene 16 lneas de datos. Pasos de implementacin y ejecucin de un algoritmo: 1. Expresar el algoritmo en instrucciones mquina. 2. Llevar las instrucciones que forman el programa a la memoria y almacenarlas all. 3. Ejecucin del programa. Dos etapas: a. Bsqueda de instruccin e incremento del PC. En esta fase la CPU pone en el bus de direcciones el contenido del registro PC y activa la lnea del sistema de memoria. Como consecuencia, el sistema de memoria pone en el bus de datos los 16 bits de la instruccin a ejecutar. La CPU lee la instruccin y la pone en el registro IR, el registro de instrucciones. A continuacin la CPU incrementa en una unidad el valor de PC. b. La ejecucin. La CPU ejecuta la instruccin.

ww w.

Bus de direcciones (SAB): La CPU pone las direcciones sobre las que operar y los sistemas de memoria y E/S recogen dichas direcciones.

at

em

at ic

Bus de datos (SBD): Se ponen/recogen los datos con los que tratar la CPU, el sistema de memoria y el sistema de E/S.

a1

.c o

LA CPU TERICA

Modos de direccionamiento de la CPU terica: Son las formas que la CPU tiene de acceder a los operandos. Tres modos: Direccionamiento a registro: El operando est en un registro. Direccionamiento a memoria: El operando est en memoria. Normalmente la posicin de memoria la especifica un registro. Direccionamiento inmediato: El operando se encuentra dentro del cdigo de una instruccin. Juego de instrucciones de la CPU: Tres tipos: Instrucciones en movimiento: Mueve informacin digital de un operando a otro. Estos movimientos pueden ser entre registros de la CPU o bien de un registro de la CPU a memoria y viceversa. Instrucciones aritmtico-lgicas: Procesan informacin digital. Operaciones llevadas a cabo por la ALU. Al realizar una de estas operaciones se modifican los bits de estado (Z,C,O,S), aunque para una operacin lgica solo tiene sentido el bit Z. Instrucciones de control de flujo: Son aquellas instrucciones que realizan saltos en el cdigo y permiten ejecutar instrucciones de forma no secuencial. Recordar, que antes de ejecutar cualquier instruccin se incrementa PC, por lo tanto hay que tener esto en cuenta a la hora de escoger el valor de los saltos. Para saltos hacia atrs (posiciones negativas) se representan en C2. Hay que tener en cuenta que al ser 8 bits se extiende el signo. Ej: Saltar -5: 5d = 0101b -5d = C2(5d) = C2(0101) = 1011 Como son 8 bits, extendemos signo: -5 = 1111 (Extensin) 10111 Pasos de ejecucin de las instrucciones: Las instrucciones se ejecutan mediante activacin/desactivacin de seales de control. Este proceso lo lleva a cabo la UC que establece las seales que se deben activar y desactivar. Restricciones al respecto: 1. Las instrucciones se dividen en pasos, los cuales cada uno requiere un tiempo para su ejecucin. 2. Cada paso activa unas seales y desactiva otras. Estas dependen de la instruccin a ejecutar y el paso donde se encuentre. 3. Comenzar un paso nuevo cuando haya que modificar la informacin que hay en el bus interno o cuando haya que esperar a que ciertas acciones concluyan. 4. Los 3 primeros pasos son comunes a todas las instrucciones. Se realiza la bsqueda de la instruccin a ejecutar y el incremento del PC. 5. Tras activar la seal LEER en la UC, la informacin est disponible en el MDR al acabar el siguiente paso. 6. Tras activar la seal escribir en la UC, la informacin almacenada en el MDR se escribe en la memoria al final del paso siguiente. Por tanto, no se puede cambiar el valor del MDR ni accederse a la memoria hasta entonces.
ww w.
om

at

em

at

ic a

1.c

Seales de los 3 pasos comunes: Paso 1: PC-IB: El valor de PC pasa al bus interno. IB-MAR: El valor del bus interno pasa al registro MAR. READ: Leemos de la direccin a la que apunta el registro MAR. TMPE_CLR: Ponemos el registro temporal de entrada todo a ceros. CARRY_IN: Activamos el carry, sirve para sumar uno. ADD: Sumamos lo que haya en TMPE (todo 0) y lo del IB (uno, por el carry). ALU_TMPS: Pasamos el resultado de la ALU al registro temporal de salida.

Paso 2: TMPS_IB: Pasamos del registro temporal de salida al bus interno. IB-PC: Pasamos el contenido del bus interno al PC.

Paso 3: MDR-IB: Pasamos el contenido del registro MDR al bus interno. IB-IR: Pasamos el contenido del bus interno al registro IR.
om

LA UNIDAD DE CONTROL
General las seales de control. Entradas que recibe: IR, RELOJ, SR y entrada de interrupcin. Dos formas de construir una UC. Forma 1: UC Cableada Est formada por 3 elementos: Contador de pasos, decodificador de instrucciones y generador de seales de control. IR identifica la instruccin a ejecutar. El decodificador recibe los 8 bits y genera tantas lneas como instrucciones hay. Este indica que instruccin se est ejecutando en el momento activando solo la lnea INS correspondiente a dicha instruccin. El contador de pasos conectado al reloj es un sistema digital secuencial. Inicialmente la lnea T1 se encuentra a 1 y el resto a 0. Cada vez que transcurre un periodo de reloj se activa la siguiente lnea Ti. As, este contador de pasos nos indica en que paso estamos.

ww w.

Hay ciertos casos especiales en los pasos no comunes. FIN: Indica final de instruccin. Ciclo de espera: Paso que no realiza ninguna instruccin.

at

em

at

Pasos no comunes:

ic a1

.c

El valor de SR es importante a la hora de generar seales. La seal FIN reinicia el contador de pasos de forma que se active la lnea T1 de nuevo. Forma 2: UC Microprogramaza El valor de todas las seales de control de un paso se encuentra almacenado en una palabra de control. Esta palabra de control est formada por un nmero de bits determinado, cada uno de los cuales se asocia a una seal de control determinada. Las palabras de control de cada instruccin se encuentran almacenadas a partir de una posicin definida en memoria, denominada memoria de microprograma, memoria de solo lectura. La ejecucin de una instruccin consiste en el volcado de manera consecutiva de las palabras de control correspondientes a las instrucciones. Volcar una palabra cada periodo de reloj. El microcontador de programa contiene la direccin de la palabra de control a volcar. El circuito generador de la direccin se encarga de generar la direccin que se lleva al microcontador de programa. Este generador de direccin genera la direccin de la 1 palabra de control comn a todas las instrucciones al detecta la seal de FIN. IMPORTANTE:

Importante: Al ponerse a hacer operaciones con la ALU mirar bien los valores de op0 y op1 ya que estos decidirn la operacin lgica a hacer. Por Ej., se puede pensar que por tener Resta a 1 se va a restar y sin embargo esos operandos estn seleccionando la operacin XOR. Lneas de las ALUS: A cada ALU elemental llegan 2 lneas de datos de entrada que corresponden a los 2 operandos sobre los que actual, y sale una lnea de salida correspondiente al resultado. Por lo tanto: Tres lneas de datos por cada ALU elemental. Las lneas de control, Resta, op1 y op2 deben llegar a todas las ALUS elementales, pero son comunes a todas ellas. Adems, tenemos la lnea CARRYIN que llega a la ALU elemental menos significativa. Por lo tanto: Cuatro lneas de control. Por ltimo: Cuatro lneas de Flags (CF,OF,SF,ZF) Cuando se pide codificar una instruccin (MOV, AND, etc.) y faltan bits para agrupar de 4 en 4 se aaden 0s a la derecha. Ej.: AND R6,R2,R3 0101 1110 0111 11 00 <- Aadimos 2 ceros.

ww w.

Al realizar operaciones con la ALU hemos de tener en cuenta que si hay una resta, el acarreo pasa a ser una de las entradas de una puerta XOR cuya otra entrada es el propio Resta, y que estarn ambas a uno, con lo cual el CF (Carry Flag) dar 0. Ver ejer pag 88.

at

em

at

ic a

1.c

om

Recordar que los saltos (JMP, etc.), para calcular la posicin (es decir el nmero de instrucciones a avanzar o retroceder) de PC es uno ms que la propia instruccin, es decir: INC R5 JMP POSI (1) INC R4 INC R1 DEC R6

NEGA: POSI:

(1): JMP POSI, hara JMP +1 y NO +2 como cabria esperar ya que PC ya est apuntando al INC R4. Exactamente igual al saltar hacia atrs: OTRO: MOV R0,[R1] COMP R0,R7 BRS NEGA INC R5 JMP POSI INC R4 INC R1 DEC R6 BRNZ OTRO (2) MOV [R3],R4

(2): Cuando se ejecuta esta instruccin, PC ya estar apuntando a la siguiente (MOV [R3],R4), por lo tanto, salta -9 y NO -8 Notas seales de control: TMPE_SET pone el registro temporal de entrada todo a 1s. Lo que equivale al valor 1 en C2. ALU_TMPS pone en el registro temporal de salida el resultado de la operacin que haya realizado la ALU (ADD,SUB,XOR,AND,etc). Importante: Para realizar cualquier operacin sobre dos operandos, uno ha de estar en el registro temporal de entrada, y el otro, como no hay un segundo registro temporal de entrada, se le pasa a la ALU directamente, para ello se coloca en el bus INTERNO (IB). Ej.: Paso 4: RS1_IB, IB_TMPE Colocamos Rs1 en IB, y de IB lo pasamos a TMPE. Como IB est ocupado en ese paso esperamos al siguiente para pasar a IB el segundo operando.

ww w.

at e

at

NEGA: POSI:

ic a1

.c

om

Paso 5: RS2_IB, <operacin>, <resto> Donde <operacin> es la operacin a realizar entre los dos operandos (AND,XOR,OR,SUB,etc) y <resto> el resto de operaciones a realizar, normalmente ALU_SR y ALU_TMPS. Tras realizar estas operaciones, ALU_SR sirve para activar los flags del registro de estado segn el resultado de la operacin y ALU_TMPS para poner el resultado desde la ALU al registro temporal de salida (TMPS). Por ltimo, en caso de que debamos de guardar el resultado en algn registro (por ej. En operaciones de suma (ADD), resta (SUB,XOR,AND,etc.) hacemos el paso 5. Hay operaciones donde no nos importa el resultado, solo los flags del registro de estado (Por ej. COMP donde miramos el SR para ver el resultado). Paso 6: TMPS_IB, IB_Rd, FIN Con ALU_TMPS pusimos el resultado en TMPS, ahora lo pasamos de ah al bus interno (IB) con TMPS_IB y de IB al registro destino con IB_Rd, y finalizamos (FIN).

Ponemos el registro (su contenido realmente) en IB, este lo pasamos a MAR (IB_MAR) y leemos (READ). Una vez el contenido de un registro est en MAR se estar accediendo a la memoria (los corchetes []), leeremos (READ) o escribiremos (WRITE). Paso 2: Ciclo de espera. Tras una lectura o escritura, si a continuacin se pensaba usar el bus interno (IB) hay que dejar un ciclo de espera. Paso 3: MDR_IB, IB_RD, FIN El dato ledo de memoria se almacena en el registro MDR, por lo tanto debemos devolverlo a IB y de IB al registro destino Rd. Escritura de memoria: (MOV [Ri],Rs) Paso 1: Ri_IB, IB_MAR Pasamos a MAR la direccin donde vamos a escribir.
ww

w.

Paso 1: Ri_IB, IB_MAR, READ

at

em

Para leer de memoria, usamos el registro MAR (Memory Address Registry) para indicar el registro a leer de memoria:

at

ic

a1

Lectura de memoria: (MOV Rd,[Ri])

.c

om

Paso 2: Rs_IB, IB_MDR, WRITE Pasamos a IB, y luego a MDR el dato a escribir. Escribimos. Paso 3: FIN Acabamos. Resumen: MAR contendr siempre la direccin de memoria o registro del que leer/al que escribir. MDR contendr el dato ledo/a escribir. Ms notas: Hacer un XOR de un valor con TMPE_SET (Todo 1s) es hacer un NOT de dicho valor. Para conseguir poner algo todo a 1s basta hacer un OR de ese algo con otro registro que valga todo 1s (Algo que conseguimos con TMPE_SET).

Para sumar uno a un registro: TMPE_CLR, CARRYIN (Ponemos a 0s y sumamos 1 del Carry). MUY IMPORTANTE: Hacer esto: Rx_IB, IB_MAR implica que le pasamos a MAR el valor que haba en IB pero NO por ello desaparece de IB. Continua en el. Unidad de control: Tiempos para ejecutar instrucciones/cdigos: Si nos dan una cierta instruccin (Ej.: AND R4,R7,R3) tenemos que saber cuantos pasos conlleva esa instruccin. Para ello, empollar. Este caso requiere 6 pasos/ciclos. Si nos dan la frecuencia de la CPU (Ej.: 1 Mhz) sabemos que ejecuta 10 6 1 instrucciones/segundo. Por lo tanto, calculamos cuanto tarda en ejecutar un ciclo ( 6 10 segundos) y multiplicamos por el nmero de ciclos (6). Para tiempos de cdigos es sumar los ciclos de cada instruccin. Importante: En las condiciones (BR,..) mirar si se cumple (6 pasos) o no (4 pasos). Para ello depender del comportamiento del resto del cdigo. Si nos pide tiempos mnimos y hay condiciones es cuando NO se cumplen.

ww w.

at

Dado que con esto, pasamos R0 a IB y de IB a TMPE, pero si luego hacemos TMPE_CLR nos cargamos el contenido de TMPE.

em

at

[1: R0_IB], [2: IB_TMPE, TMPE_CLR], ADD

ic

a1

Recordar no hacer cosas como:

.c

om

La expresin volcar una palabra de control cada X ms es equivalente a decir que tarda x ms en ejecutar un ciclo/paso. Notas UC Cableada: En estos ejercicios te piden poner el valor del ciclo donde se ejecuta la seal de control dada. Es decir (Ej.): IB_PC, con las instrucciones BR y JMP, se ejecutan en dos pasos. Uno es el paso 2 (comn a todas las instrucciones), y otra en el paso 6 (comn a esas dos instrucciones). Ver Ej. 95 pag 135/136. Notas UC Microprogramada: En estos ejercicios suelen dar una secuencia de bits y una figura donde se muestra como interpretan dichos bits. La cuestin es que donde hay un 1 significa que se activa dicha seal de control. Si se trata de saber cual es la instruccin siguiente tener cuidado: Si hay un FIN, la siguiente ser el paso 1 de la siguiente instruccin a ejecutar, que no confunda esto. A tener muy en cuenta: Si te dan un chorro de bits y te dicen que tras ejecutar las seales de control correspondientes a dicho chorro el registro IR toma el valor X (X ser otro chorro de bits) sacamos de ese X la instruccin que se ejecut (Mirando la tabla de instrucciones, como se codifican) y de ah sabemos la seal. Una vez la sepamos, lo normal es que tengamos que sacar del paso 4 en delante de dicha instruccin. Ah ya tenemos que saber las seales que sern. Cuando se activa la seal de control JUMP, en cualquier instruccin, tambin se activa ADD y ALU_TMPS. SIEMPRE. Notas Evolucin y funcionamiento de la CPU Elemental: Cuando tenemos un esquema donde nos dan los valores en hexadecimal de cada ciclo de una instruccin, debemos tener en cuenta que: Ciclo 1: En este ciclo est almacenado el cdigo de la instruccin que se acaba de ejecutar. Por lo tanto su valor hexadecimal ser la direccin donde estaba dicho cdigo. Ciclo 5: El valor hexadecimal de dicho ciclo es la codificacin de la instruccin ejecutada. Ciclo 2: Contendr la direccin en hexadecimal de donde est la prxima instruccin a ejecutar ya que en el ciclo 1 se incrementa PC, y en este se copia a PC. Nota: Normalmente esto es as en casi todas las instrucciones, pero en las que hay saltos de control de flujo no siempre es as. Si hay 4 ciclos la condicin no se cumpli, por lo tanto seria la direccin del propio ciclo 2. Pero si hay 6 ciclos la cosa cambia dado que esto significa que se cumple la condicin y saltar. Por lo tanto hay que calcular el salto y sumar (o restar) a la direccin que marque el ciclo 2. (Ver ejer 104 (entero) de la pgina 145).
ww w.
om

at

em

at

ic a

1.c

En los ejercicios donde nos den direcciones de memoria y su valor, as como valores de registros (R1-R7), PC e IR es importante fijarse en IR ya que nos dar la codificacin de la instruccin en curso. Si piden en que posicin de memoria estar el cdigo de la instruccin en curso, ser PC 1, dado que PC apunta a la siguiente cuando la instruccin en curso est ejecutndose.

Programacin en ensamblador
Definicin de variables: Cuando reservamos variables lo que hacemos es reservar un espacio de memoria al que damos un nombre, al cual nos referiremos para leer o escribir. Dos formas: [etiqueta] VALOR Con11, Con12 [etiqueta] VALOR numero VECES Con1 De la primera forma creamos variables normales. Al poner 2 constantes en vez de una, lo que hacemos es reservar dos direcciones de memoria distintas. Ej.:
.c o

ENTERO VALOR 5,-4; As creamos dos direcciones de memoria. De la segunda forma creamos arrays. Para estas variables se crearan tantas direcciones de memoria como veces indique la definicin. As conseguiremos que los programas no nos machaquen los valores. Ej.: Array VALOR 7 VECES -8; Se inicializarn las 7 direcciones de memoria con valor -8. La [etiqueta] es opcional. Es el nombre de la variable. Definicin de secciones: .DATOS: Define el comienzo de la seccin de datos. Tiene tantas posiciones de memoria como definiremos en [tamao], aunque esta declaracin es opcional, si no se pone se ajusta al tamao de las variables. .CODIGO: Anloga a la anterior. Nos dice donde empieza el programa. Tambin se puede especificar tamao aunque no se hace nunca. .PILA: Indica el tamao de la pila. Si no se indica se le da valor 256. FIN: Especifica fin de programa.
ww w.

Un procedimiento se llama desde el programa principal u otro procedimiento mediante la instruccin CALL. Dos formas: 1. CALL Inm8 2. CALL Rx

M at

Procedimientos

em

at

ic a1

La primera mete en la pila el valor del PC y a este le incrementa el valor: PC + Ext16(Inm8). El valor Inm8 lo calcula en ensamblador. La segunda forma hace igual pero al PC le asigna el valor del contenido en Rx. Lo que hace que al final del procedimiento se vuelva a la instruccin siguiente a la llamada es la instruccin RET, que saca del valor que almacenamos del PC en la pila al principio y lo asigna al PC. Paso de parmetros: Dos formas: Mediante registros o mediante pila. El procedimiento llamado almacena los parmetros en pila o registros y ejecuta CALL para dar el control al procedimiento llamada. El procedimiento llamada hace uso de los parmetros. Si interesa obtener un resultado se almacena, se llega al final y devuelve el control al llamador. Finalmente se borran todos los parmetros una vez usados. Formas paso parmetros: Valor y direccin. Por valor: Se lleva el valor del parmetro a la pila. Por direccin: Se lleva la direccin de memoria donde est el dato. Definicin de un procedimiento: PROCEDIMIENTO nombre <Instrucciones> RET FINP La pila: Zona de memoria reservada para almacenamiento temporal de informacin. Estructura de datos LIFO. La pila en la CPU terica: Tamao: Viene definido por la directiva .PILA [tamao]. Si no se indica es de 256 posiciones. Cabeza: Indica la direccin donde se ha apilado el ltimo elemento. Siempre viene indicado por el registro R7, llamado puntero de pila. Cuando la pila est vaca, R7 tiene el valor dado por la direccin de carga, el tamao de la zona de datos, de cdigo y la propia pila. R7 apuntar inicialmente a la palabra siguiente a la ltima reservada para la pila. Apilar: Instruccin PUSH. Al apilar ocurre lo siguiente: PUSH R5 R7 = R7 1 R5 -> [R7]

ww

w.

at

em

at

ic a1

.c om

ENTRADA/SALIDA
El sistema de E/S est formado por el denominado Interfaz de perifrico, de forma que cada interfaz controla un perifrico. Cada interfaz est formada por un conjunto de registros, los cuales suelen tener un tamao igual al de la palabra de la CPU. De esta forma tendremos un conjunto de posiciones de almacenamiento que comunican el interfaz con la CPU. Dos tipos de registros: De datos y de Estado y control, aunque a veces los de Estado y de control no coinciden. En la CPU terica hay un nico espacio de direcciones, con lo que las instrucciones de control del sistema E/S son las mismas que para el sistema de memoria. En otras CPUs (Intel por ej.) hay dos espacios de direcciones, uno para la memoria y otro para E/S teniendo por lo tanto otras instrucciones para manejar estos dispositivos (IN (lectura), OUT (escritura)). Para coordinar el acceso al espacio de direcciones de la memoria o al de E/S la CPU tiene una lnea que activar el espacio concreto al que queremos acceder.

El teclado:

La interfaz de teclado est mapeada en el espacio de memoria: F000, F001 Registro de datos: F000 -> 1111 0000 0000 0000 Registro de control y estado: F001 -> 1111 0000 0000 0001 El bit menos significativo se corresponde a la entrada A0, y con el poder escoger fcilmente el registro al que acceder, el de datos (A0 = 0) o el de estado y control (A0 = 1). El teclado adems tiene un buffer de pulsaciones, con una capacidad de 16 letras, donde cada una ocupa una palabra de memoria. En el byte bajo se almacena el cdigo ASCII del carcter pulsado, y en la alta su cdigo SCAN. Las pulsaciones se leen al registro de datos en el orden en el que han sido ledas, y cada vez que se lee una el resto sube una posicin. El registro de estado tiene 16 bits, pero nosotros usaremos solo 5: Bit 0: Si est a 1 se borra el primer carcter del buffer y se suben los dems. Bit 1: Si est a 1 se borra el ltimo carcter del buffer. Bit 2: Vaca el buffer.

ww w.

Cuando se pulsa una tecla del teclado se genera un cdigo SCAN de 8 bits nico para cada tecla. El cdigo incrementa en el teclado de izquierda a derecha y de arriba abajo.

M at

em at

ic

Hay dispositivos (como el de video) que comparten espacio de memoria y de E/S.

a1

.c o

Bit 3: Activa/desactiva la generacin de interrupciones. Bit 8: Estado interfaz. Esta a 1 cuando haya caracteres en el buffer.

Pantalla: Esta dividida en celdas, en cada una de las cuales se escribe un carcter. En la CPU terica ser una matriz de 8 filas y 15 columnas. La pantalla necesita 121 posiciones de memoria de las cuales 120 (8x15) son para datos. En cada posicin de memoria de video se almacena un carcter, pero manteniendo un orden. De esta forma almacenamos primero todos los caracteres de la fila superior, luego los de la siguiente, etc. Si queremos darle ciertas caractersticas al carcter, como el color o color de fondo lo debemos de indicar en el registro del carcter el cual se organiza as: R G B R G B ASCII

La interfaz del perifrico dispone de un registro de estado donde suele haber 1 bit que indica la disponibilidad del perifrico para recibir o aportar datos. Esta tcnica lee el registro de estado y comprueba el valor de dicho bit, mediante un bucle.
ww w.

Esta tcnica se basa en la existencia de una entrada de control a travs de la cual la CPU recibe peticiones de interrupcin por parte de las interfaces de los perifricos. Cuando el perifrico tiene datos se activa la lnea de interrupcin, la CPU abandona la tarea que se est llevando a cabo para ejecutar una rutina que se encarga de la generacin de la entrada y salida. La CPU consulta la lnea de peticin de interrupcin al acabar cada instruccin con la entrada de control FIN. Pero la CPU al ver activada esta lnea necesita saber que perifrico ha solicitado la interrupcin para proceder como convenga. La solucin es que todas las interfaces pidan la interrupcin a travs de la misma lnea de interrupcin, pero habr una lnea de reconocimiento de la interrupcin (INTA) que llega a todas las interfaces.

Interrupciones

at e

Sincronizacin de E/S: Muestreo

at

Los 3 primeros bits determinan el color del carcter y los 3 siguientes el del fondo. El registro de control solo tendr dos bits activos: Bit 0: Si est a 1 borra toda la pantalla, escribiendo caracteres blancos sobre fondo negro. Bit 1: Enciende o apaga la pantalla.

ic a1

.c

om

La CPU adems podr aceptar poniendo a 1 la lnea INTA, o no, segn lo vea oportuno. Si la CPU acepta la interrupcin la interfaz que la solicit pondr sobre el bus de datos un identificador el cual permitir a la CPU reconocer al perifrico y ejecutar la rutina correspondiente. Interrupciones en la CPU terica: Se realiza la identificacin mediante vectorizacin, y la prioridad se establecer mediante encadenamiento. Operaciones a realizar al ejecutar una rutina: 1. La interfaz del perifrico activa la lnea de interrupcin, INT. 2. Si la interrupcin se acepta, se activa INTA. 3. La interfaz pone en el bus de datos su identificador, en este caso, el nmero de vector de interrupcin. Dicho nmero es un ndice dentro de una tabla de vectores de interrupcin. Dicho ndice contiene la direccin de comienzo de la rutina. La tabla de vectores de interrupcin est formada por 256 palabras y se ubica en la parte ms baja de la memoria (0000 00FF).

Fase 1: Desencadenamiento de la interrupcin: El perifrico realiza peticin de interrupcin (INT=1) En el ltimo paso de ejecucin de la instruccin en curso se comprueba estado de la lnea INT. Si est a 1: o Comprobamos el valor de IF. Si es 0 rechaza la peticin y se sigue ejecutando el programa. Si es 1 se sigue con la interrupcin. La interrupcin es aceptada. Registro de estado (SR) y PC son salvados en la pila en este orden. Se notifica a la interfaz que la interrupcin fue activada activando INTA. La interfaz que solicit la interrupcin pone sobre el bus de datos un nmero de vector de interrupcin que le dio la interfaz. La CPU carga en PC el vector de interrupcin que acaba de leer, quedando preparada para ejecutar la primera instruccin de la rutina. La CPU pone IF = 0 para deshabilitar interrupciones posteriores. Fase 2: Ejecucin de la rutina y retorno Se ejecuta la rutina de servicio. El final se indica con la instruccin IRET. Se ejecuta IRET y desapila PC y SR. Adems pone IF = 1. Se contina ejecutando el programa. La unidad de control La UC en este proceso no hace nada especial. Al generar la seal FIN comprueba si la seal INT est activada y si IF est a 1. Si es as comienza a generar las seales de control correspondientes a las instrucciones de la rutina de servicio.
ww w.

at em at

ic

Fases de la interrupcin:

a1

.c om

Si no, continua generando las seales correspondientes a las instrucciones del programa. Programacin de interrupciones en la CPU terica: La rutina de interrupcin se construye como un procedimiento normal. La nica diferencia es que la rutina acaba con la instruccin IRET en lugar de RET como el procedimiento. Por instalar una rutina de servicios simplemente debemos almacenar en un vector de interrupcin la direccin de dicha rutina. Notas pantalla: Cuando vamos a escribir un dato en pantalla, por ej. Lo metemos as en R1: MOVL R1, 47h MOVH R1, 14h R1 = 1447h La parte baja (47) recordar que representa el cdigo ASCII del carcter a escribir. La parte alta contendr la informacin de color y dems.

Notas interrupciones: IF = 1 se acepta interrupcin. Cuando se activa INTA se pone sobre el bus de datos el nmero que identifica a la interrupcin: El vector de interrupcin. A continuacin cuando se produzca el READ dicho nmero estar en el bus de direcciones y en el de datos aparecer la direccin de memoria donde comienza la rutina de servicio asociada a la interrupcin producida. Cuando nos piden el valor de PC al concluir la instruccin IRET de la rutina de tratamiento hay que recordar que cuando se produce la interrupcin se apila el valor de PC para recuperarlo despus. Ver ejer 141 pag 255/256. Notas programacin en ensamblador de la CPU elemental: Sobre los pasos/ciclos de una instruccin debemos tener en cuenta lo siguiente: En el paso 1 ni PC ni IR estn actualizados. En el paso 2 se actualiza PC con el valor de la siguiente instruccin a ejecutar. En el paso 3 se actualiza IR con el valor de la instruccin en curso.

ww

MOV [R0], R1 y sabemos que R0 es por ej. 8582h, esa es una parte de donde est mapeada la interfaz de video pero para saber donde est mapeada (es decir, donde empieza), hay que mirar en que posicin se ha escrito previamente. Si nos dicen: 1 fila, 3 columna (8582), la direccin inicial ser: 8580 -> 1, 8581 -> 2, 8582 -> 3.
w.

at

em

at

ic a

Importante tener cuidado con el enunciado cuando te piden la direccin donde est mapeada la memoria de video, dado que si vemos algo tal que:

1 .c

om

Teniendo en cuenta esto hay que tener cuidado cuando nos preguntan en que paso de la instruccin actual nos encontramos. Por defecto miraramos IR para ver la instruccin que se est ejecutando, pero teniendo en cuenta lo anterior podramos estar ya en otra instruccin y que IR no se haya actualizado. Por lo tanto debemos mirar tambin los posibles valores de PC y analizar para asegurarnos de que todo est correcto. Notas funcionamiento pila: La memoria se organiza as en un programa: 0000 DATOS -

CDIGO

PILA

P I L A P I L A P I L FFFF

Al insertar (PUSH) un elemento, apilamos. Ej.: Pila Vaca: Cabeza: FFFF _____ Push X: Cabeza: FFFE Push Y: Cabeza: FFFD Push Z: Cabeza: FFFC
X Y X Z Y X

ww

w.

at

CDIGO

em

EEEE

at

ic

Visto de cerca la pila:

a1

.c om

FFFF

Como vemos la cabeza al insertar va hacia posiciones de memoria MAS BAJAS (FFFC < FFFD < FFFE < FFFF). Al sacar elementos (POP) ocurre lo siguiente:
Y X

POP (Obtenemos Z): Cabeza: FFFD POP (Obtenemos Y): Cabeza: FFFE

POP (Obtenemos X): Cabeza: FFFF (Pila Vaca) Recordar que en FFFF no se almacenara nada, dado que al ser la cabeza inicialmente, cuando empezamos a apilar hacemos R7 = R7-1 con lo cual esa posicin solo marca el inicio de pila. Recordar que SIEMPRE las ltimas instrucciones de un procedimiento son RET y FINP. Tras una llamada a un procedimiento (CALL) es necesario destruir los posibles parmetros que se le hayan pasado como parmetro a travs de la pila. Para ello procederemos incrementando R7 (INC R7) tantas veces como parmetros hayamos apilado. En la pila, recordar que si nos dicen que la cabeza de la pila, apuntada por R7 es por ej.: 04Ah, esa posicin no almacenar datos porque al apilar hacemos R7 = R7-1 antes de almacenar, por lo tanto a la hora de contar el tamao, esa posicin no la incluiremos. Al hacer un MOVH/MOVL Rx, BYTE[ALTO | BAJO] DIRECCION Z metemos la direccin de la primera posicin de esa lista/array (en caso de ser lista o array). Si es un registro, la direccin de dicho registro. Importante: Cuando nos preguntan sobre el valor de R7 o temas relacionados con la pila y se est ejecutando un CALL es MUY importante saber en que paso est ese CALL ya que como CALL apila PC y SR el valor de R7 y por lo tanto de la pila puede variar. Si es el paso 3 por ejemplo, CALL an no ha apilado PC y SR. Recordar siempre que al apilar primero se decrementa R7 y luego se almacena.
ww w.

at

em

at

ic

a1

.c o

Você também pode gostar