Arquitectura de Computadoras |
Resumen: La Máquina |
1° Cuat. de 2007 | Altillo.com |
LA MAQUINA
(Esquema)
Los componentes fundamentales de una máquina son los siguientes:
Siendo los mismos:
U.A.L. Unidad de Aritmética y Lógica (Unidad Aritmético-Lógica):
En ella se realizan todas las operaciones aritméticas, dejando indicadas las características del resultado.
Reg. ACUMULADOR: A través de este registro se ingresan los datos y se recuperan los resultados.
Reg. ESTADO: Está compuesto por un conjunto de indicadores (flags) que informan sobre las características del resultado de la última operación.
FLAGS:
Z 0 El valor en el Reg. ACUMULADOR es distinto de cero
1 El valor en el Reg. ACUMULADOR es cero
N 0 El valor en el Reg. ACUMULADOR es positivo
1 El valor en el Reg. ACUMULADOR es negativo
O 0 El resultado de la última operación fue correcto
1 El resultado de la última operación arrojó OVERFLOW
C 0 En la última operación no se produjo acarreo (carry) hacia la posición de signo
1 En la última operación se produjo acarreo (carry) hacia la posición de signo
U.C. (Unidad de Control):
Es la encargada de controlar y organizar todo el funcionamiento de la máquina.
Sus componentes internos son:
S.I. / D.I. (Secuenciador o Decodificador de Instrucciones)
Realiza todas las tareas necesarias para el funcionamiento coordinado de todo el computador.
Analiza y ejecuta las instrucciones de acuerdo a su Código de Operación.
R. INSTRUCCIONES (Registro de Instucciones)
Almacena la Instrucción Elemental a ejecutar.
Es la puerta de entrada al S.I.
R.P.I. (Registro de Próxima Instrucción)
En este registro se almacena (permanentemente) la dirección de la próxima Instrucción Elemental a ejecutar. Se actualiza instrucción a instrucción.
Memoria (Memoria Principal):
En ella se almacenan los Programas (Datos e Instrucciones Elementales que los conforman)
R.S.M. (Registro de Selección de Memoria):
Almacena la dirección de memoria a la que se desea acceder.
R.P. / R.M. (Registro de Palabra o Registro de Memoria):
En las operaciones de lectura de memoria recibe el contenido de la celda leída.
En las operaciones de escritura de memoria su contenido se transferirá a la celda seleccionada.
Canal de E / S (Canal de Entrada / Salida)
Se encarga de la comunicación con los preriféricos (comunicación con el exterior).
Tiene acceso directo a memoria.
BUSES:
Son líneas de comunicación entre dispositivos. Unen Registros.
La cantidad de “hilos” indica la cantidad de bits que se pueden transmitir por medio del Bus.
Por cada “hilo” se transmite un bit de un Registro a otro.
BUS DE DIRECCIONES:
Es la línea de comunicación entre el Registro de Instrucciones, el Registro de Próxima Instrucción y el Registro de Selección de Memoria.
Los datos que se transmiten a través de él son direcciones.
BUS DE DATOS:
Es la línea que comunica el Registro de Palabra (o Registro de Memoria) con el Registro de Instrucción y el Registro ACUMULADOR.
Los datos que se transmiten a través de él son Instrucciones o Valores.
Estos Valores se transmiten para operar en la A.L.U. o para almacenarlos en Memoria.
FASE DE BUSQUEDA DE UNA INSTRUCCIÓN ELEMENTAL
La Fase de Búsqueda de una Instrucción Elemental comienza cuando termina la ejecución de la instrucción anterior.
Durante esta fase se ejecutan las
siguientes tareas:
1 – El contenido del R.P.I. (que contiene la dirección en memoria de la instrucción que queremos ejecutar) se copia al R.S.M. a través del Bus de Direcciones.
2 – El R.S.M. selecciona la celda a leer
3 – El S.I. o D.I. imparte la orden de lectura, llevándose el contenido de la celda direccionada al R.P.
4 – El contenido del R.P. o R.M. se lleva al R.I. a través del Bus de Datos.
Con estos cuatro pasos se completa la Fase de Búsqueda.
FASE DE INCREMENTO
El contenido del R.P.I. se incrementa para que su valor coincida con la dirección en memoria de la próxima instrucción a ejecutar.
Simultáneamente se lleva a cabo la Fase de Ejecución de la Instrucción Elemental recién leída.
FASE DE EJECUCIÓN DE INSTRUCCIONES ELEMENTALES
Cada Instrucción Elemental realiza los pasos necesarios para lograr su cometido, por eso no se puede concebir como una secuencia igual para cada una.
A continuación iremos mostrando los pasos necesarios para la ejecución de algunas Instrucciones Elementales diseñadas para realizar prácticas sobre este tipo de máquina y comprender la circulación de datos, instrucciones y direcciones dentro del procesador.
CAR (d) (Direccionamiento Directo)
Esta instrucción se utiliza para reemplazar el contenido del Registro Acumulador (A.L.U.) por un valor almacenado en la Memoria en la dirección “d”.
Los pasos a realizar son los siguientes:
1 – El operando (dirección “d”) de la instrucción se lleva al R.S.M. a través del Bus de Direcciones.
2 – El R.S.M. selecciona la celda a leer
3 – El S.I. o D.I. imparte la orden de lectura, llevándose el contenido de la celda direccionada al R.P.
4 – El contenido del R.P. o R.M. se lleva al R. Acumulador a través del Bus de Datos.
Con estos cuatro pasos se completa la Fase de Ejecución de la instrucción CAR (d)
CAR n (Direccionamiento Inmediato)
Esta instrucción se utiliza para reemplazar el contenido del Registro Acumulador (A.L.U.) por un valor contenido en la Instrucción Elemental como operando.
El paso a realizar es el siguiente:
1 – El operando (valor “n”) de la instrucción se lleva al R. Acumulador a través del Bus de Datos.
Con este único paso se completa la Fase de Ejecución de la instrucción CAR n
ALM (d) (Direccionamiento Directo)
Esta instrucción se utiliza para almacenar en la dirección “d” de Memoria el contenido del R. Acumulador.
Los pasos a realizar son los siguientes:
1 – El operando (dirección “d”) de la instrucción se lleva al R.S.M. a través del Bus de Direcciones.
2 – El R.S.M. selecciona la celda a leer
4 – El contenido del R. Acumulador se lleva al R.P. o R.M. a través del Bus de Datos.
3 – El S.I. o D.I. imparte la orden de escritura, llevándose el contenido del R.P. a la celda direccionada.
Con estos cuatro pasos se completa la Fase de Ejecución de la instrucción CAR (d)
SUM (d) (Direccionamiento Directo)
Esta instrucción se utiliza para sumar el contenido de la dirección de Memoria “d” en el Registro Acumulador.
Los pasos a realizar son los siguientes:
1 – El operando (dirección “d”) de la instrucción se lleva al R.S.M. a través del Bus de Direcciones.
2 – El R.S.M. selecciona la celda a leer
3 – El S.I. o D.I. imparte la orden de lectura, llevándose el contenido de la celda direccionada al R.P.
4 – El contenido del R.P. o R.M. se lleva (sumando) al R. Acumulador a través del Bus de Datos.
Con estos cuatro pasos se completa la Fase de Ejecución de la instrucción SUM (d)
SUM n (Direccionamiento Inmediato)
Esta instrucción se utiliza para sumar en el Registro Acumulador (A.L.U.) un valor contenido en la Instrucción Elemental como operando.
El paso a realizar es el siguiente:
1 – El operando (valor “n”) de la instrucción se lleva (sumando) al R. Acumulador a través del Bus de Datos.
Con este único paso se completa la Fase de Ejecución de la instrucción SUM n
RES (d) (Direccionamiento Directo)
Esta instrucción se utiliza para restar el contenido de la dirección de Memoria “d” en el Registro Acumulador.
Los pasos son los mismos que la instrucción SUM (d), excepto que el valor se resta del Registro Acumulador.
RES n (Direccionamiento Inmediato)
Esta instrucción se utiliza para restar en el Registro Acumulador (A.L.U.) un valor contenido en la Instrucción Elemental como operando.
Los pasos son los mismos que la instrucción SUM n, excepto que el valor se resta del Registro Acumulador.
MUL (d) (Direccionamiento Directo)
Esta instrucción se utiliza para multiplicar el contenido de la dirección de Memoria “d” en el Registro Acumulador.
Los pasos son los mismos que la instrucción SUM (d), excepto que el valor se multiplica por el contenido del Registro Acumulador.
MUL n (Direccionamiento Inmediato)
Esta instrucción se utiliza para multiplicar en el Registro Acumulador (A.L.U.) un valor contenido en la Instrucción Elemental como operando.
Los pasos son los mismos que la instrucción SUM n, excepto que el valor se multiplica por el contenido del Registro Acumulador.
DIV (d) (Direccionamiento Directo)
Esta instrucción se utiliza para dividir por el contenido de la dirección de Memoria “d” el contenido del Registro Acumulador.
Los pasos son los mismos que la instrucción SUM (d), excepto que el valor divide el contenido del Registro Acumulador.
DIV n (Direccionamiento Inmediato)
Esta instrucción se utiliza para dividir por el valor “n” (incluído en la Instrucción Elemental como operando) el contenido del Registro Acumulador (A.L.U.).
Los pasos son los mismos que la instrucción SUM n, excepto que el valor divide el contenido del Registro Acumulador.
LEE (d) (Direccionamiento Directo)
Esta instrucción realiza una lectura de un Periférico de Entrada y almacena el valor leído en la dirección de Memoria “d”.
Los pasos a realizar son los siguientes:
1 – El operando (dirección “d”) de la instrucción se lleva al R.S.M. a través del Bus de Direcciones.
2 – El R.S.M. selecciona la celda a leer
3 – El S.I. o D.I. imparte la orden de lectura del Periférico, llevándose el valor leído al R.P.
4 – El S.I. o D.I. imparte la orden de escritura, llevándose el contenido del R.P. a la celda direccionada (dirección “d”).
Con estos cuatro pasos se completa la Fase de Ejecución de la instrucción LEE (d)
IMP (d) (Direccionamiento Directo)
Esta instrucción realiza una impresión en un Periférico de Salida tomando el valor a mostrar de la dirección de Memoria “d”.
Los pasos a realizar son los siguientes:
1 – El operando (dirección “d”) de la instrucción se lleva al R.S.M. a través del Bus de Direcciones.
2 – El R.S.M. selecciona la celda a leer
3 – El S.I. o D.I. imparte la orden de lectura, llevándose el valor leído al R.P.
4 – El S.I. o D.I. imparte la orden de escritura, llevándose el contenido del R.P. al Periférico de Salida.
Con estos cuatro pasos se completa la Fase de Ejecución de la instrucción LEE (d)
Salto incondicional
Cada vez que se ejecuta esta instrucción se produce el salto.
IR (d) (Direccionamiento Directo)
Esta instrucción permite romper la secuencia de ejecución, de forma tal que la siguiente instrucción se tomará de la dirección “d” informada como operando
El paso a realizar es el siguiente:
1 – El operando (valor “d”) de la instrucción se lleva al R.P.I. a través del Bus de Direcciones.
Con este único paso se completa la Fase de Ejecución de la instrucción IR (d)
NOTA: A pesar de la simultaneidad de ejecución de las fases de Incremento y Análisis y Ejecución, la Fase de Incremento termina antes que se haga el reemplazo de valor en el R.P.I. por lo que el R.P.I. cambia primero de valor en la Fase de Incremento, que luego es reemplazado por la dirección informada como operando de la instrucción “d”.
Saltos condicionales
Estos saltos se producen solo si se cumple una determinada condición (verificada en el Registro de Estado de la U.A.L.)
SI0 (d) (Direccionamiento Directo)
La U.C. verifica el flan de cero (Z) del Registro de Estado (U.A.L.).
Se produce el salto si el contenido del R. Acumulador es igual a cero (Flag Z = 1)
Si el contenido del R. Acumulador es distinto de cero (Flag Z = 0), se da por terminada la ejecución de la instrucción sin producirse alteración alguna en el contenido del R.P.I.
Los pasos a realizar son los siguientes:
1 – El S.I. o D.I. verifica el valor del Flag Z del Registro de Estado (A.L.U.)
Si el Flag Z tiene valor 0 (cero) el contenido del R. Acumulador es distinto de cero.
En ese caso el S.I. o D.I. da por finalizada la ejecución de la instrucción.
Si el Flag Z tiene valor 1 (uno) el contenido del R. Acumulador es igual a cero.
En ese caso el S.I. o D.I. procede a la ejecución del paso 2.
2 – El operando (dirección “d”) de la instrucción se lleva al R.P.I. a través del Bus de Direcciones.
Con uno o dos pasos (según corresponda) se completa la Fase de Ejecución de la instrucción SI0 (d)
Saltos con Retorno (Subrutinas)
Estos saltos permiten ejecutar una secuencia de código y volver ejecutando a partir de la instrucción siguiente a la de Salto con Retorno.
Para poder realizar esta tarea, es necesario guardar la dirección de la siguiente instrucción para conocer el lugar a donde se debe regresar.
Esto se realiza tomando el contenido del R.P.I. luego de la Fase de Incremento (recordar que esta fase termina antes del reemplazo del contenido del R.P.I. por el operando de la instrucción de salto).
El tomar el valor del R.P.I. luego de la Fase de Incremento nos asegura que el valor tomado será la dirección de la siguiente instrucción en secuencia.
La dirección de la siguiente instrucción se guarda temporalmente en una zona de memoria llamada PILA que no es mas que un espacio o conjunto de celdas reservada para este uso específico.
STACK
La PILA funciona de la siguiente manera:
La dirección inicial de la PILA se guarda en un Registro llamado Stack Pointer. A medida que se incorporan datos, el puntero cambia de valor apuntando a la dirección del último dato incorporado. Este incremento lo realiza directamente el S.I. o D.I. sobre el Registro Puntero de la Pila.
Este tipo de almacenamiento temporal se denomina L.I.F.O.(Last Input First Output), ya que cuando queramos recuperar datos, debemos ir retirando de la pila los últimos ingresados para acceder a los primeros. A medida que quitamos datos de la pila, el S.I. o D.I. corrige o actualiza el valor del Registro Puntero de la Pila.
SUB (d) (Direccionamiento Directo)
Esta instrucción permite realizar un salto a una dirección donde hay un conjunto de instrucciones o Subrutina que se ejecutarán desde distintos sitios del programa, debiendo regresar al sitio inmediato al que produjo el salto. Es decir que se ejecutarán las instrucciones como si las mismas estuvieran insertas entre la dirección de la instrucción SUB (d) y la instrucción que le sigue. Al deber ejecutarse desde distintas partes del código, se las separa y se las trata como una unidad llamada Subrutina.
Los pasos a realizar son los siguientes:
1 – El contenido del R.P.I. (ya actualizado por haber concluido la Fase de Incremento), es llevado por el S.I. o D.I. al R.P. o R.M.
2 – El contenido del Registro Puntero de la Pila es llevado por el S.I. o D.I. al R.S.M.
3 – El R.S.M. selecciona la primera celda libre de la PILA
4 – El S.I. o D.I. imparte una orden de escritura en Memoria (en este caso en la PILA)
5 – El operando (dirección “d”) de la instrucción se lleva al R.S.M. a través del Bus de Direcciones.
Con estos cinco pasos se completa la Fase de Ejecución de la instrucción SUB (d)
RET
Esta instrucción (que no tiene operando explícito), toma el último valor almacenado en la PILA y lo lleva al R.P.I. Funciona como un salto del tipo IR (d), solo que la dirección de salto la tomará de la PILA donde la almacenó la instrucción SUB (d).
El objetivo de su ejecución es regresar de una Subrutina a la dirección de la instrucción siguiente a la SUB (d) que la llamó.
Los pasos a realizar son los siguientes:
1 – El contenido del Registro Puntero de la Pila es llevado por el S.I. o D.I. al R.S.M.
2 – El R.S.M. selecciona la ultima celda cargada de la PILA
3 – El S.I. o D.I. imparte una orden de lectura en Memoria (en este caso de la PILA)
4 – El contenido del R.P. o R.M. se lleva al R.P.I.
Con estos cuatro pasos se completa la Fase de Ejecución de la instrucción RET.
FIN
Con esta instrucción se da por terminada normalmente la ejecución del programa.