3
闪存和RAM:代码执行
我最近开始学习汇编,并开始了解链接器脚本和其他硬件编程的低级细节。我也在自学计算机体系结构,并且一直担心我的内存模型图可能一直是错误的。 根据我目前的了解,在将二进制文件“烧录”到处理器上之后,所有代码和数据都驻留在非易失性存储器中-易失性RAM复位后不包含任何内容。当程序开始“执行”时,它从地址0x0000开始执行,该地址几乎总是(AFAIK)Flash中的最低地址。因此,指令被锁存到将Flash连接到CPU内核的总线上,这就是实际执行的地方。但是,当我们谈论CPU从内存中检索或存储数据时,我们通常是在谈论RAM-我知道我们也可以从程序存储器中读取/写入数据(我已经在AVR上看到了这一点)但这不常见吗?是因为RAM比ROM快,所以我们更喜欢在那存储数据? 这个问题的公认答案是,大多数代码都是在RAM之外执行的。 这是否意味着启动运行时代码(其本身从Flash执行)必须将所有程序操作码从Flash复制到RAM,并以某种方式将Flash中的地址映射到RAM,以便CPU从那里获取操作码?它与启动时将.data节从ROM移到RAM的过程类似吗? 我可以想象这在程序和数据存储器共享总线的冯·诺依曼体系结构中会更简单,但是在哈佛体系结构中,这是否不意味着所有代码和数据都必须先通过CPU寄存器? 您可能会猜到,我对整个业务感到有些困惑。总是以更高的抽象级别进行编程,我很容易为这些细节所困扰。任何帮助表示赞赏。