Un intenso intercambio de conocimientos sobre CPU

        Ya sea que juegues con hardware o software, tu mundo no puede prescindir del núcleo de la computadora: la CPU.

 

01 ¿Qué es una CPU?

La relación entre la CPU y la computadora equivale a la relación entre el cerebro y el ser humano: es un pequeño chip de computadora, generalmente integrado en la placa base de la computadora.

Las CPU se construyen colocando miles de millones de pequeños transistores en un solo chip de computadora.

Estos transistores le permiten realizar los cálculos necesarios para ejecutar programas almacenados en la memoria del sistema, por lo que también se puede decir que la CPU determina la potencia informática de su computadora.

02 ¿Qué hace realmente la CPU?

La esencia del trabajo de una CPU es recibir instrucciones de un programa o aplicación y realizar cálculos.

Hay tres etapas clave en este proceso: buscar, decodificar y ejecutar.

La CPU primero recupera la instrucción de la RAM del sistema, luego decodifica el contenido real de la instrucción y finalmente ejecuta la instrucción mediante la parte relevante de la CPU.

03 ¿Cuál es la estructura interna de la CPU?

Acabo de mencionar la importancia de muchas CPU, entonces, ¿cuál es la estructura interna de la CPU? ¿Y de qué está hecho?

La siguiente figura muestra el proceso de ejecución de un programa general (tomando el lenguaje C como ejemplo). En términos generales, comprender el proceso de ejecución de un programa es la base y el requisito previo para dominar el mecanismo operativo de un programa.

imagen

En este proceso, la CPU se encarga de interpretar y ejecutar el contenido que finalmente se convierte a lenguaje de máquina. La CPU se compone principalmente de dos partes: la unidad de control y la unidad aritmético lógica (ALU).

  • Unidad de control: extraer instrucciones de la memoria y decodificarlas y ejecutarlas;

  • Unidad Lógica Aritmética (ALU): Maneja operaciones aritméticas y lógicas.

Tanto la CPU como la memoria son componentes electrónicos formados por muchos transistores, que pueden compararse con el corazón y el cerebro de una computadora.

Recibe entrada de datos, ejecuta instrucciones y procesa información relacionada, y se comunica con dispositivos de entrada/salida (E/S) que envían y reciben datos hacia y desde la CPU.

Desde un punto de vista funcional, el contenido de la CPU se compone de cuatro partes: registros, controladores, unidades aritméticas y relojes, y las distintas partes están conectadas mediante señales eléctricas.

A continuación, presentemos brevemente la memoria: ¿por qué necesitamos hablar de memoria cuando hablamos de CPU?

Debido a que la memoria es un puente para comunicarse con la CPU, todos los programas de la computadora se ejecutan en la memoria.

La memoria generalmente se denomina memoria principal y su función es almacenar los datos de cálculo en la CPU y los datos intercambiados con dispositivos de almacenamiento externos como los discos duros.

Cuando la computadora está en funcionamiento, la CPU transfiere los datos que deben calcularse a la memoria principal para su cálculo.

Una vez completada la operación, la CPU transmite el resultado y el funcionamiento de la memoria principal también determina el funcionamiento estable de la computadora.

La memoria principal generalmente está conectada a la CPU a través del chip de control y está compuesta de elementos legibles y escribibles, y cada byte tiene un número de dirección.

La CPU lee datos e instrucciones de la memoria principal a través de la dirección y también puede escribir datos según la dirección. Nota: cuando la computadora está apagada, las instrucciones y los datos de la memoria también se borrarán.

04 ¿La CPU es una colección de registros?

Entre las cuatro estructuras de la CPU, la importancia de los registros es mucho mayor que la de las otras tres, ¿por qué dices eso? Porque los programas suelen describir los registros como objetos.

Cuando se trata de registros, hay que hablar de lenguaje ensamblador, y cuando se habla de lenguaje ensamblador, hay que hablar de lenguajes de alto nivel, y cuando se habla de lenguajes de alto nivel, hay que mencionar el concepto de lenguaje. .

05 lenguaje informático

El medio de comunicación más antiguo y directo entre las personas es el lenguaje, pero para comunicarse con las computadoras, deben intercambiar según instrucciones de la computadora, lo que implica problemas de lenguaje.

Al principio, para resolver el problema de la comunicación entre computadoras y humanos, apareció el lenguaje ensamblador.

Sin embargo, el lenguaje ensamblador es difícil de entender, por lo que han aparecido lenguajes de alto nivel como C, C++ y Java, por lo que los lenguajes de computadora generalmente se dividen en lenguajes de bajo nivel y lenguajes de alto nivel. .

Un programa escrito en un lenguaje de alto nivel solo se puede ejecutar después de haber sido compilado y convertido a lenguaje de máquina, mientras que el lenguaje ensamblador solo se puede convertir a lenguaje de máquina a través de un ensamblador.

06 lenguaje ensamblador

