J'ai récemment commencé à apprendre l'assemblage et j'ai découvert les scripts de l'éditeur de liens et d'autres détails de bas niveau sur la programmation matérielle. J'enseigne également l'architecture informatique et quelque part le long de la ligne, j'ai eu peur que mon image du modèle de mémoire ait toujours été erronée.
Selon ce que je comprends actuellement, tout le code et les données résident sur la mémoire non volatile juste après avoir `` gravé '' le binaire sur un processeur - la RAM volatile ne contient rien lors de la réinitialisation. Lorsque le programme commence à «s'exécuter», il le fait à partir de l'adresse 0x0000 qui est presque toujours (AFAIK) l'adresse la plus basse dans Flash. Ainsi, les instructions sont verrouillées sur le bus reliant Flash au cœur du processeur et c'est là que l'exécution réelle a lieu. Cependant, lorsque nous parlons de la récupération ou du stockage de données de la CPU par le CPU, nous parlons généralement de RAM - je suis conscient que nous pouvons également lire / écrire des données à partir de la mémoire du programme (j'ai vu cela fait sur les AVR) mais n'est-ce pas aussi courant? Est-ce parce que la RAM est plus rapide que la ROM que nous préférons y stocker des données?
La réponse acceptée à cette question indique que la plupart des morceaux de code s'exécutent hors de la RAM.
Cela signifie-t-il que le code d'exécution de démarrage (qui s'exécute lui-même à partir de Flash) doit copier tous les opcodes du programme de Flash vers la RAM et mappe en quelque sorte les adresses dans Flash pour pointer vers la RAM afin que le CPU récupère les opcodes à partir de là? Est-il similaire au processus dans lequel nous déplaçons les sections .data de la ROM vers la RAM au démarrage?
Je peux imaginer que cela soit plus simple dans les architectures von Neumann où le programme et les mémoires de données partagent un bus, mais dans les architectures Harvard, cela ne signifierait-il pas que tout le code et les données doivent d'abord passer par les registres du processeur?
Comme vous pouvez probablement le deviner, je suis un peu trop confus par toute cette affaire. Ayant toujours programmé à un niveau d'abstraction plus élevé, je suis facilement troublé par de tels détails. Toute aide est appréciée.