《单片机原理与应用系统设计 第03章 MCS-51单片机指系统及编程技术.ppt》由会员分享,可在线阅读,更多相关《单片机原理与应用系统设计 第03章 MCS-51单片机指系统及编程技术.ppt(148页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第3章 MCS-51单片机指令系统及编程技术3.1 MCS-51汇编指令概述3.2 数据传送指令3.3 算术运算指令3.4 逻辑运算指令3.5 位操作指令3.6 控制转移指令3.7 汇编程序设计举例3.8 单片机C语言程序开发及设计举例 3.1 MCS-51汇编指令概述 计算机的指令系统是一套控制计算机操作的编码,称为机器语言,计算机的指令系统是一套控制计算机操作的编码,称为机器语言,计算机内部结构的功能大部分是通过指令系统来体现的,计算机本身只计算机内部结构的功能大部分是通过指令系统来体现的,计算机本身只能识别和执行机器语言,为了便于程序员的理解和记忆,常用符号来代能识别和执行机器语言,为
2、了便于程序员的理解和记忆,常用符号来代替机器语言,称为汇编语言替机器语言,称为汇编语言,利用汇编程序可以将汇编语言翻译成机器利用汇编程序可以将汇编语言翻译成机器语言语言。MCS-51MCS-51的指令系统由的指令系统由111111条汇编指令组成,指令丰富,编程灵活条汇编指令组成,指令丰富,编程灵活。当前,当前,5151型单片机的硬件在功能、处理速度和可靠性等方面都有了很大型单片机的硬件在功能、处理速度和可靠性等方面都有了很大的发展,但其软件仍然兼容这套指令系统,下面的发展,但其软件仍然兼容这套指令系统,下面详细介绍这套指令系统。详细介绍这套指令系统。3.1 MCS-51汇编指令概述3.1.1
3、汇编指令格式及常用符号说明3.1.2 寻址方式 3.1.3 指令类型 3.1.1 汇编指令格式及常用符号说明:汇编指令格式 MCS-51 MCS-51共有共有111111条汇编指令,每天指令都由操作码和操作数所组成,条汇编指令,每天指令都由操作码和操作数所组成,格式如下:格式如下:操作码操作码 操作数操作数11,操作数,操作数22,操作数,操作数33 其中,操作码即指令助记符,由其中,操作码即指令助记符,由2 25 5个英文字母组成,例如:个英文字母组成,例如:JBJB、MOVMOV、DJNZDJNZ、LCALLLCALL。指令后可能有。指令后可能有0 03 3个操作数,但就具体的某条指令个操
4、作数,但就具体的某条指令来说,其操作数的个数是确定的来说,其操作数的个数是确定的。3.1.1 汇编指令格式及常用符号说明:伪指令 伪指令也称为汇编命令,最常用的有以下几条伪指令也称为汇编命令,最常用的有以下几条 :定位伪指令定位伪指令:ORG mORG m;m m指出该伪指令后的指令的汇编地址。指出该伪指令后的指令的汇编地址。字节定义伪指令字节定义伪指令:DB X1.DB X1.,Xi.Xi.,XnXn;XiXi(i i1,2,.,n1,2,.,n)为单字)为单字 节数据。该伪指令在程序存储器中定义一个常数表。节数据。该伪指令在程序存储器中定义一个常数表。字定义伪指令字定义伪指令:DW Y1.
5、DW Y1.,Yi,.,Yi,.,YnYn;YiYi(i i1,2,.,n1,2,.,n)为双字)为双字 节数据。该伪指令也是在程序存储器中定义一个常数表。节数据。该伪指令也是在程序存储器中定义一个常数表。汇编结束伪指令汇编结束伪指令:ENDEND;该伪指令指出结束汇编,即使后面还有指;该伪指令指出结束汇编,即使后面还有指 令,汇编程序也不作处理。令,汇编程序也不作处理。3.1.1 汇编指令格式及常用符号说明:伪指令 标号和注释标号和注释:标号加在指令之前,以字母开始,后跟:标号加在指令之前,以字母开始,后跟0 07 7个字母或个字母或 数字,并以冒号数字,并以冒号“:”:”结尾。汇编后,标号
6、的值是它后面的指令的存结尾。汇编后,标号的值是它后面的指令的存储地址。注释以分号储地址。注释以分号“;”开始,如果一行写不下,可以另起一行,开始,如果一行写不下,可以另起一行,但每行都必须以分号开始。但每行都必须以分号开始。BITBIT伪指令伪指令:将内部:将内部RAMRAM中位寻址区某一位的位地址赋值给字符串。中位寻址区某一位的位地址赋值给字符串。EQUEQU伪指令伪指令:将一个字节的数值赋给字符串。:将一个字节的数值赋给字符串。DATADATA伪指令伪指令:给一个内部的数据存储单元命名。:给一个内部的数据存储单元命名。XDATAXDATA伪指令伪指令:给一个外部的数据存储单元命名:给一个外
7、部的数据存储单元命名。3.1.1 汇编指令格式及常用符号说明:常用缩写符号符号意义指令例指令说明例A A累加器,用于指令中累加器,用于指令中CLR ACLR A0 0 (A A)(A A)累加器的内容,用于指累加器的内容,用于指令说明中令说明中INC AINC A(A A)+1+1 (A A)X X某一个寄存器某一个寄存器MOV SP,AMOV SP,A(A A)(SPSP)(X X)某一个寄存器的内容某一个寄存器的内容MOV A,SPMOV A,SP(SPSP)(A A)directdirect直接地址(包括内部直接地址(包括内部RAMRAM、SFRSFR、I/OI/O)INC direct
8、INC direct(directdirect)+1+1 (directdirect)(directdirect)直接地址指出的单元内直接地址指出的单元内容容INC 30HINC 30H(30H30H)+1+1 (30H30H)RnRn工作寄存器(工作寄存器(n n0 07 7)MOV MOV A,RnA,Rn(RnRn)(A A)指令及指令说明中常用的缩写符号说明指令及指令说明中常用的缩写符号说明 符号意义指令例指令说明例(RnRn)工作寄存器的内容工作寄存器的内容MOV A,R7MOV A,R7(R7R7)(A A)RiRi地址指针寄存器地址指针寄存器RiRi(i i0 0、1 1)MOV
9、 MOV Ri,ARi,A(A A)(RiRi)(RiRi)RiRi的内容的内容MOV MOV A,RiA,Ri(RiRi)(A A)(RiRi)RiRi指出的单元的内容指出的单元的内容 MOV MOV A,RiA,Ri(RiRi)(A A)间接寻址间接寻址MOV A,R0MOV A,R0(R0R0)(A A)#data#data立即数立即数MOV A,#7FHMOV A,#7FH7FH 7FH (A A)ABAB累加器累加器A A和寄存器和寄存器B B对对 MUL ABMUL AB(A A)(B B)(B B)(A A)3.1.1 汇编指令格式及常用符号说明:常用缩写符号指令及指令说明中常用
10、的缩写符号说明(续)指令及指令说明中常用的缩写符号说明(续)符号意义指令例指令说明例relrel相相 对对 偏偏 移移 量量,-128-128+127+127编程时写标号编程时写标号JZ JZ relreladdr11addr111111位地址位地址编程时写标号编程时写标号AJMP addr11AJMP addr11addr16addr161616位地址位地址编程时写标号编程时写标号LJMP addr16LJMP addr16$本指令的起始地址本指令的起始地址相当于本指令的标号相当于本指令的标号LJMP$LJMP$3.1.1 汇编指令格式及常用符号说明:常用缩写符号指令及指令说明中常用的缩写符
11、号说明(续)指令及指令说明中常用的缩写符号说明(续)3.1.2 寻址方式 指令获取操作数的方式称为寻址方式。指令获取操作数的方式称为寻址方式。MCS-51MCS-51共有七种寻址方式,共有七种寻址方式,分别是寄存器寻址、直接寻址、寄存器间址、立即寻址、变址寻址、相分别是寄存器寻址、直接寻址、寄存器间址、立即寻址、变址寻址、相对寻址和位寻址。对寻址和位寻址。3.1.2 寻址方式(1 1)寄存器寻址)寄存器寻址 由指令指出的寄存器的内容作为操作数。可使用的寄存器有:由指令指出的寄存器的内容作为操作数。可使用的寄存器有:R0R0 R7 R7、A A、B B、DPTRDPTR等。等。例:例:INC R
12、0INC R0;寄存器;寄存器R0R0的值加的值加1 1 3.1.2 寻址方式(2 2)直接寻址)直接寻址 在指令中包含操作数的直接地址。可直接寻址的存储空间有三种,在指令中包含操作数的直接地址。可直接寻址的存储空间有三种,分别是特殊功能寄存器(只能用直接寻址方式访问)、片内分别是特殊功能寄存器(只能用直接寻址方式访问)、片内RAMRAM的低的低128128字节和位地址空间。字节和位地址空间。例:例:MOV SP,#5FH MOV SP,#5FH;将立即数;将立即数5FH5FH送入寄存器送入寄存器SPSP ANL 70H,#48 ANL 70H,#48;第;第1 1操作数是:内部操作数是:内部
13、RAMRAM的的70H70H单元的内容单元的内容 MOV C,00H MOV C,00H ;将;将00H00H号位单元的内容送入位操作累加器号位单元的内容送入位操作累加器C C 3.1.2 寻址方式(3 3)寄存器间址)寄存器间址 寄存器的内容作为操作数的地址,可用的寄存器是:寄存器的内容作为操作数的地址,可用的寄存器是:R0R0,R1R1,DPTRDPTR。例:例:ANL A,R0 ANL A,R0 ;第;第2 2操作数是,操作数是,R0R0的内容作为地址所指向的内容作为地址所指向 ;RAMRAM单元的内容单元的内容 MOVX A,DPTR MOVX A,DPTR;第;第2 2操作数是,操作
14、数是,DPTRDPTR的内容作为地址,所指的内容作为地址,所指 ;向的外部;向的外部RAMRAM单元的内容单元的内容 3.1.2 寻址方式(4 4)立即寻址)立即寻址 操作数包含在指令中。操作数包含在指令中。例:例:MOV A,#70H MOV A,#70H ;立即数以;立即数以“#”#”为前导符,立即数就是常数为前导符,立即数就是常数(5 5)变址寻址)变址寻址 以以PCPC或或DPTRDPTR作为基址寄存器,以作为基址寄存器,以A A作为变址寄存器,相加形成作为变址寄存器,相加形成1616位位 地址,该地址即为操作数地址。地址,该地址即为操作数地址。例:例:MOVC A,A+PCMOVC
15、A,A+PC MOVC A,A+DPTR MOVC A,A+DPTR 3.1.2 寻址方式(6 6)相对寻址相对寻址 以程序计数器以程序计数器PCPC作为基址寄存器,指令中给出偏移量作为基址寄存器,指令中给出偏移量relrel(有符号(有符号 数),数),PCPC的当前内容与的当前内容与relrel之和给出操作数的实际地址。相对寻址之和给出操作数的实际地址。相对寻址 主要用于跳转指令。主要用于跳转指令。例:例:JC#09HJC#09H SJMP#1AH SJMP#1AH(7 7)位寻址)位寻址 对于可位寻址的单元,采用直接寻址方式寻址。对于可位寻址的单元,采用直接寻址方式寻址。例:例:CPL
16、00HCPL 00H;这里的;这里的00H00H是位地址是位地址 MCS-51 MCS-51有有111111条指令,可分成如下条指令,可分成如下5 5种指令类型:种指令类型:(1 1)数据传送指令()数据传送指令(2828条);条);(2 2)算术运算指令()算术运算指令(2424条);条);(3 3)逻辑运算指令()逻辑运算指令(2525条);条);(4 4)位操作指令()位操作指令(1212条);条);(5 5)控制转移指令()控制转移指令(2222条)。条)。3.1.3 指令类型 3.2 数据传送指令 数据传送操作是单片机最基本最重要的操作之一,数据传送是否快速数据传送操作是单片机最基本
17、最重要的操作之一,数据传送是否快速对程序的编写和执行速度有很大影响。对程序的编写和执行速度有很大影响。MCS-51MCS-51有有2828条数据传送指令,介绍条数据传送指令,介绍如下如下。3.2 数据传送指令3.2.1 内部数据传送指令 3.2.2 外部数据传送指令 3.2.3 查表指令 3.2.1 内部数据传送指令(1 1)以累加器)以累加器A A为目的操作数的指令为目的操作数的指令MOV MOV A,RnA,Rn;(;(RnRn)(A A)MOV MOV A,directA,direct;(;(directdirect)(A A)MOV MOV A,RiA,Ri;(;(RiRi)(A A)
18、MOV MOV A,#dataA,#data;data data (A A)这组指令的功能是把源操作数的内容送入累加器,例如:这组指令的功能是把源操作数的内容送入累加器,例如:MOV A,R6MOV A,R6;(;(R6R6)(A A)MOV A,30HMOV A,30H;(;(30H30H)(A A)MOV A,R0MOV A,R0;(;(R0R0)(A A)MOV A,#55HMOV A,#55H;55H 55H (A A)3.2.1 内部数据传送指令(2 2)以)以RnRn为目的操作数的指令为目的操作数的指令MOV MOV Rn,ARn,A;(;(A A)(RnRn)MOV MOV Rn
19、,directRn,direct;(;(directdirect)(RnRn)MOV MOV Rn,#dataRn,#data;data data (RnRn)这组指令的功能是把源操作数的内容送入当前工作寄存器,例如:这组指令的功能是把源操作数的内容送入当前工作寄存器,例如:MOV R2,AMOV R2,A;(;(A A)(R2R2)MOV R0,30HMOV R0,30H;(;(30H30H)(R0R0)MOV R7,#0AAHMOV R7,#0AAH;0AAH 0AAH (R7R7)3.2.1 内部数据传送指令(3 3)以直接寻址的单元为目的操作数的指令)以直接寻址的单元为目的操作数的指令
20、MOV MOV direct,Adirect,A;(;(A A)(directdirect)MOV MOV direct,Rndirect,Rn;(;(RnRn)(directdirect)MOV direct1,direct2MOV direct1,direct2;(;(direct2direct2)(direct1direct1)MOV MOV direct,Ridirect,Ri;(;(RiRi)(directdirect)MOV MOV direct,#datadirect,#data;data data (directdirect)这组指令的功能是把源操作数的内容送入由直接地址指出的
21、内部这组指令的功能是把源操作数的内容送入由直接地址指出的内部RAM RAM 存储单元。举例如下。存储单元。举例如下。3.2.1 内部数据传送指令(3 3)以直接寻址的单元为目的操作数的指令(续)以直接寻址的单元为目的操作数的指令(续)例如:例如:MOV P1,AMOV P1,A;(;(A A)(P1P1)MOV 40H,R2MOV 40H,R2;(;(R2R2)(40H40H)MOV 0E0H,78HMOV 0E0H,78H;(;(78H78H)(A A);(注:;(注:0E0H0E0H是是A A的的SFRSFR地址)地址)MOV 50H,R1MOV 50H,R1;(;(R1R1)(50H50
22、H)MOV 20H,#55HMOV 20H,#55H;55H 55H (20H20H)3.2.1 内部数据传送指令(4 4)以寄存器间接寻址的单元为目的操作数的指令)以寄存器间接寻址的单元为目的操作数的指令MOV MOV Ri,ARi,A;(;(A A)(RiRi)MOV MOV Ri,directRi,direct;(;(directdirect)(RiRi)MOV MOV Ri,#dataRi,#data;data data (RiRi)这组指令的功能是把源操作数的内容送入这组指令的功能是把源操作数的内容送入R0R0或或R1R1指出的内部指出的内部RAMRAM存储存储 单元中,例如:单元中
23、,例如:MOV R0,AMOV R0,A;(;(A A)(R0R0)MOV R1,7FHMOV R1,7FH;(;(7FH7FH)(R1R1)MOV R0,#80HMOV R0,#80H;80H 80H (R0R0)3.2.1 内部数据传送指令(4 4)以寄存器间接寻址的单元为目的操作数的指令(续)以寄存器间接寻址的单元为目的操作数的指令(续)又如,设(又如,设(70H70H)=60H=60H,(,(60H60H)=20H=20H,P1P1口为输入口,当前口为输入口,当前P1P1口的口的 输入状态为输入状态为0B7H0B7H,执行下面的程序:,执行下面的程序:MOV R0,#70HMOV R0
24、,#70H;70H 70H (R0R0)MOVMOVA,R0A,R0;60H 60H (A A)()(70H70H单元的内容为单元的内容为60H60H)MOV R1,AMOV R1,A;60H 60H (R1R1)MOV B,R1MOV B,R1;20H 20H (B B)(60H60H单元的内容为单元的内容为20H20H)MOV R0,P1MOV R0,P1;0B7H 0B7H (70H70H)()(P1P1口内容送到口内容送到R0R0所指单元)所指单元)结果为:(结果为:(70H70H)=B7H=B7H,(,(B B)=20H=20H,(,(R1R1)=60H=60H,(,(R0R0)=7
25、0H=70H 3.2.1 内部数据传送指令(5 5)1616位数据传送指令位数据传送指令MOV DPTR,#data16MOV DPTR,#data16;data16 data16 (DPTRDPTR)这条指令的功能是将这条指令的功能是将1616位常数送入位常数送入DPTRDPTR。(6 6)栈操作指令)栈操作指令PUSH directPUSH direct;(;(SPSP)+1 +1 (SPSP);(;(directdirect)(SPSP)POP directPOP direct;(;(SPSP)(directdirect);(;(SPSP)-1 -1 (SPSP)进栈指令进栈指令PUSH
26、PUSH首先将首先将SPSP加加1 1,然后把直接地址指出的内容送到,然后把直接地址指出的内容送到SPSP寻址寻址的单元中;出栈指令的单元中;出栈指令POPPOP首先将首先将SPSP寻址的单元中的内容送到直接地址中,然寻址的单元中的内容送到直接地址中,然后把后把SPSP减减1 1。3.2.1 内部数据传送指令(6 6)栈操作指令(续)栈操作指令(续)例如,设(例如,设(SPSP)=60H=60H,(,(A A)=30H=30H,(,(B B)=70H=70H。执行下述指令:。执行下述指令:PUSH APUSH A;(;(SPSP)+1 +1 (SPSP),(A A)(SPSP)PUSH BPU
27、SH B;(;(SPSP)+1 +1 (SPSP),(B B)(SPSP)结果为:(结果为:(61H61H)=30H=30H,(,(62H62H)=70H=70H,(,(SPSP)=62H=62H。又如,设(又如,设(SPSP)=62H=62H,(,(62H62H)=70H=70H,(,(61H61H)=30H=30H,执行下述指令:执行下述指令:POP DPHPOP DPH;(;(SPSP)(DPHDPH),(SPSP)-1 -1 (SPSP)POP DPLPOP DPL;(;(SPSP)(DPLDPL),(SPSP)-1 -1 (SPSP)结果为:(结果为:(DPTRDPTR)=7030H
28、=7030H,(,(SPSP)=60H=60H。3.2.1 内部数据传送指令(7 7)字节交换指令)字节交换指令XCH XCH A,RnA,RnXCH XCH A,directA,directXCH XCH A,RiA,Ri 这组指令的功能是将累加器这组指令的功能是将累加器A A的内容和另外一个源操作数的内容相互的内容和另外一个源操作数的内容相互 交换,例如:设(交换,例如:设(A A)=55H=55H,(,(R7R7)=0AAH=0AAH。执行指令:。执行指令:XCH A,R7XCH A,R7 结果为:(结果为:(A A)=0AAH=0AAH,(,(R7R7)=55H=55H。3.2.1 内
29、部数据传送指令(8 8)半字节交换指令)半字节交换指令XCHD XCHD A,RiA,Ri 这条指令的功能是将这条指令的功能是将A A的低的低4 4位和位和RiRi指出的指出的RAMRAM单元低单元低4 4位交换,各自位交换,各自 的高的高4 4位不变,例如:设(位不变,例如:设(A A)=15H=15H,(,(R0R0)=30H=30H,(,(30H30H)=34H=34H。执。执 行指令:行指令:XCHD A,R0XCHD A,R0 结果为:(结果为:(A A)=14H=14H,(,(30H30H)=35H=35H。3.2.2 外部数据传送指令 MOVX A,DPTRMOVX A,DPTR
30、;(;(DPTRDPTR)(A A)MOVX MOVX A,RiA,Ri;(;(RiRi)(A A)MOVX DPTR,AMOVX DPTR,A;(;(A A)(DPTRDPTR)MOVX MOVX Ri,ARi,A;(;(A A)(RiRi)上述指令的实现在累加器上述指令的实现在累加器A A和外部扩展的和外部扩展的RAM/IORAM/IO口之间的数据传送。执口之间的数据传送。执行前行前2 2条指令时,条指令时,#RD#RD引脚上有信号输出,执行后引脚上有信号输出,执行后2 2条指令时,条指令时,#WR#WR引脚上有引脚上有信号输出。执行第信号输出。执行第2 2条指令时,条指令时,P0P0口是
31、地址数据复用口,口是地址数据复用口,RiRi输出的输出的8 8位地址位地址将出现在将出现在P0P0口上。这可以用于只需要口上。这可以用于只需要8 8位地址总线的系统。如果需要更多的位地址总线的系统。如果需要更多的地址总线,可以在执行地址总线,可以在执行MOVXMOVX指令之前,安排其它口线事先输出高位地址。指令之前,安排其它口线事先输出高位地址。3.2.3 查表指令 MOVC A,A+DPTRMOVC A,A+DPTR;(;(A A)+(DPTRDPTR)(A A)MOVC A,A+PCMOVC A,A+PC;(;(A A)+(PCPC)(A A)这组指令的功能是在程序存储器空间中查找表格,例
32、如,设(这组指令的功能是在程序存储器空间中查找表格,例如,设(A A)=30H=30H。执行指令。执行指令1000H MOVC A,A+PC1000H MOVC A,A+PC后,将程序存储器中后,将程序存储器中1031H1031H单元的内容送入累加器单元的内容送入累加器A A。这条指令以这条指令以PCPC为基址寄存器,当前的为基址寄存器,当前的PCPC值是由该查表指令的存储地址值是由该查表指令的存储地址确定的:当执行该查表指令时,确定的:当执行该查表指令时,PCPC已指向下一条指令,即(已指向下一条指令,即(PCPC)=1001H=1001H。由于变址寄存器由于变址寄存器A A的内容为的内容为
33、0 0255255,所以(,所以(A A)和()和(PCPC)相加所得到的地址)相加所得到的地址只能在该查表指令以下只能在该查表指令以下256256个单元的地址内,而表格的大小也受到限制。个单元的地址内,而表格的大小也受到限制。3.2.3 查表指令 建议使用建议使用MOVC A,A+DPTRMOVC A,A+DPTR进行查表运算。例如:设(进行查表运算。例如:设(DPTRDPTR)=8100H=8100H,(A A)=40H=40H。执行指令。执行指令MOVC A,A+DPTR MOVC A,A+DPTR 后,结果将把程序存储器中后,结果将把程序存储器中8140H8140H单元中的内容送入累加
34、器单元中的内容送入累加器A A。这条指令的。这条指令的执行结果只和指针执行结果只和指针DPTRDPTR及累加器及累加器A A的内容有关,与该指令存放的地址无关,的内容有关,与该指令存放的地址无关,因此表格大小和位置可以在因此表格大小和位置可以在64K64K的程序存储器空间中任意安排,一个表格可的程序存储器空间中任意安排,一个表格可被各个程序块公用。被各个程序块公用。3.3.1 加法指令3.3.2 减法指令3.3.3 乘法指令3.3.4 除法指令 3.3 算术运算指令 3.3.1 加法指令(1 1)不带进位的加法指令不带进位的加法指令ADD ADD A,RnA,Rn;(;(A A)+(RnRn)
35、(A A)ADD ADD A,directA,direct;(;(A A)+(directdirect)(A A)ADD ADD A,RiA,Ri;(;(A A)+(RiRi)(A A)ADD ADD A,#dataA,#data;(;(A A)+data +data (A A)这组指令的功能是把指定的变量与这组指令的功能是把指定的变量与A A的内容相加,结果放在的内容相加,结果放在A A中。影响中。影响标志位标志位CYCY、ACAC、OVOV及及P P。如果位。如果位7 7(最高位)有进位,则置位(最高位)有进位,则置位CYCY,否则清零,否则清零CYCY;如果位;如果位3 3(底(底4 4
36、位中的最高位)有进位,则将置位位中的最高位)有进位,则将置位ACAC,否则清零,否则清零ACAC;如;如果位果位6 6有进位而位有进位而位7 7没有或者位没有或者位7 7有进位而位有进位而位6 6没有,则置位没有,则置位OVOV,否则,清零,否则,清零OVOV;运算结果中二进制数位;运算结果中二进制数位“1”1”的个数若为奇数,则置位的个数若为奇数,则置位P P,否则清零,否则清零P P。3.3.1 加法指令(2 2)带进位加法指令)带进位加法指令ADDC ADDC A,RnA,Rn;(;(A A)+(C C)+(RnRn)(A A)ADDC ADDC A,directA,direct;(;(
37、A A)+(C C)+(directdirect)(A A)ADDC ADDC A,RiA,Ri;(;(A A)+(C C)+(RiRi)(A A)ADDC ADDC A,#dataA,#data;(;(A A)+(C C)+data +data (A A)这组指令的功能是把指定的字节变量、进位标志与这组指令的功能是把指定的字节变量、进位标志与A A的内容相加,其结的内容相加,其结果放在果放在A A中。对标志位的影响和不带进位的加法指令相同。中。对标志位的影响和不带进位的加法指令相同。例如:设(例如:设(A A)=85H=85H,(,(20H20H)=0FFH=0FFH,CY=1CY=1。执行
38、指令:。执行指令:ADDC A,20HADDC A,20H 结果为:(结果为:(A A)=85H,CY=1,AC=0,OV=0=85H,CY=1,AC=0,OV=0,P=1P=1。3.3.1 加法指令(3 3)增量指令)增量指令INC AINC A;(;(A A)+1 +1 (A A)INC INC RnRn;(;(RnRn)+1 +1 (RnRn)INC directINC direct;(;(directdirect)+1 +1 (directdirect)INC INC RiRi;(;(RiRi)+1 +1 (RiRi)INC DPTRINC DPTR;(;(DPTRDPTR)+1 +1
39、 (DPTRDPTR)这组指令的功能是把指定的变量加这组指令的功能是把指定的变量加1 1,若变量值原为,若变量值原为0FFH0FFH,运算后将,运算后将溢出为溢出为00H00H。不影响任何标志(除(。不影响任何标志(除(A A)加)加1 1影响影响P P外)。使用本指令修改输外)。使用本指令修改输出口出口PiPi(i=0,1,2,3i=0,1,2,3)时,原来的端口数据的值将从口锁存器读入,而不是)时,原来的端口数据的值将从口锁存器读入,而不是从引脚读入。从引脚读入。3.3.1 加法指令(3 3)增量指令(续)增量指令(续)例如:设(例如:设(A A)=0FFH=0FFH,(,(R3R3)=0
40、FH=0FH,(,(30H30H)=0F0H=0F0H,(,(R0R0)=40H=40H,(40H40H)=00H=00H。执行指令:。执行指令:INC AINC AINC R3INC R3INC 30HINC 30HINC R0INC R0 结果为:(结果为:(A A)=00H,=00H,(R3R3)=10H=10H,(,(30H30H)=0F1H=0F1H,(,(40H40H)=01H=01H,不改变不改变PSWPSW的值。的值。3.3.1 加法指令(4 4)十进制调整指令)十进制调整指令DA ADA A 这条指令用于对累加器中由前两个变量(每一个变量均为压缩的这条指令用于对累加器中由前两
41、个变量(每一个变量均为压缩的BCDBCD码形式)相加所获得的码形式)相加所获得的8 8位结果进行调整,将它调整为二位位结果进行调整,将它调整为二位BCDBCD码的数。该码的数。该指令的调整操作如下图所示。指令的调整操作如下图所示。3.3.1 加法指令DA ADA A指令的调整操作指令的调整操作 3.3.1 加法指令(4 4)十进制调整指令(续)十进制调整指令(续)例如,设(例如,设(A A)=56H=56H,(,(R5R5)=67H=67H。执行指令:。执行指令:ADD A,R5ADD A,R5DA ADA A 结果为:(结果为:(A A)=23H=23H,CY=1CY=1。再如,要完成。再如
42、,要完成6 6位十进制加运算,即实现位十进制加运算,即实现(32H32H)()(31H31H)()(30H30H)+(42H42H)()(41H41H)()(40H40H)(52H52H)()(51H51H)()(50H50H)假设假设32H32H、31H31H、30H30H、42H42H、41H41H、40H40H中的数均为二位压缩中的数均为二位压缩BCDBCD码,则程码,则程序如下:序如下:3.3.1 加法指令MOV A,30HMOV A,30HADD A,40HADD A,40H;(;(30H30H)+(40H40H)(A A)DA ADA A;对(;对(A A)十进制调整后)十进制调整
43、后 (50H50H)MOV 50H,AMOV 50H,AMOV A,31H MOV A,31H ADDC A,41HADDC A,41H;(;(31H31H)+(41H41H)+CY +CY (A A)DA ADA A;对(;对(A A)十进制调整后)十进制调整后 (51H51H)MOV 51H,AMOV 51H,AMOV A,32HMOV A,32HADDC A,42HADDC A,42H;(;(32H32H)+(42H42H)+CY +CY (A A)DA ADA A;对(;对(A A)十进制调整后)十进制调整后(52H52H)MOV 52H,AMOV 52H,A 3.3.2 减法指令(1
44、 1)带借位减法指令)带借位减法指令SUBB SUBB A,RnA,Rn;(;(A A)-(C C)-(RnRn)(A A)SUBB SUBB A,directA,direct;(;(A A)-(C C)-(directdirect)(A A)SUBB SUBB A,RiA,Ri;(;(A A)-(C C)-(RiRi)(A A)SUBB SUBB A,#dataA,#data;(;(A A)-(C C)-data -data (A A)这组指令的功能是从累加器中减去指定的变量和借位标志,结果存放这组指令的功能是从累加器中减去指定的变量和借位标志,结果存放在累加器中,影响标志位在累加器中,影响
45、标志位CYCY、ACAC、OVOV及及P P。如果位。如果位7 7需借位,则置位需借位,则置位CYCY,否,否则清零则清零CYCY;如果位;如果位3 3需借位,则置位需借位,则置位ACAC,否则清零,否则清零ACAC;如果位;如果位6 6需借位而位需借位而位7 7不需借位或者位不需借位或者位7 7需借位而位需借位而位6 6不需借位,则置位不需借位,则置位OVOV,否则,清零,否则,清零OVOV;运算;运算结果中的二进制数位结果中的二进制数位“1”1”的个数若为奇数,则置位的个数若为奇数,则置位P P,否则清零,否则清零P P。例如,设(例如,设(A A)=0C9H=0C9H,(,(R2R2)=
46、54H=54H,CY=1CY=1。执行指令:。执行指令:SUBB A,R2SUBB A,R2结结果为:(果为:(A A)=74H=74H,CY=0CY=0,AC=0AC=0,OV=0OV=0,P=0P=0。3.3.2 减法指令(2 2)减)减1 1指令指令DEC ADEC A;(;(A A)-1 -1 (A A)DEC DEC RnRn;(;(RnRn)-1 -1 (RnRn)DEC directDEC direct;(;(directdirect)-1 -1 (directdirect)DEC DEC RiRi;(;(RiRi)-1 -1 (RiRi)这组指令的功能是把指定的变量减这组指令的
47、功能是把指定的变量减1 1,若原来为,若原来为00H00H将下溢为将下溢为0FFH0FFH,不,不影响任何标志(除(影响任何标志(除(A A)减)减1 1影响影响P P外)。使用本指令修改输出口外)。使用本指令修改输出口PiPi(i=0,1,2,3i=0,1,2,3)时,原来的端口数据值从口锁存器读入,而不是从引脚读)时,原来的端口数据值从口锁存器读入,而不是从引脚读入。入。3.3.2 减法指令(2 2)减)减1 1指令(续)指令(续)例如,设(例如,设(A A)=0FH=0FH,(,(R7R7)=19H=19H,(,(30H30H)=00H=00H,(,(R1R1)=40H=40H,(40H
48、40H)=0FFH=0FFH。执行指令:。执行指令:DEC ADEC ADEC R7DEC R7DEC 30HDEC 30HDEC R1DEC R1 结果为:(结果为:(A A)=0EH=0EH,P=1P=1,(,(R7R7)=18H=18H,(,(30H30H)=0FFH=0FFH,(40H40H)=0FEH=0FEH,不影响其它标志。,不影响其它标志。3.3.3 乘法指令MUL ABMUL AB;(;(A A)(B B)(B B)()(A A)这条指令的功能是把累加器这条指令的功能是把累加器A A和寄存器和寄存器B B中的中的8 8位无符号整数相乘,其位无符号整数相乘,其1616位积的低位
49、字节存放在位积的低位字节存放在A A中,高位字节存放在中,高位字节存放在B B中。如果乘积大于中。如果乘积大于255255,则,则置位置位OVOV,否则清零,否则清零OVOV。进位标志总是清零。例如,设(。进位标志总是清零。例如,设(A A)=50H=50H,(B B)=0A0H=0A0H,执行指令:,执行指令:MUL ABMUL AB 结果为:(结果为:(B B)=32H=32H,(,(A A)=00H=00H,即乘积为,即乘积为3200H3200H;OV=1OV=1。3.3.4 除法指令DIV ABDIV AB;(;(A A)/(B B)(A A)(B B)该指令的功能是把累加器该指令的功
50、能是把累加器A A中的中的8 8位无符号整数除以寄存器位无符号整数除以寄存器B B中的中的8 8位无位无符号整数,结果的商存放在累加器符号整数,结果的商存放在累加器A A中,余数存放在中,余数存放在B B中。如果原来中。如果原来B B中的内中的内容为容为0 0,则结果,则结果A A和和B B中的内容不定,并置位中的内容不定,并置位OVOV。进位标志总是清零。进位标志总是清零。例如,设(例如,设(A A)=0FBH=0FBH,(,(B B)=12H=12H,执行指令,执行指令:DIV ABDIV AB 结果为:(结果为:(A A)=0DH=0DH,(,(B B)=11H=11H,CY=0CY=0