Primero veamos una lista de código expresada en lenguaje ensamblador:

imagen

Esto es parte de escribir programas en lenguaje ensamblador, que utiliza mnemónicos para escribir programas, y cada instrucción en lenguaje de máquina que originalmente es una señal eléctrica tiene un mnemónico correspondiente.

Por ejemplo, mov y add son abreviaturas de almacenamiento de datos (mover) y suma (adición).

El lenguaje ensamblador y el lenguaje máquina se corresponden uno a uno, lo cual es diferente de los lenguajes de alto nivel. Generalmente convertimos programas escritos en lenguaje ensamblador a lenguaje máquina, que se llama ensamblador.

Por el contrario, el proceso de convertir el lenguaje de máquina en lenguaje ensamblador se llama desensamblado.

El lenguaje ensamblador puede ayudarlo a comprender lo que hace la computadora. Los programas en el nivel del lenguaje de máquina se procesan a través de registros. Eax y ebp en el código anterior son registros, que son los nombres de los registros internos de la CPU.

Por tanto, se puede decir que la CPU es una colección de registros.

Generalmente, el almacenamiento en la memoria está representado por el número de dirección y el tipo de registro se distingue por el nombre.

Para esos diferentes tipos de CPU, el tipo y número de registros internos y el rango de valores almacenados en los registros también son diferentes.

Sin embargo, según diferentes funciones, podemos dividir los registros en las siguientes categorías:

imagen

Entre ellos, solo hay un contador de programa, un registro de bandera, un registro de acumulación, un registro de instrucciones y un registro de pila, y generalmente hay varios otros registros.

07 contador de programas

El contador de programa se utiliza para almacenar la dirección de la unidad donde se encuentra la siguiente instrucción.

Cuando se ejecuta el programa, el valor inicial de la PC se utiliza como la dirección de la primera instrucción del programa. Cuando el programa se ejecuta secuencialmente, el controlador primero recupera una instrucción de la memoria de acuerdo con la dirección de instrucción indicada por el programa. contador, y luego analiza y ejecuta la instrucción. Y al mismo tiempo, suma 1 al valor de PC para señalar la siguiente instrucción a ejecutar.

Podemos observar más de cerca el proceso de ejecución del contador del programa a través de un ejemplo:

imagen

Esta es una operación de suma: cuando se inicia el programa, después de compilar y analizar, el programa en el disco duro se copiará a la memoria a través del sistema operativo.

El programa de muestra anterior consiste en sumar 123 y 456 y luego mostrar el resultado en la pantalla. Debido a que es difícil de describir en lenguaje de máquina, estos son los resultados traducidos.

De hecho, cada instrucción y datos pueden estar distribuidos en diferentes direcciones, pero para una mejor ilustración, la memoria y los datos que componen una instrucción se colocan en una dirección de memoria.

La dirección 0100 es la posición inicial del programa. Después de que Windows y otros sistemas operativos copien el programa desde el disco duro a la memoria, establecerá el contador del programa como la posición inicial 0100 y luego ejecutará el programa. Después de ejecutar cada instrucción , el programa El valor del contador aumentará en 1 o apuntará directamente a la dirección de la siguiente instrucción.

Posteriormente, la CPU leerá el comando de la memoria y lo ejecutará de acuerdo con el valor del contador del programa, es decir, el contador del programa controla el flujo del programa.

08 Mecanismo de bucle y rama condicional

Todos los amigos han aprendido lenguajes de alto nivel. Los procesos de control condicional resumidos en lenguajes de alto nivel se dividen principalmente en tres tipos: ejecución secuencial, bifurcación condicional y juicio de bucle.

  • La ejecución secuencial consiste en ejecutar comandos en orden de acuerdo con el contenido de la dirección.

  • Una rama condicional es una instrucción que ejecuta una dirección arbitraria basada en una condición.

  • Un bucle es una instrucción que ejecuta la misma dirección repetidamente.

En general, el caso de ejecución secuencial es relativamente simple y el valor del contador del programa es +1 cada vez que se ejecuta una instrucción.

Las ramas condicionales y de bucle hacen que el contador del programa apunte a una dirección arbitraria, de modo que el programa pueda regresar a una dirección anterior para repetir la misma instrucción o saltar a cualquier otra instrucción.

A continuación, utilizamos la rama condicional como ejemplo para ilustrar el proceso de ejecución del programa:

imagen

El proceso de inicio del programa es el mismo que el flujo de secuencia, y el flujo de secuencia del programa es el mismo que el proceso de inicio.

La CPU comienza a ejecutar comandos desde 0100 y los ejecuta secuencialmente en 0100 y 0101, y el valor de PC es +1. Al ejecutar la instrucción en la dirección 0102, juzga que el valor del registro 0106 es mayor que 0 y salta a la instrucción en la dirección 0104. Luego ingrese el valor en la pantalla y luego finalice el programa, y ​​se omitirá la instrucción de 0103.

