Baru-baru ini saya mulai mempelajari perakitan dan mengetahui tentang skrip tautan dan detail pemrograman perangkat keras tingkat rendah lainnya. Saya juga belajar sendiri arsitektur komputer dan di suatu tempat saya takut bahwa gambar saya tentang model memori mungkin salah selama ini.
Menurut apa yang saya pahami saat ini, semua kode dan data berada pada memori non-volatil tepat setelah kita 'membakar' biner ke prosesor - RAM yang tidak stabil tidak mengandung apa-apa saat reset. Ketika program mulai 'mengeksekusi', ia melakukannya dari alamat 0x0000 yang hampir selalu (AFAIK) alamat terendah di Flash. Jadi, instruksi terkunci ke bus yang menghubungkan Flash ke inti CPU dan di situlah eksekusi sebenarnya terjadi. Namun, ketika kita berbicara tentang CPU mengambil atau menyimpan data dari memori, kita biasanya berbicara tentang RAM - saya sadar bahwa kita dapat membaca / menulis data dari memori program juga (saya telah melihat ini dilakukan pada AVR) tetapi apakah itu tidak biasa? Apakah karena RAM lebih cepat dari ROM sehingga kami lebih suka menyimpan data di sana?
Jawaban yang diterima untuk pertanyaan ini mengatakan bahwa sebagian besar kode dijalankan dari RAM.
Apakah ini berarti bahwa kode runtime start-up (yang dijalankan sendiri dari Flash) harus menyalin semua opcode program dari Flash ke RAM dan entah bagaimana memetakan alamat dalam Flash untuk menunjuk ke RAM sehingga CPU mengambil opcode dari sana? Apakah mirip dengan proses di mana kita memindahkan bagian data. Dari ROM ke RAM saat startup?
Saya bisa membayangkan ini menjadi lebih sederhana dalam arsitektur von Neumann di mana program dan memori data berbagi bus, tetapi dalam arsitektur Harvard bukankah ini berarti bahwa semua kode dan data harus melewati register CPU terlebih dahulu?
Seperti yang mungkin bisa Anda tebak, saya agak terlalu bingung dengan seluruh bisnis ini. Setelah selalu diprogram pada tingkat abstraksi yang lebih tinggi, saya mudah bermasalah dengan detail seperti itu. Bantuan apa pun dihargai.