我们正在研究PIC18F4321,在某些时候,我的教授在电路板上绘制了以下图表:
他看起来像指令(例如ADDLW 0X02,MOVWF 0X24等)将在数据存储器中占用两个地址,因为PIC18F4321中的存储器地址只占用一个字节,指令是16位宽。
但是在PIC18F4321的数据表中,我找不到这些16位指令将存储在数据存储器中的位置。在他说之前,我记得数据存储器用于存储寄存器值,而不是完整的指令。另一方面,我知道还有程序存储器,但程序存储器不是8位宽,这使得他的绘图更加混乱。
1)16位指令是否曾存储在数据存储器中?
2)我发现尝试解释图片的一种方法是,可能所讨论的存储器不一定是8位宽,只是每个地址只能占用8位。所以< 8>只是说明你可以在该地址中保留多少位。这是一个合理的解释吗?
答案 0 :(得分:1)
1)16位指令是否曾存储在数据存储器中?
没有。数据存储器不用于存储指令 - 您无法从数据存储器执行任何代码。所有指令都存储在程序存储器中,程序存储器由16位指令字组成。数据表详细说明了不同指令的格式和布局。有些指令是单字,有些则需要多个字。程序存储器由21位程序计数器寻址,该计数器包含2M字节空间,但对于PIC18F4321,只有8K字节的程序存储器,相当于4096个单字指令。
数据存储器由8位字节组成,由12位总线寻址,允许最多4096字节的数据存储器,尽管PIC18F4321只有512字节的数据存储器,分成两组256字节。该数据存储器包含您在应用中使用的SFR(特殊功能寄存器)和通用寄存器(GPR)。
所有这些都有更详细的解释in the datasheet for this device,特别是第5节。
程序计数器(PC)寻址程序存储器的方式通过强制PC的最低有效位为零来强制执行16位指令字对齐,这会强制以两个字节的倍数进行访问。引自数据表:
PC寻址程序存储器中的字节。防止PC出现 变得与字指令不一致,最不重要的一点 PCL的值固定为值“0”。 PC增加2到地址 程序存储器中的顺序指令。
我建议您仔细阅读链接数据表的第5部分,看看您是否还有疑问。它包含了很多细节,但它描述得很好,即使完全理解它也需要不止一个阅读。