Esto es lo mismo que el juicio if () en nuestro programa: si no se cumple la condición, la instrucción generalmente se omitirá directamente.

Por lo tanto, el proceso de ejecución de la PC no hace directamente +1, sino la dirección de la siguiente instrucción.

09 registro de bandera

Las ramas condicionales y de bucle usarán salto (instrucción de salto), que juzgará si se debe saltar de acuerdo con la instrucción actual. Mencionamos el registro de bandera anteriormente. No importa si el resultado de la operación del registro de acumulación actual es positivo, negativo o cero, el El registro de bandera se guardará.

Cuando la CPU está realizando cálculos, el valor del registro de bandera se establecerá automáticamente de acuerdo con el resultado del cálculo actual. Los estados positivo, negativo y cero del resultado del cálculo están representados por los tres bits del registro de bandera.

Cuando los resultados del primer byte, el segundo byte y el tercer byte del registro de bandera son todos 1, representan números positivos, ceros y números negativos, respectivamente.

imagen

El mecanismo de ejecución de la CPU es bastante interesante. Supongamos que el XXX almacenado en el registro de acumulación se compara con el YYY almacenado en el registro de propósito general. Después de la ejecución de la comparación, el mecanismo de operación de la CPU realizará una operación de resta.

Independientemente de si el resultado de la operación de resta es un número positivo, cero o un número negativo, se almacenará en el registro de bandera.

Un resultado positivo significa que XXX es mayor que YYY, un resultado cero significa que XXX e YYY son iguales y un resultado negativo significa que XXX es menor que YYY. La instrucción de comparación del programa es en realidad una operación de resta dentro de la CPU.

Mecanismo de llamada de 10 funciones

La llamada a la función es diferente del mecanismo de bucle y rama condicional, y la instrucción de salto simple no puede realizar la llamada a la función.

Después de que la llamada a la función debe procesarse dentro de la función, el flujo de procesamiento regresa al punto de llamada a la función (la siguiente dirección de la instrucción de llamada a la función).

El procesamiento de llamadas de la función se realiza estableciendo el valor del contador del programa como la dirección de almacenamiento de la función.

imagen

imagen

11 Implementación de matrices por dirección e índice

El siguiente es el registro de dirección base y el registro de índice. A través de estos dos registros, se puede dividir un área específica en la memoria principal para lograr una operación similar a una matriz.

Primero, puedes usar números hexadecimales para dividir las direcciones de 00000000 - FFFFFFFF en la memoria de la computadora.

De esta manera, siempre que haya un registro de 32 bits para cualquier dirección de memoria en este rango, se podrán ver todas las direcciones.

Sin embargo, si desea dividir un área de memoria específica para una visualización continua como una matriz, es más conveniente usar dos registros, por ejemplo, usamos dos registros para representar el valor de la memoria.

imagen

Esta representación es muy similar a la estructura de una matriz: una matriz se refiere a una estructura de datos de la misma longitud que se organiza consecutivamente en la memoria.

Utilice el nombre de la matriz para representar todos los valores de la matriz y distinga cada elemento de datos de la matriz a través del índice, por ejemplo: a [0] - a [4], 0 - 4 en [] es el subíndice de la matriz.

12 proceso de ejecución de instrucciones de CPU

Dicho esto, ¿cómo ejecuta la CPU las instrucciones una por una? La CPU de casi todas las computadoras tipo von Neumann se puede dividir en cinco etapas: buscar instrucciones, decodificar instrucciones, ejecutar instrucciones, acceder a datos y escribir los resultados.

La etapa de búsqueda de instrucciones es el proceso de leer la instrucción en la memoria en el registro de la CPU, y el registro del programa se utiliza para almacenar la dirección de la siguiente instrucción;

  • Una vez completada la búsqueda de instrucciones, ingresa inmediatamente a la etapa de decodificación de instrucciones. En la etapa de decodificación de instrucciones, el codificador de instrucciones divide e interpreta las instrucciones recuperadas de acuerdo con el formato previo a la instrucción, y reconoce y distingue diferentes tipos de instrucciones y diversas adquisiciones. del operando;

  • La tarea de ejecutar la etapa de instrucción es completar varias operaciones especificadas por la instrucción y realizar la función de la instrucción;

  • La tarea de la etapa de acceso es: de acuerdo con el código de dirección de la instrucción, obtener la dirección del operando en la memoria principal y leer el operando de la memoria principal para realizar el cálculo;

  • Como última etapa, la etapa de reescritura de resultados "vuelve a escribir" los datos de resultados de la operación de la etapa de ejecución de instrucciones en algún formato de almacenamiento: los datos de resultados a menudo se escriben en el registro interno de la CPU para que las instrucciones posteriores puedan acceder rápidamente a ellos.

Supongo que te gusta

Origin blog.csdn.net/weixin_41114301/article/details/132502804
Recomendado
Clasificación