你这还是没理解51的总线架构。
ARM是全片统一编址,无论寄存器、RAM、还是Flash,都统一编址到2的32次方,0x00000000到0xFFFFFFFF范围内,理论上用指针可以访问到任意地址的内容,指针访问属于间接访问。
51的总线分为外部RAM、内部RAM、内部寄存器0x80--0xFF、外部ROM、内部ROM。外部ROM与内部ROM的地址是重叠的,但是好在有个EA引脚,EA引脚的状态决定了只能访问外部和内部ROM中的其中一个,不能同时访问。
外部RAM、外部ROM,分别用MOVX和MOVC来访问,在C51中就得在定义数据类型的时候来区分,得加上xdata或code指示数据是存在外部RAM还是ROM。
内部RAM的低128字节,包括地址为0x80到oxFF的内部寄存器,可以用MOV指令直接访问,MOV Ri #12H 之类的。C51定义内部RAM低128字节变量时用data。
内部RAM的高128字节,只能MOV间接访问,MOV @Ri, A,也就是要访问的地址必须先存入Ri中,然后@Ri就是Ri值对应的地址。C51定义内部RAM高128字节变量时用idata。
内部寄存器只能直接访问。
|