Visualizando el flujo de instrucción de diferentes arquitecturas
Arquitectura de von Neumann original
El computador IAS (Institute for Advanced Study) fue una de las primeras computadoras electrónicas de almacenamiento de programas, diseñada por John von Neumann.
Modelo teórico de arquitectura
Una representación conceptual de la arquitectura de von Neumann que ilustra los componentes fundamentales y el flujo de datos en una computadora de programa almacenado.
Visualizando el ciclo de búsqueda-ejecución de la arquitectura IAS
Instrucción Izquierda (20 bits):
Código de operación (8 bits) | Dirección (12 bits)
Instrucción Derecha (20 bits):
Código de operación (8 bits) | Dirección (12 bits)
Cada palabra de memoria contiene 40 bits: dos instrucciones de 20 bits o un número de 40 bits
Direcciones de Memoria:
Las direcciones se representan con el prefijo 0x para indicar una notación de memoria "realista". Por ejemplo: 0x100 representa una dirección X en decimal.
Registros Principales:
PC - Program Counter (Contador de Programa)
MAR - Memory Address Register (Registro de Dirección de Memoria)
MBR - Memory Buffer Register (Registro Buffer de Memoria)
IR - Instruction Register (Registro de Instrucción)
IBR - Instruction Buffer Register (Registro Buffer de Instrucción)
AC - Accumulator (Acumulador)
MQ - Multiplier-Quotient (Multiplicador-Cociente)
Notación de Memoria:
M(X) representa el contenido almacenado en la dirección de memoria X.
Por ejemplo: M(0x200) se refiere al dato almacenado en la dirección 0x200.
Flujo de Datos:
La flecha → indica la dirección del flujo de datos.
Ejemplo: PC → MAR significa que el contenido de PC se transfiere a MAR.
| LOAD(00000001) MQ | Transfiere contenido del registro MQ al acumulador AC |
| LOAD(00000001) MQ,M(X) | Transfiere contenido de memoria M(X) al registro MQ |
| STOR(00100001) M(X) | Almacena contenido del acumulador AC en memoria M(X) |
| LOAD(00000001) M(X) | Transfiere contenido de memoria M(X) al acumulador AC |
| LOAD -M(X) | Transfiere contenido negativo de memoria M(X) al AC |
| LOAD |M(X)| | Transfiere valor absoluto de memoria M(X) al AC |
| LOAD -|M(X)| | Transfiere valor absoluto negativo de memoria M(X) al AC |
| JUMP M(X,0:19) | Salta a la instrucción izquierda en memoria M(X) |
| JUMP M(X,20:39) | Salta a la instrucción derecha en memoria M(X) |
| JUMP + M(X,0:19) | Si AC ≥ 0, salta a instrucción izquierda en M(X) |
| JUMP + M(X,20:39) | Si AC ≥ 0, salta a instrucción derecha en M(X) |
| ADD(00000101) M(X) | Suma contenido de memoria M(X) al acumulador AC |
| ADD |M(X)| | Suma valor absoluto de memoria M(X) al AC |
| SUB(00000110) M(X) | Resta contenido de memoria M(X) del acumulador AC |
| SUB |M(X)| | Resta valor absoluto de memoria M(X) del AC |
| MUL M(X) | Multiplica AC por memoria M(X), resultado en MQ y AC |
| DIV M(X) | Divide AC por memoria M(X), cociente en MQ, resto en AC |
| LSH | Desplaza acumulador AC una posición a la izquierda |
| RSH | Desplaza acumulador AC una posición a la derecha |
| STOR(00100001) M(X,8:19) | Almacena bits 8-19 del AC en memoria M(X) |
| STOR(00100001) M(X,28:39) | Almacena bits 28-39 del AC en memoria M(X) |
Nota: M(X) representa la ubicación de memoria en la dirección X. Los registros principales son AC (Acumulador) y MQ (Multiplicador-Cociente).
Carga un número, suma otro y almacena el resultado
Carga un número, resta otro y almacena el resultado
Suma tres números y almacena el total
Visualizando el flujo de instrucción de la arquitectura de von Neumann
La arquitectura de von Neumann se basa en un concepto de programa almacenado donde:
Direcciones de Memoria:
Las direcciones se representan con el prefijo 0x para indicar una notación de memoria. Por ejemplo: 0x100 representa una dirección en memoria.
Registros Principales:
PC - Program Counter (Contador de Programa)
MAR - Memory Address Register (Registro de Dirección de Memoria)
MDR - Memory Data Register (Registro de Datos de Memoria)
IR - Instruction Register (Registro de Instrucción)
AC - Accumulator (Acumulador)
Notación de Memoria:
M[X] representa el contenido almacenado en la dirección de memoria X.
Por ejemplo: M[0x200] se refiere al dato almacenado en la dirección 0x200.
Flujo de Datos:
La flecha → indica la dirección del flujo de datos.
Ejemplo: PC → MAR significa que el contenido de PC se transfiere a MAR.
| LOAD M[X] | Carga el contenido de M[X] en el acumulador |
| STORE M[X] | Almacena el contenido del acumulador en M[X] |
| MOVE X, Y | Transfiere el contenido del registro X al registro Y |
| ADD M[X] | Suma el contenido de M[X] al acumulador |
| SUB M[X] | Resta el contenido de M[X] del acumulador |
| INC X | Incrementa el contenido del registro X en 1 |
| JMP X | Salta incondicionalmente a la dirección X |
| JZ X | Salta a X si el acumulador es cero |
| JN X | Salta a X si el acumulador es negativo |
| IN | Lee un dato desde un dispositivo de entrada al acumulador |
| OUT | Envía el contenido del acumulador a un dispositivo de salida |
Nota: Esta es una representación simplificada de las instrucciones típicas en una arquitectura de von Neumann.
Carga dos números, los suma y almacena el resultado
Implementa un bucle que cuenta de 1 a 5
Suma los elementos de un array de 4 números