|
发表于 2022-5-26 12:04:43
来自手机
|
显示全部楼层
本帖最后由 dz20062008 于 2022-5-26 12:08 编辑
https://www.amobbs.com/forum.php ... page=1&mobile=2
一篇同样探讨的帖子
9楼大神精彩回答如下:
本帖最后由 lyl1070 于 2022-5-16 17:13 编辑
memory model选项是指,将默认的变量存放到哪个位置(除了指定位置的变量外,没有指定的都放在这个位置)。
举例:
uchar idata i,flag; // 定义到idata区域。
uchar data i,flag; // 定义到data区域。
uchar xdata i,flag; // 定义到xdata区域。
uchar pdata i,flag; // 定义到pdata区域。
uchar i,flag; // 定义到memory model选项中的区域。
注:
data:固定指前⾯0x00-0x7f的128个RAM,可以⽤acc直接读写的,速度最快,⽣成的代码也最⼩。
idata:固定指前⾯0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的⽅式不同。
idata是⽤类似C中的指针⽅式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)。
另外程序堆栈只能存放在idata中,而且是80H~0xFF之间,所以程序必须留出足够的idata空间,而不能超过128个。
xdata:外部扩展RAM,⼀般指外部0x0000-0xffff空间,⽤DPTR访问。
pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,⽤movx ACC,@Rx读写。
这个⽐较特殊。
有些说pdata是xdata的某一页,页数由某个寄存器控制。没用过,不好说。
所以楼主的程序使用pdata的前提是你的MCU要有xdata,还要指定页。
有例子:
MCU支持传统的访问外部RAM方法,可以使用MOVXA,@Ri或MOVX@Ri,A;来访问外部低256字节RAM;
使用MOVX A,@DPTR或MOVX@DPTR,A来访问外部480字节RAM。
用户也能用XPAGE寄存器来访问外部RAM,仅用MOVX A,@Ri或MOVX@Ri,A指令即可。
用户能用XPAGE来表示高于256字节的RAM地址。 |
|