从数据存储类型来说,8051 系列有片内、片外程序存储器,片内、片外
数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应
code、data、xdata、idata 以及根据 51 系列特点而设定的 pdata 类型,使
用不同的存储器,将使程序执行效率不同,在编写 C51 程序时,最好指定变
量的存储类型,这样将有利于提高程序执行效率(此问题将在后面专门讲述)。
与 ANSI-C 稍有不同,它只分 SAMLL、COMPACT、LARGE 模式,各种不同的模
式对应不同的实际硬件系统,也将有不同的编译结果。
在 51 系列中 data,idata,xdata,pdata 的区别:
data:固定指前面 0x00-0x7f 的 128 个 RAM,可以用 acc 直接读写的,速
度最快,生成的代码也最小。
idata:固定指前面 0x00-0xff 的 256 个 RAM,其中前 128 和 data 的 128
完全相同,只是因为访问的方式不同。idata 是用类似 C 中的指针方式访问
的。汇编中的语句为:mox
ACC,@Rx.(不重要的补充:c 中 idata 做指针式
的访问效果很好)
xdata:外部扩展 RAM,一般指外部 0x0000-0xffff 空间,用 DPTR 访问。
pdata:外部扩展 RAM 的低 256 个字节,地址出现在 A0-A7 的上时读写,
用 movx
ACC,@Rx 读写。这个比较特殊,而且 C51 好象有对此 BUG,建议少
用。但也有他的优点,具体用法属于中级问题,这里不提。