DFTR 累扣器A 00H -30H -20 MOV P1,#55H ;将立即数55H送P1口 MOV20H,#55 :将立即数55H送20H单元 MOV A,#0FOH ;将立即数OFOH送累加器A 注意:立即数前面必须加“#号,以区别立即数和直接地址 即:MOVA,#30 H MOV A,30H两者的区别 三、寄存器寻址 寄存器寻址是以寄存器中的内容为操作数,(寄存器名为操作数 地址) 寻址范围包括:工作寄存器R0~R7、累加器A、通用寄存器B、 地址寄存器DPTR。 注意:在使用工作寄存器(4组32个)时,首先要通过程序状 态寄存器PSW的RS1RS0来选择当前寄存器组 例:RS1RS0=01为二组工作寄存器(08H一OFH)。则执行MOV R1,A指令后,内部RAMO9H(R1)单元的值就变为20H。(设累 加器A的内容为20H) 累加器A 内部RAM R1(09H) 采用寄存器寻址的指令如下:
MOVP1,A:将累加器A的内容送到P1口 MOVP1,R4;将寄存器R4的内容送到P1口 CLRA;将累加器A清0 四、寄存器间接寻址 寄存器间接寻址:指令给出的寄存器中的内容为操作数的地址: 例:MOVA,@R0: 设指令执行前A=20H,R0-40H,地址为40H存储器单元内容如 图所示。执行指令后,A=28H,R0=40H,(40H=28H 41H21H 40H28H 再如:MOVR0,#30H;立即数送R0寄存器 MOVA,@R0;从RAM的30H单元取数送累加器A 注意: 1、间接寻址寄存器前面必须加上符号“@”。 MOVA,@R0和MOVA,R0指令的区别。 2、寄存器间接寻址方式可用于访问内部RAM(低128B)或外 部RAM. 3、访问内部RAM低128B或外部RAM的低256个字节时,可 采用R0或R1作为间址寄存器。 4、访问外部RAM(64K),还可用数据指针DPTR作为间址寄 存器
5、在指令上内部RAM与外部RAM有区别,MOV(内部),MOVX (外部) 6、间址方式的指令不能访问SFR中的单元。如下面的程序是错 误的: MOV RI,#80H MOVA,@R1(因为8OH为SFR的物理地址) 7、尽管片内与片外的RAM单元的0OH-FFH地址相重叠但由于 指令的不同不会发生地址混乱。 FFH SFR 80H 7FH 翮 00H 低128那 OOH-7FH 例:分析下列语句的功能: 1、MOVA,20H:片内20H单元中的数据放入累加器A(直接 寻址) 2、MOVR0,#20H;20H立即数放入R0中(立即寻址) MOVX A,@R0:片外20H(R0中为20H)中的数放入A(寄 存器间接寻址》 3、MOVR0,#20H;20H立即数放入R0中(立即寻址) MOVA,@R0:片内20H(R0中为20H)中的数放入A(寄存
器间接寻址) 4、MOVX A,@DPTR:将DPTR指定的外部RAM中的数放入 A中(寄存器间接寻址) 五、变址寻址 变址寻址是指将基址寄存器(DPTR或PC)与变址寄存器(A) 的内容相加,结果作为操作数的地址。即:数据地址=基地址+偏 移量 例:MOVC A,@A+DPTR;将累加器A和基址寄存器DPTR 的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送 到累加器A中。 若:(A)=11H,(DPTR)=F1H,(0102H)=35H:则上述操 作的结果(A)=35H 注意:1、变址指令只适用于对ROM存储器的访问: 2、变址指令只有三条 MOVC A,@A+DPTR MOVC A,@A+PC JMPA,@A+DPTR:无条件转移指令 3、尽管编址寻址教复杂,但该指令为单字节指令 例:已知ROM中0302H单元有一个数x,现要把它送到累加器 A中,试编程。 MOV DPTR,#0300H :立即数送DPTR MOV A,#02H ;立即数送累加器A MOVC A,@A+DPTR :从ROM的00302单元取数送A