PIC18F4321上的数据存储器和指令

Data memory and Instructions on PIC18F4321

我们正在研究PIC18F4321,有一次我的教授在板上画了下图:

他让它看起来像指令(如ADDLW 0X02、MOVWF 0X24 等)在数据存储器中占用两个地址,因为PIC18F4321 中的存储器地址只占用一个字节,指令是16 位宽。

但是在PIC18F4321的数据表中,我找不到哪里说这些16位指令将永远存储在数据存储器中。在他这么说之前,我记得数据存储器是用来存储寄存器值的,而不是完整的指令。另一方面,我知道也有程序内存,但是程序内存不是8位宽的,这让他画的更乱。

1) 16 位指令曾经存储在数据存储器中吗?

2) 我发现的一种解释图片的方法是,也许有问题的内存不一定是 8 位宽,只是每个地址只能占用 8 位。所以 <8> 只是说明您可以在该地址中保留多少位。这是一个合理的解释吗?

1) Are 16 bits instructions ever stored in Data Memory?

没有。数据存储器不用于存储指令 - 您不能从数据存储器执行任何代码。所有指令都存储在程序存储器中,程序存储器由 16 位指令字组成。数据表详细说明了不同指令的格式和布局。有些指令是单个词,有些则需要多个词。程序存储器由一个 21 位程序计数器寻址,它包含 2MB space 尽管对于 PIC18F4321 只有 8Kbytes 的程序存储器,相当于 4096 条单字指令。

数据存储器由 8 位字节组成,由 12 位总线寻址,允许最多 4096 字节的数据存储器,尽管 PIC18F4321 只有 512 字节的数据存储器,分为两个 256 字节的组。此数据存储器包含您在应用程序中使用的 SFR(特殊功能寄存器)和通用寄存器 (GPR)。

所有这些都在第 5 部分进行了更详细的解释 in the datasheet for this device

程序计数器 (PC) 寻址程序内存的方式通过强制 PC 的最低有效位为零来强制执行 16 位指令字对齐,这强制以两个字节的倍数进行访问。引用数据表:

The PC addresses bytes in the program memory. To prevent the PC from becoming misaligned with word instructions, the Least Significant bit of PCL is fixed to a value of ‘0’. The PC increments by 2 to address sequential instructions in the program memory.

我建议您通读链接数据表的第 5 节,看看您是否还有疑问。它包含很多细节,但它描​​述得很好,即使需要多次阅读才能完全理解它。