Actualmente estoy trabajando en la implementación del compilador moderno de Andrew Appel en Java, y estoy justo en el punto donde construyo la representación intermedia de bajo nivel.Generando ensamblaje para un procesador x86
Inicialmente, había decidido apuntar a la JVM e ignorar todas las cosas de bajo nivel de la máquina, pero con el interés de aprender cosas de las que no sé mucho, he tenido un cambio de opinión. Esto cambia mi IR, porque dirigirme a la JVM me permite (más o menos) agitar las manos para hacer una llamada a un método o construir un objeto.
El libro de Appel no entra en detalles sobre una arquitectura de máquina específica, por lo que me gustaría saber dónde puedo encontrar todo lo que necesito saber para ir más allá.
Las cosas que estoy actualmente cuenta que necesito saber son:
¿Qué conjunto de instrucciones para su uso. Tengo dos computadoras portátiles que podría desarrollar; ambos tienen procesadores Core 2 Duo. Mi comprensión actual es que los procesadores x86 usan principalmente el mismo conjunto de instrucciones, pero no son exactamente iguales.
Si el sistema operativo afecta al paso de generación de código de compilación, o si es completamente dependiente del procesador. Por ejemplo, sé que algo diferente es generar código para ejecutar en una plataforma de 32 bits frente a una de 64 bits.
Cómo se organizan los marcos de pila y demás. Cuándo usar registros vs. poner parámetros en la pila, llamador-save vs. callee-save, todo eso. Pensé que esto se describiría junto con el conjunto de instrucciones, pero hasta ahora no he visto esta información en particular. Tal vez estoy malinterpretando algo aquí?
Los enlaces a los recursos en lugar de las respuestas son perfectamente bienvenidos.
Votación para cerrar como demasiado amplia. –