Sistemas embebidos: ¿Cómo ejecuta un microprocesador el código binario?

Espero que puedas imaginar el proceso de obtener una instrucción de la dirección de memoria señalada por el Contador del programa y ponerla en el Registro de instrucciones. Desde el registro de instrucciones, se alimentan varios campos para decodificar y registrar bancos.

Suponga que la instrucción 0x1234 significa AGREGAR R3, R4. El valor 12 es el código operativo, que se alimenta a un decodificador que genera un conjunto de habilitaciones. La decodificación puede ser tan simple como una ROM. Los 3 y 4 se alimentan a las dos direcciones de lectura del banco de registro, lo que hace que R3 y R4 se seleccionen de él. La ALU se habilita en modo de suma para que el contenido de estos dos registros se alimente a la ALU de modo que, a su debido tiempo, la suma aparezca en su salida. Mientras tanto, el valor 3 se coloca en un pestillo de retención, junto con un bit de habilitación de escritura. Esto significa que en el siguiente reloj, la salida de la ALU se escribirá en el banco de registro en la ubicación 3. Mientras todo esto está sucediendo, la PC se alimenta a un incrementador, que se retroalimenta, para que la PC avanza por uno.

Ahora suponga que 0x2143 significa SALTO 0x43. El decodificador deja el ALU y se registra en paz. En cambio, apaga el incrementador y lo reemplaza por los bits inferiores de la instrucción. Esto significa que, en lugar de que la PC pase a la siguiente ubicación, se reemplaza por el destino del salto. Por supuesto, es fácil hacer que esta conversión esté condicionada a algún resultado retenido de una operación ALU anterior.

La tercera operación que necesita es cargar / almacenar. En lugar de alimentar el contenido del registro a la ALU, los alimenta al bus de direcciones y luego configura la dirección de escritura diferida exactamente como la adición, excepto que la fuente de datos es el bus de datos y no la salida de ALU, y tiene carga. Para almacenar, simplemente alimente un registro al bus de direcciones y otro al bus de datos, y fuerce un ciclo wrie en el bus.

Con carga, almacenamiento, aritmética y salto condicional, tiene todo lo que necesita para programar. Lejos te vas

Binario => 1s y 0s ¿verdad? Ambas son solo representaciones de voltajes … así que de acuerdo con el patrón de 1s y 0s, la electricidad se suministra a varios componentes … Ahora, la unidad de temporización del procesador realiza la sincronización de los suministros y la ALU es solo un circuito lógico combinacional … los datos tienen que ser proporcionados, eso es lo que importa … obtener los datos correctos, aplicarlos a los pines de ALU y habilitarlos … Bueno, obtener los datos es algo complicado

Cualquier procesador electrónico tiene una ALU (Unidad lógica aritmética). Esta ALU consta de sumadores binarios. Todas las operaciones, incluidas la resta, la multiplicación y la división, se realizan utilizando estos sumadores binarios. El resultado de este sumador binario se puede convertir a otras formas numéricas que tienen diferentes bases (Hex, Oct, Dec, …).

Cada vez que se escribe un programa, el compilador lo convierte a formato binario. Este formato binario representa todo el conjunto de operaciones de suma que deben ejecutarse (para realizar una tarea compleja). Por cada 1s, se activa un alto voltio y por cada 0s, se activa un bajo voltio. La salida de la ALU es nuevamente una serie (de combinaciones) de 1s y 0s que es interpretada por otros circuitos para dar formatos interpretables humanos (basados ​​en lo que se necesita; visualización o activación de algún dispositivo o cualquier cosa).

(Nota de PS al agregar información sobre la Unidad de Tiempo habría desviado la respuesta de la pregunta real).

Es una máquina de estados. Se lee en un código de operación, el código de operación establece los interruptores (según el código) y el µP hace lo que el código de operación le dice que haga: buscar el siguiente operando, agregar los últimos 2 números en la pila, etc.