60 likes | 179 Views
数据传送类指令. 指令特点: 1 、把源操作数传送到目的操作数,指令执行后,源操作数不变,目的操作数修改为源操作数; 2 、除传送到了 A 的指令外,一般不影响 PSW 中的标志位; 3 、涉及到了的助记符:片内 RAM : MOV 、 PUSH 、 POP 、 XCH 、 XCHD 、 SWAP 片外 RAM : MOVX 片内外 ROM : MOVC 一、内部 RAM 的数据传送指令 1 、与累加器有关的传送指令 实现 A 与不同寻址方式所指定的 RAM 单元之间的数据传送。
E N D
数据传送类指令 指令特点: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、立即数传送指令 • 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之间的数据传送指令 • 只能与累加器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
三、程序存储器取数指令 • 完成从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中。
内部RAM A 四、数据交换指令 • 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
五、堆栈操作指令 • 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