Ese instructivo es un poco confuso. Será mejor que seleccione un libro real de la gran lista .
Sin entrar en una discusión sobre varias arquitecturas que simplemente conducirían por el agujero del conejo, usaré la arquitectura descrita en el instructivo y trabajaré con un ejemplo de un programa de adición simple.
A continuación se muestra la memoria RAM como se describe. A la izquierda están las 16 direcciones. Cada dirección contiene un byte. Este byte puede ser datos (demarcados como D
) o una instrucción que consiste en un código de operación ( O
) y una dirección ( A
).
1111 DDDDDDDD
1110 DDDDDDDD
1101 DDDDDDDD
1100 DDDDDDDD
1011 DDDDDDDD
1010 DDDDDDDD
1001 DDDDDDDD
1000 DDDDDDDD
0111 OOOOAAAA
0110 OOOOAAAA
0101 OOOOAAAA
0100 OOOOAAAA
0011 OOOOAAAA
0010 OOOOAAAA
0001 OOOOAAAA
0000 OOOOAAAA
El contador de programa (PC) comienza en cero. Esto le indica al procesador que obtenga el byte en la dirección 0000
de la RAM y lo trate como una instrucción. Por lo tanto, el procesador obtiene el byte en el registro de instrucciones (IR). Los cuatro bits superiores de los datos recuperados van a la "matriz de control" y los cuatro bits inferiores al MAR. Esta división ocurre cada vez que se busca una instrucción.
Nota: esos términos en particular no son lo que yo consideraría típicos (al menos en mi experiencia) pero los usaremos para este ejemplo.
El procesador obtiene la instrucción en la dirección 0000
desde PC = 0000
. Nuestro primer código de operación dirá, "mueva los datos que están en la dirección 1000
al acumulador" (usaré prosa en lugar de confundir las cosas seleccionando un sabor particular del lenguaje ensamblador).
Así que el procesador obtiene los datos en la dirección 1000
(digamos que es el número 2) y los mueve al acumulador (ACC). Ahora ACC = 2. El contador del programa se incrementa automáticamente, por lo que PC = 0001
.
La siguiente instrucción en la dirección 0001
dice: "agregue los datos que están en el acumulador a los datos en la dirección 1001
y guárdelos nuevamente en el acumulador". Así que el procesador toma lo que está en el acumulador y lo alimenta en un lado de la Unidad de lógica aritmética (ALU). El procesador toma los datos que están en la dirección 1001
(digamos que es el número 3) y los introduce en la otra mitad de la ALU. La ALU realiza la adición de los dos números y la salida (el número 5) se almacena en el acumulador. Ahora ACC = 5. El contador del programa nuevamente se incrementa automáticamente, por lo que PC = 0010
.
La última instrucción de nuestro pequeño programa en la dirección 0010
dice: "almacena lo que hay en el acumulador en la dirección 1010
". El procesador toma lo que está en el acumulador y lo almacena en la dirección 1010
. Así que ahora la dirección RAM 1010
= 5.
Esperemos que el ejemplo sea un poco más claro de lo que está pasando. Varias arquitecturas manejan las cosas de formas ligeramente diferentes. Pero el flujo básico suele ser similar.
A continuación se muestra un diagrama de los registros básicos y los circuitos de control de la mayoría de los procesadores. Hay algunos registros más de los que hemos estado discutiendo. Puede ignorarlos por el momento para los fines de esta discusión o leer más sobre ellos en su tiempo libre. Esperemos que la ayuda visual ayude a aclarar un poco las cosas.
A continuación se muestra el flujo de cada paso que toma un procesador. Primero obtiene una instrucción y luego esa instrucción le dice que extraiga datos para operar desde la RAM.
Step 1. [Address] PC -> MAR -> RAM
Step 2. [Instruction] RAM -> MDR -> IR
Step 3. [Address] IR -> MAR -> RAM
Step 4. [Data] RAM -> MDR -> ACC (or R0, etc.)