例:MOVA, @A+DPTR MOV A,@A+PC 7.位寻址 对一些内部数据存储器RAM和特殊功能寄存器进行位操作时的 寻址。位地址寻址与字节直接寻址中的字节地址形式完全一样,主要 由操作码加以区分,使用时要注意。 3.2MCS-51指令 MCS-51单片机指令按其功能分为5大类:数据传送类、算术运 算类、逻辑运算类、控制转移类和位操作类。 3.2.1数据传送指令 格式:MOV[目的操作数][,源操作数];注释 1.传送指令 用途:单片机内部的数据存储器和寄存器之间的数据传送。 寻址方式:立即、直接、寄存器和寄存器间接寻址。 direct @Ri #data Rn 图2-1内部8位数据示意图 1
17 例:MOV A,@A+DPTR MOV A,@A+PC 7. 位寻址 对一些内部数据存储器 RAM 和特殊功能寄存器进行位操作时的 寻址。位地址寻址与字节直接寻址中的字节地址形式完全一样,主要 由操作码加以区分,使用时要注意。 3.2 MCS-51 指令 MCS-51 单片机指令按其功能分为 5 大类:数据传送类、算术运 算类、逻辑运算类、控制转移类和位操作类。 3.2.1 数据传送指令 格式:MOV [目的操作数][,源操作数];注释 1. 传送指令 用途:单片机内部的数据存储器和寄存器之间的数据传送。 寻址方式:立即、直接、寄存器和寄存器间接寻址。 图 2-1 内部 8 位数据示意图 A @Ri #data Rn direct
以累加器A为目的操作数的指令 MOV A,Rn;n=07 MOV A,direct MOV A,@Ri:i=0,1 MOV A,#data 以Rn为目的操作数的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data;n=07 以直接地址为目的操作数的操作指令 MOV direct,A MOV direct,Rn MOV direct,@Ri MOV direct,#data MOV direct,direct 以寄存器间接寻址的单元为目的操作数的指令 MOV @Ri,A MOV @Ri,direct MOV @Ri,#data 例:设内部RAM的30H单元内容为50H,试分析下面程序执行后 各有关单元的内容。 伊
18 以累加器 A 为目的操作数的指令 MOV A,Rn; n=0~7 MOV A,direct MOV A,@Ri; i=0,1 MOV A,#data 以 Rn 为目的操作数的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data; n=0~7 以直接地址为目的操作数的操作指令 MOV direct,A MOV direct,Rn MOV direct,@Ri MOV direct,#data MOV direct,direct 以寄存器间接寻址的单元为目的操作数的指令 MOV @Ri,A MOV @Ri,direct MOV @Ri,#data 例:设内部 RAM 的 30H 单元内容为 50H,试分析下面程序执行后 各有关单元的内容
M0V60H,#30H M0VR0.#60h MOV A,@RO MOV R1,A M0V40h,@R1 M0V60h,30h 2.16位数据传送指令 MOV DPTR,#data16 3.堆栈操作指令 PUAH direct; (SP)+1→(SP) ;(direct)→((SP)) POP direct; ((SP))→(direct) :(SP)-1→(SP) 例:MOV DPTR,#15H PUSH DPL PUSH DPH PUSH A POP A POP DPH POP DPL 初始化时,一般应用SP(堆栈指针)设置堆栈为内部RAM的高 端,上电复位时, 9
19 MOV 60H,#30H MOV R0,#60h MOV A,@R0 MOV R1,A MOV 40h,@R1 MOV 60h,30h 2. 16 位数据传送指令 MOV DPTR,#data16 3. 堆栈操作指令 PUAH direct; (SP)+1→(SP) ; (direct)→((SP)) POP direct; ((SP))→(direct) ; (SP)-1→(SP) 例: MOV DPTR,#15H PUSH DPL PUSH DPH PUSH A POP A POP DPH POP DPL 初始化时,一般应用 SP(堆栈指针)设置堆栈为内部RAM的高 端,上电复位时
(SP)=07H。 4.字节(半字节)交换指令 SWAP XCH XCH @Ri A Rn XCHD XCH direct 图2-2数据交换指命示意图 字节交换指令 XCH A,Rn XCH A,direct XCH A,@Ri 例:(A)=0ABH,(R1)=12H XCH A,R1;(A)=12h,(R1)=0ABh 累加器A的半字节交换指令 SWAP A;A的高4位与低4位互换 例:(A)=abH; SWAP A; (A)=bah 半字节交换指令 XCHD A,@Ri;i=0,1 将A的低4位与@Ri的低4位交换,各自的高4位不变。 例:(A)=12h,(R0)=30h,(30h)=45h; 20
20 (SP)=07H。 4.字节(半字节)交换指令 图 2-2 数据交换指令示意图 字节交换指令 XCH A,Rn XCH A,direct XCH A,@Ri 例:(A)=0ABH,(R1)=12H XCH A,R1; (A)=12h,(R1)=0ABh 累加器A的半字节交换指令 SWAP A ; A 的高4位与低4位互换 例:(A)=abH; SWAP A; (A)=bah 半字节交换指令 XCHD A,@Ri; i=0,1 将A的低4位与@Ri 的低4位交换,各自的高4位不变。 例:(A)=12h,(R0)=30h,(30h)=45h; @Ri A Rn direct XCHD XCH XCH SWAP XCH
xchd a,@r0;(A)=15h,(30h)=42h 5.累加器A与外部数据存储器之间的数据传送指令 MOVX A,@DPTR MOVX @DPTR,A MOVX A,@Ri;i=0,1 MOVX @Ri,A; 注:累加器A与外部扩展的RAM或I/O口的数据传送指令。 外部RAM和I/O口是统一编址的,共64KB的空间。 例:MOV dptr,#2000h MOVX a,@dptr MOV 60h,A 6.查表指令 MOVC A,@A+DPTR MOVC A,@A+PC 注:寻址空间为程序存储器,将地址 A十DPTR或A十PC对应单元的内容送累加器。 例:1232H:mova,#30h 1234H:movc a,@A+PC 1235H:mov 60h,a ….… 1265H:3FH 执行查表指令时,(PC)=1235H,故(A+PC)=1 21
21 xchd a,@r0;(A)=15h,(30h)=42h 5. 累加器A与外部数据存储器之间的数据传送指令 MOVX A,@DPTR MOVX @DPTR,A MOVX A,@Ri;i=0,1 MOVX @Ri,A; 注:累加器A与外部扩展的RAM或I/O口的数据传送指令。 外部RAM和I/O口是统一编址的,共64KB的空间。 例:MOV dptr,#2000h MOVX a,@dptr MOV 60h,A 6. 查表指令 MOVC A,@A+DPTR MOVC A,@A+PC 注:寻址空间为程序存储器,将地址 A+DPTR或A+PC对应单元的内容送累加器。 例:1232H: mov a,#30h 1234H:movc a,@A+PC 1235H:mov 60h,a ….. 1265H:3FH 执行查表指令时,(PC)=1235H,故(A+PC)=1