Estuvimos indagando en todo el mundo on line para tenerte la respuesta a tu dilema, si tienes alguna difcultad puedes dejarnos la pregunta y te contestamos con gusto.
Solución:
Las computadoras se construyen básicamente a partir de puertas lógicas. Aunque esta es una idealización abstracta de la maquinaria física real, está lo suficientemente cerca de la verdad como para que podamos creerla por ahora. En un nivel muy básico, estas cosas funcionan como true/false predicados. O si alguna vez has jugado Minecraft, funciona de forma muy parecida a Redstone. El campo que estudia cómo armar puertas lógicas para hacer circuitos complejos e interesantes, como las computadoras, se llama arquitectura de computadoras. Se considera tradicionalmente como una mezcla de informática e ingeniería eléctrica.
Las compuertas lógicas más básicas son cosas como AND y OR, que simplemente juntan bits y eliminan alguna operación booleana entre ellos. Al crear bucles de retroalimentación en puertas lógicas, puede almacenar memoria. Un tipo de circuito de memoria estándar se llama flip-flop, y es básicamente un pequeño bucle de cable junto con algunas puertas AND y energía para mantenerlo estable. Reunir varios pestillos le permite crear vectores de bits, y estas cosas se llaman registros (que es lo que representan cosas como eax y ebx). También hay muchos otros tipos de partes, como sumadores, multiplexores, etc., que implementan varias piezas de lógica booleana. Aquí hay un directorio de algunos circuitos:
http://www.labri.fr/perso/strandh/Teaching/AMP/Common/Strandh-Tutorial/Dir.html
Su CPU es básicamente un montón de estas cosas unidas, todas construidas a partir de las mismas puertas lógicas básicas. La forma en que su computadora sabe cómo seguir ejecutando instrucciones es que hay una pieza especial de maquinaria llamada reloj que emite pulsos a intervalos regulares. Cuando el reloj de su CPU emite un pulso, desencadena una secuencia de reacciones en estas puertas lógicas que hacen que la CPU ejecute una instrucción. Por ejemplo, cuando lee una instrucción que dice “mov eax, ebx”, lo que termina sucediendo es que el estado de uno de estos registros (ebx) se copia al estado de otro (eax) justo antes del siguiente. pulso de sale del reloj.
Por supuesto, esta es una simplificación excesiva, pero como una imagen de alto nivel es esencialmente correcta. El resto de los detalles toman un tiempo para explicarse, y hay algunas cosas aquí que descuidé debido a sutilezas innecesarias (por ejemplo, en una CPU real, a veces se ejecutan varias instrucciones en un solo reloj; y debido a la paginación de registros, a veces eax es (no siempre es lo mismo; y, a veces, debido al reordenamiento, la forma en que se ejecutan las instrucciones cambia de lugar, etc.). Sin embargo, definitivamente vale la pena aprender toda la historia, ya que en realidad es bastante sorprendente (¡o al menos me gusta pensar que sí!). Te harías un gran favor si salieras y leyeras sobre estas cosas, y tal vez intentaras construir una algunos circuitos propios (ya sea utilizando hardware real, un simulador o incluso Minecraft!)
De todos modos, espero que eso responda un poco a tu pregunta sobre qué hace mov eax, ebx.
Lo que ve allí son mnemotécnicos, que facilitan que un programador escriba ensamblador; sin embargo, no es ejecutable en forma mnemotécnica. Cuando pasa estas instrucciones de ensamblaje a través de un ensamblador, se traducen al código de máquina que representan, que es lo que la CPU y sus diversos coprocesadores interpretan y ejecutan (generalmente la CPU las reduce a unidades más pequeñas, llamadas micro-ops) .
Si tiene curiosidad sobre cómo hace exactamente eso, bueno, es un proceso largo, pero esto tiene toda esa información.
Toda la semántica, etc. es manejada por el ensamblador, que verifica la validez y la integridad cuando es posible (¡sin embargo, aún se puede ensamblar código no válido!). Básicamente, esto hace que el ensamblaje sea un lenguaje de bajo nivel, aunque tiene una correlación de 1 a 1 con el código de máquina generado (excepto cuando se usa macro ensambladores basados, pero luego las macros aún se expanden a 1 a 1).
Su CPU no ejecuta el ensamblaje. El ensamblador lo convierte en código de máquina. Este proceso depende tanto del lenguaje ensamblador particular como de la arquitectura de la computadora de destino. Por lo general, van de la mano, pero es posible que encuentre diferentes tipos de lenguaje ensamblador (nasm frente a AT&T, por ejemplo), que se traducen en un código de máquina similar.
Una instrucción de ensamblaje típica (MIPS) como “E inmediato”
andi $t, $s, imm
se convertiría en la palabra de código de máquina de 32 bits
0011 00ss ssst tttt iiii iiii iiii iiii
donde s
y t
son números del 0 al 31 cuyo nombre se registra, y i
es un valor de 16 bits. Es este patrón de bits el que realmente ejecuta la CPU. los 001100
al principio es el código de operación correspondiente a la andi
instrucción y el patrón de bits que sigue (registro de origen de 5 bits, registro de destino de 5 bits, literal de 16 bits) varía según la instrucción. Cuando esta instrucción se coloca en la CPU, responde apropiadamente descodificando el código de operación, seleccionando los registros para leer y escribir, y configurando la ALU para realizar la aritmética necesaria.
Al final de todo puedes encontrar las crónicas de otros usuarios, tú todavía puedes dejar el tuyo si dominas el tema.