《3MCS-51单片机指令系统.ppt》由会员分享,可在线阅读,更多相关《3MCS-51单片机指令系统.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第三章、第三章、 MCSMCS-51单片机指令系统单片机指令系统 3.1 指令的格式、常用符号指令的格式、常用符号 3.2 指令分类指令分类 3.3 寻址方式寻址方式3.1.1 指令格式指令格式 汇编语言汇编语言指令格式:指令格式:【标号:】操作码【标号:】操作码 【(目的操作数),(源操作数)】;【注释】【(目的操作数),(源操作数)】;【注释】(1)标)标 号:符号地址号:符号地址(2)操作码:指明执行什么性质和类型的操作。)操作码:指明执行什么性质和类型的操作。(3)操作数:指明操作数本身或者是它所在的)操作数:指明操作数本身或者是它所在的 地址。地址。(4)注)注 释:对指令的解释、
2、说明释:对指令的解释、说明返回本节指令格式举例:指令格式举例: MOV A,#00H MOV R7,#30H MOV R0,#30HLOOP:MOV R0,A ;(;(R0) (A) INC R0 DJNZ R7,LOOP SJMP $3.1.2 指令常用描述符号指令常用描述符号Rn 当前选中的寄存器区中的当前选中的寄存器区中的8个工作寄存个工作寄存器器R0R7(n=07)。)。Ri 当前选中的寄存器区中的当前选中的寄存器区中的2个工作寄存个工作寄存器器R0、R1(i=0,1)。)。direct8位的内部数据存储器单元中的地址。位的内部数据存储器单元中的地址。#data包含在指令中的包含在指令
3、中的8位常数。位常数。#data16包含在指令中的包含在指令中的16位常数。位常数。rel8位带符号的偏移字节,简称偏移量。位带符号的偏移字节,简称偏移量。DPTR数据指针,可用作数据指针,可用作16位地址寄存器。位地址寄存器。bit内部内部RAM或专用寄存器中的直接寻址或专用寄存器中的直接寻址位。位。A累加器。累加器。B专用寄存器,用于乘法和除法指令中。专用寄存器,用于乘法和除法指令中。 C进位标志或进位位,或布尔处理机中进位标志或进位位,或布尔处理机中 的累加器的累加器 间址寄存器或基址寄存器的前缀,如间址寄存器或基址寄存器的前缀,如 Ri,DPTR。 (R1) R1中的内容。中的内容。(
4、R1)R1中的内容作地址来找到的内容中的内容作地址来找到的内容。返回本节3.2 分类指令分类指令 3.21 数据传送类指令数据传送类指令 3.2.2 算术运算类指令算术运算类指令 3.2.3 逻辑运算与循环类指令逻辑运算与循环类指令 3.2.4 程序转移类指令程序转移类指令 3.2.5 调用子程序及返回指令调用子程序及返回指令 3.2.6 位操作指令位操作指令 3.2.7 空操作指令空操作指令返回本章首页3.2.1 数据传送类指令数据传送类指令 数据传送类指令是将源操作数送到目的数据传送类指令是将源操作数送到目的操作数。指令执行后,操作数。指令执行后,源操作数不变源操作数不变,目的目的操作数被
5、源操作数取代操作数被源操作数取代。 数据传送类指令用到的助记符有数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP。MCS-51单片机数据传送关系示意图寄存器 Rn累加器 A立即数#data直接地址direct间接地址Ri外部RAMROMMOVXMOVC1以以A为目的操作数为目的操作数MOV A,Rn;(;(A)( Rn)MOV A,direct ;(;(A)(direct)MOV A,Ri;(;(A)(Ri)MOV A,#data ;(;(A) #data2以Rn为目的操作数MOV Rn,A ;(;(Rn) ( A)MOV Rn,direct
6、;(;(Rn )(direct)MOV Rn,#data ;(;(Rn) #data3以直接地址为目的操作数以直接地址为目的操作数MOV direct ,A ; (direct) ( A)MOV direct ,direct;(;(direct) (direct)MOV direct ,#data; (direct) #data4以间接地址为目的操作数MOV Ri,A;(;(Ri) (A)MOV Ri,direct; (Ri) (direct)MOV Ri,#data; (Ri) #data 例如:设(例如:设(30H)=6FH,R1=40H,执行,执行 MOV R1,30H后,后,30H单元
7、中数据取出单元中数据取出送入送入R1间接寻址的间接寻址的40H单元,(单元,(40H)=6FH。5以以DPTR为目的操作数为目的操作数MOV DPTR,#data16;(;(DPTR) #data16例如执行例如执行 MOV DPTR,#2000H 后,后,(DPTR)= 2000H。 6访问外部数据访问外部数据RAM MOVX A,DPTR;A (DPTR)MOVX DPTR,A;(;(DPTR) (A)MOVX A,Ri ;A (P2Ri)MOVX Ri,A ;(;(P2Ri) A7读程序存储器读程序存储器MOVC A,A+DPTR;(;(A)(A)+(DPTR)MOVC A,A+PC;(
8、;(A) (A)+(PC)例如:已知(例如:已知(A)=30H,(,(DPTR)=3000H, 程序存程序存储器单元(储器单元(3030H)=50H,执行,执行 MOVC A, A+DPTR后,(后,(A)=50H。8数据交换数据交换l l 字节交换字节交换XCH A,Rn;(;(A) (Rn)XCH A ,direct ;(;(A)(direct)XCH A,Ri;(;(A)(Ri)l l 半字节交换半字节交换XCHD A,Ri ;(;(A)03(Ri)03SWAP A;(;(A)03(A)479堆栈操作 所谓堆栈是在片内所谓堆栈是在片内RAM中按中按“先进后出,后先进后出,后进先出进先出”
9、原则设置的专用存储区。数据的进原则设置的专用存储区。数据的进栈出栈由指针栈出栈由指针SP统一管理。堆栈的操作有如统一管理。堆栈的操作有如下两条专用指令:下两条专用指令: PUSH direct; (SP ) (SP ) +1,(,(SP)(direct) POP direct ;(direct)(SP),(),(SP) ( SP)-1 PUSH是进栈(或称为压入操作)指令。指是进栈(或称为压入操作)指令。指令执行过程如图所示。令执行过程如图所示。片内RAM30H11H10HSP片内RAM50H40H11H10HSP40H30H片内RAM50H40H11H10H50HSP30H片内RAM40H1
10、1H10H34HSP30H34H34H执行前执行前执行PUSH 40H 指令后执行POP 30H指令后指令PUSH操作示意图指令POP操作示意图【例【例3.1】 将片内将片内RAM 30H单元与单元与40H单元中的内单元中的内容互换。容互换。方法方法1(直接地址传送法):(直接地址传送法): MOV 31H,30H MOV 30H,40H MOV 40H,31H SJMP $30H31H40H132方法方法2(字节交换传送法):(字节交换传送法): MOVA,30H XCH A,40H MOV30H,A SJMP$返回本节30HA40H1323.2.2 算术运算类指令算术运算类指令1加法指令加
11、法指令ADD A,Rn; (A) (A) + (Rn)ADD A,direct; (A) (A) +(direct)ADD A,Ri;(;(A) (A) +(Ri)ADD A,#data; (A) (A) + #data2带进位加指令带进位加指令ADDC A,Rn; (A) (A) + (Rn) + (C)ADDC A,direct; (A) (A) +(direct)+ (C)ADDC A,Ri;(;(A) (A) +(Ri)+ (C)ADDC A,#data; (A) (A) + #data + (C)C为来自为来自PSW状态寄存器中的进位位状态寄存器中的进位位CY。例如例如:设设(A)=
12、20H,(R0)=21H,C=1,执行指令,执行指令 ADDC,R0后,后,(A)=42H (C)=0 。3带借位减指令带借位减指令SUBB A,Rn;(;(A) (A) -( Rn) -(C)SUBB A,direct;(;(A)( A) -(direct)-(C)SUBB A,Ri;(;(A) (A) -(Ri)-(C)SUBB A,#data;(;(A) (A) - #data (C)例如,设例如,设(A)=39H,(R0)=20H,(,(20H)=32H,(C)=1,执行指令执行指令 SUBB ,R0后,后,A=06H ,(C)=0 。4乘法指令乘法指令MUL AB ;(;(B)815
13、(A)07(A)(B)A和和B中各存放一个中各存放一个8位无符号数,指令执行后位无符号数,指令执行后16位乘积的高位乘积的高8位在位在B中,低中,低8位存位存A中。中。例如例如:(A)=30H,(B)=60H,执行,执行 MUL AB 后,后,(A)=00H,(B)=12H。 5除法指令除法指令 DIV AB ;(;(A)/(B)商在商在A中,余在中,余在B中中 A和和B中各存放一个中各存放一个8位无符号数,位无符号数,A放被除数,放被除数,B放除数。指令执行后,放除数。指令执行后,A中存放商,中存放商,B中存入中存入余数。若余数。若B=00H,则指令执行后,则指令执行后OV=1,A与与B不变
14、。不变。 例如,例如,A=(30)H,(B)=07H,执行,执行 DIV AB 后,后,(A)=06H,(B)=06H。6加加1指令指令INC A;(A) (A) + 1INC Rn;(Rn)( Rn) + 1INC direct ;(;(direct) (direct)+ 1INC Ri;((Ri))((Ri))+ 1INC DPTR;(DPTR) (DPTR) + 1例如,(例如,(30H)=22H,执行,执行 INC 30H 后,后,(30H)=23H。7减减1指令指令DEC A;(A) (A) - 1DEC Rn;(Rn) (Rn) - 1DEC direct;(direct) (di
15、rect)- 1DEC Ri ;((Ri))((Ri))- 1例如:例如:(R0)=30H,(,(30H)=22H,执行,执行 DEC R0 后,(后,(30H)=21H,(R0)=30H。8十进制调整指令十进制调整指令DA A ;把;把A中按二进制相加的结果调整成按中按二进制相加的结果调整成按BCD码相加的结果码相加的结果例如,例如,A=65BCD,B=78BCD,C=0,执行下列语,执行下列语句句 ADD A,B DA A后,后,A=43 BCD,C=1。【例】【例】 试把存放在试把存放在R1R2和和R3R4中的两个中的两个16位位数相加,结果存于数相加,结果存于R5R6中。中。解:参考程
16、序如下:解:参考程序如下: MOVA,R2;取第一个数的低;取第一个数的低8位位 ADDA,R4;两数的低;两数的低8位相加位相加 MOVR6,A;保存和的低;保存和的低8位位 MOVA,R1;取第一个数的高;取第一个数的高8位位 ADDCA,R3;两数的高;两数的高8位带位带C相加相加 MOVR5,A;把结果存入;把结果存入R5中中 SJMP $ 返回本节3.2.3 逻辑运算与循环类指令逻辑运算与循环类指令1“与与”操作指令操作指令 ANL2“或或”操作指令操作指令 ORL3“异或异或”操作指令操作指令 XRL4求反与清除指令求反与清除指令 CPL CRL5循环指令循环指令 RL 、 RR
17、、 RLC 、 RRC返回本节3.2.4 程序转移类指令程序转移类指令1无条件转移指令无条件转移指令绝对转移指令绝对转移指令 AJMP长转移指令长转移指令 LJMP短转移指令短转移指令 SJMP间接转移指令间接转移指令 JMP2条件转移指令条件转移指令累加器为零(非零)转移指令累加器为零(非零)转移指令 JZ 、JNZCY为零(为零(1)转移指令)转移指令 JNC、 JC减减1非零转移指令非零转移指令 DJNZ 两数不等转移指令两数不等转移指令 CJNE3.2.5 调用子程序及返回指令调用子程序及返回指令1调用子程序指令调用子程序指令 LCALL LCALL 长调用长调用 ACALL ACAL
18、L 绝对调用绝对调用2返回指令返回指令 RET 子程序返回子程序返回 RETI 中断返回中断返回3.2.6 位操作指令位操作指令1位数据传送指令位数据传送指令MOV C,bit;(;(C)(bit)MOV bit,C;(;(bit)(C)2位状态修改指令位状态修改指令CLRC;C0CLRbit;(;(bit)0CPLC;CCPLbit;(;(bit)(bit)SETB C;C1SETB bit;(;(bit)13位逻辑运算指令位逻辑运算指令ANL C,bit;CC(bit)ANL C,/bit;CC(bit)ORL C,bit;CC(bit)ORL C,/bit;CC(bit) 4位转移指令位
19、转移指令JCrel; 若若C=1,则转移(则转移(PCPC+2+rel);否则程序顺序执行);否则程序顺序执行JNC rel; 若若C=0,则转移(则转移(PCPC+2+rel);否则程序顺序执);否则程序顺序执JBbit,rel; 若若(bit)=1,则转移(则转移(PCPC+3+rel);否则程序顺序执行);否则程序顺序执行JNB bit,rel; 若若(bit)=0,则转移(则转移(PCPC+3+rel);否则程序顺序执行);否则程序顺序执行JBC bit,rel; 若若(bit)=1,则则PCPC+3+rel,(,(bit)0;否则程序顺序;否则程序顺序执行执行功能:分别检测指定位是功
20、能:分别检测指定位是1还是还是0,若条件符合,若条件符合,则则CPU转向指定的目标地址去执行程序;否转向指定的目标地址去执行程序;否则,顺序执行下条指令。则,顺序执行下条指令。 返回本节3.2.7 空操作指令空操作指令 NOP ;(;(PC) ( PC)+1 这是一条单字节指令。执行时,不作任何操这是一条单字节指令。执行时,不作任何操作(即空操作),仅将程序计数器作(即空操作),仅将程序计数器PC的内容的内容加加1,使,使CPU指向下一条指令继续执行程序。指向下一条指令继续执行程序。这条指令常用来产生一个机器周期的时间延这条指令常用来产生一个机器周期的时间延迟。迟。返回本节常见错误指令:常见错
21、误指令: MOV R0,R1 PUSH #30H MOVX A,A+DPTR XCH R0,30H ADD A,DPTR SUBB B,A DEC DPTR MOV R2,A MOV R0,R7 MOVX A,40H XCHD A,R0 MUL A*B 3.2 寻址方式寻址方式 3.3.1 立即寻址立即寻址 3.3.2 直接寻址直接寻址 3.3.3 寄存器寻址寄存器寻址 3.3.4 寄存器间接寻址寄存器间接寻址 3.3.5 变址寻址变址寻址 3.3.6 相对寻址相对寻址 3.3.7 位寻址位寻址返回本章首页3.3.1 立即寻址立即寻址指令中直接给出操作数的寻址方式。指令中直接给出操作数的寻址方
22、式。MOV A,# 60H;(;(A)#60H MOV DPTR,# 3400H ;(;(DPTR)#3400HMOV 30H,# 40H;(;(30H)#40H 返回本节3.3.2 直接寻址直接寻址指令中直接给出操作数地址的寻址方式指令中直接给出操作数地址的寻址方式。 MOVA,30H; (A) (30H) MOV40H,50H ;(;(40H)(50H) MOVR0,60H; (R0) (60H)返回本节3.3.3 寄存器寻址寄存器寻址以通用寄存器的内容为操作数的寻址方式。以通用寄存器的内容为操作数的寻址方式。 CLR A;(;(A)0 INC DPTR;(;(DPTR)(DPTR)+1
23、ADD A,R0;(;(A)(A) +(R0)返回本节3.3.4 寄存器间接寻址寄存器间接寻址以寄存器中内容为地址,以该地址中内容为操作数以寄存器中内容为地址,以该地址中内容为操作数的寻址方式。的寻址方式。 MOV A , R0 ; (A)(R0)MOVX A ,DPTR ; (A)( DPTR )3.3.5 变址寻址变址寻址变址寻址只能对程序存储器中数据进行操作。变址寻址只能对程序存储器中数据进行操作。MOVC A, A+DPTR ;(;(A)(A)+(DPTR)3.3.6 相对寻址相对寻址 以当前程序计数器以当前程序计数器PC的内容为基础,加上指的内容为基础,加上指令给出的一字节补码数(偏
24、移量)形成新的令给出的一字节补码数(偏移量)形成新的PC值的寻址方式。值的寻址方式。 相对寻址用于修改相对寻址用于修改PC值,主要用于实现程序值,主要用于实现程序的分支转移。的分支转移。 SJMP 08H ;PCPC+2+08H3.3.7 位寻址位寻址 位寻址只能对有位地址的单元作位寻址操作。位寻址只能对有位地址的单元作位寻址操作。 位寻址其实是一种直接寻址方式,不过其地位寻址其实是一种直接寻址方式,不过其地址是位地址。址是位地址。如:如:MOV 32H,C ;32H进位位进位位C ORL C ,32H ;CC32H返回本节问题:下面程序的作用?问题:下面程序的作用? MOV A,#00H MOV R7,#30H MOV R0,#30HLOOP:MOV R0,A INC R0 DJNZ R7,LOOP SJMP $把把30H开始的开始的48个地址全部清零个地址全部清零问题:下面程序的作用?问题:下面程序的作用? DELAY: MOV R1,#127 DEL1: MOV R2,#200 DEL2: DJNZ R2,DEL2 DJNZ R1,DEL1 RET延延 时时