No, no es estándar el proceso de compilación.
Lo que sí es estándar es el ''efecto final'' que debe producir una cierta instrucción, pero no el número de operaciones que realiza para llevarla a cabo.
Un compilador tiene dos aspectos: uno sintáctico y otro semántico.
La sintaxis es la simple verificación de que un programa está bien escrito, o sea, que respeta las reglas del lenguaje.
Esa parte sí es estándar, se puede hacer de manera sistemática.
Está explicado en el libro: Algoritmos + Estructuras de Datos = Programas, del autor Niklaus Wirth, capitulos 5 y 6 creo.
Una vez hecho esto, hay que realizar el proceso de traducción, o sea, interpretar las instrucciones con cierto significado, eso es la semántica. La implementación depende de la máquina en la cual quiera hacerse la compilación, o bien el sistema operativo en que corre el programa, etc. Hace falta tener convenciones de la plataforma en donde el programa ha de correr, y además, depende de las intenciones del diseñador del compilador, si desea que el compilador sea eficiente, rápido, o que cumpla ciertos requisitos.
A lo mejor hay convenciones estandarizadas, pero creo que este proceso no puede sistematizarse.
Y no conozco bibliografía al respecto.
Otro enfoque sería visualizar la computadora, con su memoria y su procesador como un objeto, y tratar de hacer programación orientada a objetos que comunique al objeto programa fuente con el objeto PC...
Si este enfoque no te gusta (que es muy posible), lo que yo haría sería un pre-compilador, o sea, algo que traduzca tu programa de alto nivel a uno de más bajo nivel.
Por ejemplo, pasar de C++ a un programa en C.
El C es un lenguaje casi de bajo nivel, está muy cerca del modo en que funciona la máquina.
Uno puede estudiar con más facilidad como es el manejo de la memoria, los punteros, las pilas de datos para almacenar funciones, etc.
Y simplemente tendrías que traducir un archivo de texto (el fuente en C++) en otro archivo de texto (el fuente en C).
La ventaja de esto es que las convenciones de C están en los libros, está estandarizado, etc.
Sería una especie compilación, aunque no directa, sino una mera traducción de un lenguaje a otro.
Luego se podría pasar del lenguaje C a algún lenguaje más simple, digamos D, que podrías inventar vos, y que solamente se encargue del manejo de punteros, pilas, y reservar memoria para operaciones de punteros.
Eso ya sería una programación en muy bajo nivel.
Luego, restaría hacer un compilador, que pase del lenguaje sencillo D al lenguaje Ensamblador.
Este lenguaje es casi ya de la máquina, pero todavía puede editarse como archivo de texto, y se pueden poner comentarios, además de que los registros de la máquina son legibles, así como las instrucciones de salto, y las posiciones de memoria.
Debieras conseguirte un manual de Ensamblador moderno, que contenga las instrucciones para los procesadores modernos.
Por último, habría que hacer el compilador definitivo de Ensamblador a lenguaje de máquina, y esto es traducir las instrucciones de Ensamblador a sus equivalentes hexadecimales.
Esto debiera figurar en algún manual de procesadores Intel, o AMD, puesto que se trata de una traducción directa.
Esta compìlación en etapas sucesivas podrían implementarse en un solo programa, que a simple vista sería un solo compilador que lleve de tu programa original a la máquina.
Creo que la traducción directa de un lenguaje de alto nivel a lenguaje de máquina es algo muy complicado, y que puede traer muchos dolores de cabeza, pero a lo mejor haya técnicas, las cuales yo no conozco en absoluto.