数据传送类指令 指令特点:1、把源操作数传送到目的操作数,指令执行后,源操作数不 变,目的操作数修改为源操作数;2、除传送到了A的指令外,一般不影 响PSW中的标志位;3、涉及到了的助记符:片内RAM:MOV、PUSH、 POP、XCH、XCHD、SWAP片外RAM:MOVX片内外ROM: MOVC 、内部RAM的数据传送指令 o1、与累加器有关的传送指令 实现A与不同寻址方式所指定的RAM单元之间的数据传送。 ⊙MOVA,Rn;A←Rn,n=0~7 例:设(A)=56H O MOV Rn,A;Rn←A MOV PSW, #OOH O MOV A,@Ri;A←((Ri)) MOV R2, A eMOV@Ri,A;(Ri)←A,i=0、1 MOV PSW, #08H o MOV A, direct: A+direct MOV R2, A ⊙ MO direct,A; direct←A
数据传送类指令 指令特点:1、把源操作数传送到目的操作数,指令执行后,源操作数不 变,目的操作数修改为源操作数;2、除传送到了A的指令外,一般不影 响PSW中的标志位;3、涉及到了的助记符:片内RAM:MOV、PUSH、 POP、XCH、XCHD、SWAP 片外RAM:MOVX 片内外ROM: MOVC 一、内部RAM的数据传送指令 1、与累加器有关的传送指令 实现A与不同寻址方式所指定的RAM单元之间的数据传送。 MOV A,Rn;A←Rn ,n=0~7 例:设(A)=56H MOV Rn,A;Rn←A MOV PSW,#00H MOV A,@Ri;A←((Ri)) MOV R2,A MOV @Ri,A;(Ri)←A,i=0、1 MOV PSW,#08H MOV A,direct;A← direct MOV R2,A MOV direct,A; direct←A
、内部RAM的数据传送指令 2、立即数传送指令 o MOV Rn, #data: Rnt- data 例: O MOV A,#data;A←data MOV RI, #40H o MOV direct, #data: direct+ data MOV ORI, #30H o MOV aRi, #data;(Ri)+data o MOV DPTR, #data16: DPTRe data16 (DPH←data158,DPL←data7~0) 3、内部RAM单元之间的数据传送指令 o MOV direct1, direct2; directl←( direct)例: o MOV direct, @Ri; directe((Ri)) MOV RO, #30H o MOV @Ri, direct; (Ri)+( direct) MOV RI, #31H o MOV Rn, direct: Rnt( direct) MOV A, aRO o Mov direct, Rn: directe( Rn) MOV aRI, A 例3-10、例3-11
一、内部RAM的数据传送指令 2、立即数传送指令 MOV Rn,#data;Rn← data 例: MOV A, #data;A← data MOV R1,#40H MOV direct, #data; direct← data MOV @R1,#30H MOV @Ri, #data;(Ri)← data MOV DPTR, #data16;DPTR← data16 (DPH← data15~8,DPL← data7~0) 3、内部RAM单元之间的数据传送指令 MOV direct1, direct2; direct1←( direct2) 例: MOV direct, @Ri; direct← ((Ri)) MOV R0,#30H MOV @Ri, direct;( Ri)← ( direct) MOV R1,#31H MOV Rn, direct; Rn← ( direct) MOV A, @R0 MOV direct, Rn; direct←( Rn) MOV @R1,A 例3-10、例3-11
二、A与片外RAM之间的数据传送 指令 o只能与累加器A之间进行传送,且只能用Ri(R0、 R1)、DPTR间址。 O MOVX A,@Ri;A←((Ri)),i=0、 o MOVX A, @DPTR; A+((DPTR)) MOVX aRI,A;(Ri)←(A) o MOVX QDPTR, A:(DPTR)+(A) 例:将外部RAM2000单元的内容送内部RAM3OH单 元。 解: MOV DPTR,#2000H MOVX A, aDPTR MOV 30H A
二、A与片外RAM之间的数据传送 指令 只能与累加器A之间进行传送,且只能用Ri(R0、 R1)、DPTR间址。 MOVX A, @Ri;A← ((Ri)) ,i=0、1 MOVX A, @DPTR;A←((DPTR)) MOVX @Ri,A;(Ri)← (A) MOVX @DPTR,A;(DPTR)←(A) 例:将外部RAM2000H单元的内容送内部RAM30H单 元。 解:MOV DPTR,#2000H MOVX A, @DPTR MOV 30H,A
、程序存储器取数指令 o完成从ROM中读取数据并送往累加器A中 o MOVC A, @A+PC; A((A)+(PC)+1) o功能:以PC作为基址寄存器,A的内容作为无符号数和PC当前值 (下一条指令的第一字节地址)相加后得到一个16位的地址,把 该地址所指的ROM单元内容送到A中 [例3-14]已知(A)=30H,执行下列指令后 2000H: MOVC A,@A+PC 2001H: MOV 78H, A 结果:将ROM中共中央031H单元中的内容送A,然后又送给内部 RAM78H单元 MOVC A, @A+DPTR; A+((A)+(DPTR)) o功能:以DPTR为基址寄存器,A中内容作为无符号数和DPTR的 内容相加得到一个16位的地址,把该地址所指出的ROM单元的内 容送A o[例3-15]已知(DPTR)=8100H,(A)=40H,执行指令 MOVC A, @A+DPTR o结果:将ROM中8140H单元中的内容(片外)送A中
三、程序存储器取数指令 完成从ROM中读取数据并送往累加器A中。 MOVC A, @A+PC;A←((A)+(PC)+1) 功能:以PC作为基址寄存器,A的内容作为无符号数和PC当前值 (下一条指令的第一字节地址)相加后得到一个16位的地址,把 该地址所指的ROM单元内容送到A中。 [例3-14] 已知(A)=30H,执行下列指令后 2000H:MOVC A,@A+PC 2001H:MOV 78H,A 结果:将ROM中共中央031H单元中的内容送A,然后又送给内部 RAM78H单元。 MOVC A, @A+DPTR;A ←((A)+(DPTR)) 功能:以DPTR为基址寄存器,A中内容作为无符号数和DPTR的 内容相加得到一个16位的地址,把该地址所指出的ROM单元的内 容送A。 [例3-15] 已知(DPTR)=8100H,(A)=40H,执行指令 MOVC A, @A+DPTR 结果:将ROM中8140H单元中的内容(片外)送A中
四、数据交换指令 o1、全字节交换:A与片内RAM单元内容的全字节交换。 o XCH A, Rn: A+ Rn XCHA,@Ri;A←((Ri)) A肉部 o XCH A, direct:A+( direct 2、半字节交换 A与片内RAM单元中内容的低4位进行交换,高4位不变。 o XCHD A, @Ri; A3-0+((Ri))3-0 3、A自身半字节交换:A中内容的高4位与低4位互换。AL O SWAP A; A7-4 A30 o例:已知片外RAM的20H单元中有一个数X和内部RAM20H单元中有 个数Y,请编写它们互换的程序。 解:MOVR1,#20H MOVX A,@R1;A←x XCHA,@R1;A←Y,片内20H←X MOVX OR1,A;片外20H←Y
四、数据交换指令 1、全字节交换:A与片内RAM单元内容的全字节交换。 XCH A, Rn;A Rn XCH A, @Ri;A (( Ri)) XCH A, direct;A ( direct) 2、半字节交换 A与片内RAM单元中内容的低4位进行交换,高4位不变。 XCHD A, @Ri;A 3~0 (( Ri))3~0 3、A自身半字节交换:A中内容的高4位与低4位互换。A SWAP A;A 7~4 A 3~0 例:已知片外RAM的20H单元中有一个数X和内部RAM20H单元中有一 个数Y,请编写它们互换的程序。 解: MOV R1,#20H MOVX A, @R1;A←X XCH A, @R1;A←Y,片内20H←X MOVX @R1,A;片外20H←Y A 内部 RAM
五、堆栈操作指令 PuSH direct;SP←(SP)+1,(SP)←( direct),压栈指令 o POP direct; direct←((SP)),SP←(SP)-1,弹栈指令 O PUSH:先将SP的内容加1,再将直接地址单元中的数据存入到了 SP所批示的单元中 oPOP:先将堆栈指针SP所指单元的内容弹出,并送到直接寻址单 元中,再将SP的内容减1,仍指向栈顶。 o例:将片外8500H单元中内容压入堆栈,然后弹出到40H单元中 o MOV DPTR,#800H O MOVX A,@DPTR:将片外8500H单元中的内容送到A中 O MOV SP,#30H;设置堆栈 O PUSH A;将A的内容压入堆栈 O POP A;将堆栈的内容弹到片内RAM40H单元中 o例:下面程序段执行后,A和B的值为多少? MOVA,#20H PUSH B MoV B, #30H POP A o PUSH A POP B
五、堆栈操作指令 PUSH direct;SP←(SP)+1,(SP)←(direct),压栈指令 POP direct; direct←((SP)),SP←(SP)-1,弹栈指令 PUSH:先将SP的内容加1,再将直接地址单元中的数据存入到了 SP所批示的单元中。 POP:先将堆栈指针SP所指单元的内容弹出,并送到直接寻址单 元中,再将SP的内容减1,仍指向栈顶。 例:将片外8500H单元中内容压入堆栈,然后弹出到40H单元中。 MOV DPTR,#800H MOVX A, @DPTR;将片外8500H单元中的内容送到A中 MOV SP,#30H;设置堆栈 PUSH A;将A的内容压入堆栈 POP A;将堆栈的内容弹到片内RAM40H单元中 例:下面程序段执行后,A和B的值为多少? MOV A,#20H PUSH B MOV B,#30H POP A PUSH A POP B