He estado viendo como crear un compilador. Y generalmente se habla del análisis léxico y sintáxico. Pero concretamente yo creo que es llevar una codificación, por ejemplo ASCII a la condificación que utiliza cierta arquitectura en cuestión, es decir, el procesador. A ver si estoy en lo correcto, denme su opinión.
Los procesadores tienen un conjunto de instrucciones, supongamos un procesador de 32 bits. Es decir, el microprocesador tiene 32 pines de entrada y 32 pines de salida. Cada instrucción tiene 32 bits, es decir, 4 bytes. No conozco ningún bytecode pero supongo que en esos 4 bytes, podría codificarse la instrucción suma. Utilizando el primer byte para codificar el tipo de instrucción, en este caso sería "suma". El segundo y tercer bytes podría utilizarse para codificar las direcciones de los registros donde se almacenan los operandos y el cuarto bytes para codificar la dirección de memoria del registro donde se almacenará el resultado.
Así, la instrucción en lenguaje máquina para la suma sería:
10001011 11010010 11100101 00010110
suma registroA registroB registroC
Ahora bien eso en el editor de C sería
C=A+B
Pero en la memoria de la pc estaría codificado en ASCII
67 61 65 43 66
1000011 111101 1000001 101011 1000010
Así que la tarea del compilador es llevar 1000011 111101 1000001 101011 1000010 a 10001011 11010010 11100101 00010110
Y a lo que me refiero con que la tarea del compilador es esa, es dejando de lado la parte que analiza los comentarios y demás.
Los procesadores tienen un conjunto de instrucciones, supongamos un procesador de 32 bits. Es decir, el microprocesador tiene 32 pines de entrada y 32 pines de salida. Cada instrucción tiene 32 bits, es decir, 4 bytes. No conozco ningún bytecode pero supongo que en esos 4 bytes, podría codificarse la instrucción suma. Utilizando el primer byte para codificar el tipo de instrucción, en este caso sería "suma". El segundo y tercer bytes podría utilizarse para codificar las direcciones de los registros donde se almacenan los operandos y el cuarto bytes para codificar la dirección de memoria del registro donde se almacenará el resultado.
Así, la instrucción en lenguaje máquina para la suma sería:
10001011 11010010 11100101 00010110
suma registroA registroB registroC
Ahora bien eso en el editor de C sería
C=A+B
Pero en la memoria de la pc estaría codificado en ASCII
67 61 65 43 66
1000011 111101 1000001 101011 1000010
Así que la tarea del compilador es llevar 1000011 111101 1000001 101011 1000010 a 10001011 11010010 11100101 00010110
Y a lo que me refiero con que la tarea del compilador es esa, es dejando de lado la parte que analiza los comentarios y demás.