Hace poco empecé a aprender ensamblador y conocí los scripts de vinculador y otros detalles de bajo nivel de la programación de hardware. También me estoy enseñando a mí mismo arquitectura de computadoras y, en algún momento, temí que mi imagen del modelo de memoria pudiera haber estado equivocada todo el tiempo.
De acuerdo con lo que entiendo actualmente, todo el código y los datos residen en la memoria no volátil justo después de que 'grabamos' el binario en un procesador: la memoria RAM que es volátil no contiene nada cuando se reinicia. Cuando el programa comienza a 'ejecutarse', lo hace desde la dirección 0x0000, que casi siempre es (AFAIK) la dirección más baja en Flash. Por lo tanto, las instrucciones se bloquean en el bus que conecta Flash con el núcleo de la CPU y ahí es donde se lleva a cabo la ejecución real. Sin embargo, cuando hablamos de que la CPU recupera o almacena datos de la memoria, generalmente hablamos de RAM. Soy consciente de que también podemos leer / escribir datos de la memoria del programa (he visto esto en AVR) ¿Pero no es tan común? ¿Es porque RAM es más rápida que la ROM que preferimos almacenar datos allí?
La respuesta aceptada a esta pregunta dice que la mayoría de las piezas de código se ejecutan fuera de la memoria RAM.
¿Esto significa que el código de tiempo de ejecución de inicio (que a su vez se ejecuta desde Flash) tiene que copiar todos los códigos de operación del programa de Flash a RAM y de alguna manera asigna las direcciones en Flash para que apunten a la RAM, de modo que la CPU recupere los códigos de operación desde allí? ? ¿Es similar al proceso en el que movemos las secciones .data de ROM a RAM en el inicio?
Puedo imaginar que esto sea más simple en las arquitecturas de von Neumann donde el programa y las memorias de datos comparten un bus, pero en las arquitecturas de Harvard, ¿no significaría esto que todo el código y los datos deben pasar primero a través de los registros de la CPU?
Como probablemente pueda imaginar, todo este asunto me confunde un poco. Habiendo programado siempre a un nivel de abstracción más alto, me preocupan fácilmente con tales detalles. Cualquier ayuda es apreciada.