大家都学过,所谓的8086是冯诺依曼结构的(也叫做普林斯顿结构),51等单片机是哈佛结构,我们的PIC单片机是增强型的哈佛结构。那么,这三种结构之间究竟有什么区别吗?对于我们编程序的时候,有什么影响吗?这篇文章主要来讨论这个问题。
一、问题的引出
最近在读linux的内核,遇到这么一个问题:对于PC机而言,操作系统在最开始进行环境初始化的时候,首先执行BIOS程序(有点类似于bootloader),执行完了之后,程序需要从外设(软盘或者硬盘)中,将代码读到RAM区域,进而在RAM中运行相应的代码。
这就产生了一个问题:在我们的PIC单片机(包括51)中,程序不都是存在flash里面的么?CPU都是直接从FLASH中直接读取程序,没有听说要把程序从FLASH中读取到RAM中,再读取到CPU中运行吧?
于是,我就产生了一个疑问:程序,到底是在RAM中运行的,还是在FLASH中运行的呢?
于是就找到了这个网页:
总结一下这个文章说的内容,意思就是:冯诺依曼结构的,是在RAM中将指令读取到CPU中;哈佛结构的是从FLASH中读取。
那么,究竟什么是冯诺依曼结构,什么是哈佛结构?区别到底是什么?
二、冯诺依曼结构和哈佛结构
可以参考这篇文章:
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。