《单片机课件第3章.ppt》由会员分享,可在线阅读,更多相关《单片机课件第3章.ppt(114页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第3章 MCS-51系列单片机的指令系统 3.1 指令格式及分类 3.2 寻址方式 3.3 数据传送类指令 3.4 算术运算类指令 3.5 逻辑操作与移位操作类指令 3.6 位操作类指令 3.7 控制转移类指令 习题与思考题 第第3章章 MCS-51系列单片机的指令系统系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 3.1 指令格式及分类指令格式及分类3.1.1 指令格式指令格式由于用二进制编码表示的机器语言指令不便于阅读、理解和记忆,因此,在微机控制系统中采用汇编语言(用助记符和专门的语言规则表示指令的功能和特征)指令来编写程序。一条汇编语言指令中最多包含四个区段:标号:操作
2、码助记符 目的操作数,源操作数;注释例如,把立即数F0H送累加器的指令为 START:MOV A,#0F0H ;立即数F0H(A)标号区段是由用户定义的符号组成,必须由英文字母开始,标号区段可缺省。若一条指令中有标号区段,标号代表该指令第一个字节所存放的存储器单元的地址,故标号又称为符号地址,则在汇编时把该地址赋值给标号。第3章 MCS-51系列单片机的指令系统 操作码区段是指令要操作的数据信息,根据指令的不同功能实现不同的操作。如数据传送、算术运算、逻辑运算、程序转移、调用子程序等。操作数区段表示参加操作的操作数本身或操作数所在的地址。不同类型的指令,操作数也不相同,可以有三个、两个、一个或
3、没有操作数。上例指令中操作数区段包含两个操作数A和#0F0H,它们之间由逗号分隔开。其中第二个操作数为立即数F0H,它是用十六进制数表示的以字母开头的数据,为区别于操作数区段出现的字符,故在字母开始的十六进制数据前面都要加0,把立即数F0H写成0F0H(这里H表示此数为十六进制数,若后缀为B则表示二进制,十进制后缀为D或省略)。第3章 MCS-51系列单片机的指令系统 注释区段可缺省,对程序功能无任何影响,只用来对指令或程序段作简要的说明,便于他人阅读,在调试程序时也会带来很多方便。值得注意的是,汇编语言程序不能被计算机直接识别并执行,必须经过一个中间环节把它翻译成机器语言程序,这个中间过程叫
4、做汇编。汇编有两种方式:机器汇编和手工汇编。机器汇编是用专门的汇编程序在计算机上进行翻译,手工汇编是编程员把汇编语言指令通过查指令表逐条翻译成机器语言指令,现在主要用的是机器汇编,但有时也用到手工汇编。第3章 MCS-51系列单片机的指令系统 在MCS-51指令系统中有42种助记符代表了33种操作功能,这是因为有的功能可以有几种助记符(例如数据传送的助记符有MOV,MOVC,MOVX)。指令功能助记符与操作数各种可能的寻址方式相结合,共构成111种指令。在这111种指令中,按字节分类为单字节指令49条,双字节指令45条,三字节指令17条;若从指令执行的时间看,单机器周期(12个振荡器周期)指令
5、64条,双机器周期指令45条,四机器周期指令2条(乘、除)。在12MHz晶振的条件下,执行时间分别为1、2、4s。由此可见,MCS-51指令系统具有存储空间效率高和执行速度快的特点。第3章 MCS-51系列单片机的指令系统 3.1.2 指令分类指令分类按照不同的分类方式,111条指令可有不同的分类方法。比如,按照每条指令的字节数不同,可分为单字节指令、双字节指令及三字节指令等;按照指令执行时需要的机器周期不同,可分为单周期指令、双周期指令及四周期指令;按照指令的不同寻址方式来区分,可分为立即数寻址、寄存器寻址和寄存器间接寻址等。一般情况下,为了学习和讲解方便,本书采用按照指令的功能区分,将MC
6、S-51指令系统可分为五类:数据传送类、算术运算类、逻辑操作类、位操作类和控制转移类。第3章 MCS-51系列单片机的指令系统 本章3.33.7节将根据指令的功能特性分类介绍,在分类介绍之前,先对描述指令的一些符号作简单的说明。Rn表示当前工作寄存器区中的工作寄存器,n取07,表示R0R7。direct8位内部数据存储单元地址。它可以是一个内部数据RAM单元(0127)或特殊功能寄存器地址或地址符号。Ri通过寄存器R1或R0间接寻址的8位内部数据RAM单元(0255),i=0,1。#data指令中的8位立即数。#data16指令中的16位立即数。第3章 MCS-51系列单片机的指令系统 add
7、r1616位目标地址,用于LCALL和LJMP指令,可指向64KB程序存储器地址空间的任何地方。addr1111位目标地址,用于ACALL和AJMP指令,转至当前PC所在的同一个2KB程序存储器地址空间内。rel补码形式的8位偏移量,用于相对转移和所有条件转移指令。偏移量相对于当前PC计算,在-128+127范围内取值。DPTR数据指针,用作16位的地址寄存器。A累加器。第3章 MCS-51系列单片机的指令系统 B特殊功能寄存器,专用于乘(MUL)和除(DIV)指令。C进位标志或进位位。bit内部数据RAM或部分特殊功能寄存器里的可寻址位的位地址。表示对该位操作数取反。(X)X中的内容。(X)
8、表示以X单元的内容为地址的存储器单元内容,即(X)作地址,该地址单元的内容用(X)表示。MCS-51汇编语言指令系统及指令编码参见附录B。第3章 MCS-51系列单片机的指令系统 3.2 寻寻 址址 方方 式式单片机的每一条指令包含两个基本部分:操作码和操作数。操作码表明指令要执行的操作性质;操作数表明参与操作的数据或数据所存放的地址。在带有操作数的指令中,数据可能就在指令中,也有可能在寄存器或存储器中,甚至在I/O口中。对这些单元内的数据要进行正确操作就要在指令中指出其地址,寻找操作数地址的方法称为寻址方式。寻址方式的多少及寻址功能的强弱是反映指令系统性能优劣的重要特性。MCS-51指令系统
9、的寻址方式有立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、基址寄存器加变址寄存器间接寻址、相对寻址和位寻址。下面逐一介绍各种寻址方式。第3章 MCS-51系列单片机的指令系统 1立即寻址立即寻址立即寻址方式是操作数包含在指令字节中,指令操作码后面字节的内容就是操作数本身。汇编指令中,在一个数的前面冠以“#”符号作前缀,就表示该数为立即寻址。例如:机器码 助记符 注释74 70 MOV A,#70H ;70H(A)该指令的功能是将立即数70H送入累加器A,这条指令为双字节指令,操作数本身70H跟在操作码74H后面,以指令形式存放在程序存储器内。第3章 MCS-51系列单片机的指令系统 在MCS
10、-51指令系统中还有一条三字节的立即寻址指令:机器码 助记符 注释90 82 00 MOV DPTR,#8200H ;82H(DPH)、00H(DPL)这条指令存放在程序存储器中,占三个存储单元。请注意,在MCS-51汇编语言指令中,#data表示8位立即数,#data16表示16位立即数,立即数前面必须有符号“#”。上述两例写成一般格式为MOV A,#dataMOV DPTR,#data16第3章 MCS-51系列单片机的指令系统 2直接寻址直接寻址直接寻址即在指令中含有操作数的直接地址,该地址指出了参与操作的数据所在的字节地址或位地址。直接寻址方式中操作数存储的空间有三种:(1)8051单
11、片机内部数据存储器的低128个字节单元(00H7FH),例如:MOV A,70H ;(70H)(A)该指令的功能是把内部RAM 70H单元中的内容送入累加器A。第3章 MCS-51系列单片机的指令系统(2)位地址空间,例如:MOV C,00H ;直接位地址00H内容进位位(3)特殊功能寄存器。特殊功能寄存器只能用直接寻址方式进行访问。例如:MOV IE,#85H ;立即数85H中断允许寄存器IEIE为特殊功能寄存器,其字节地址为A8H。一般在访问SFR时,可在指令中直接使用该寄存器的名字来代替地址。第3章 MCS-51系列单片机的指令系统 3寄存器寻址寄存器寻址由指令指出某一个寄存器中的内容作
12、为操作数,这种寻址方式称为寄存器寻址。寄存器寻址按所选定的工作寄存器R0R7进行操作,指令机器码的低3位的八种组合000,001,110,111分别指明所用的工作寄存器R0,R1,R6,R7。如:MOV A,Rn(n=07),这8条指令对应的机器码分别为E8HEFH。例如:INC R0 ;(R0)+1(R0)该指令的功能是对寄存器R0进行操作,使其内容加1。第3章 MCS-51系列单片机的指令系统 4寄存器间接寻址寄存器间接寻址由指令指出某一个寄存器的内容作为操作数的地址,这种寻址方式称为寄存器间接寻址。这里要注意,在寄存器间接寻址方式中,存放在寄存器中的内容不是操作数,而是操作数所在的存储器
13、单元地址,寄存器起地址指针的作用,寄存器间接寻址用符号“”表示。寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00HFFH)中的数据。第3章 MCS-51系列单片机的指令系统 寄存器间接寻址也适用于访问外部RAM,此时可使用R0、R1或DPTR作为地址指针。例如:MOV A,R0 ;(R0)(A)该指令的功能是把R0所指向的内部RAM单元中的内容送累加器A。若R0内容为60H,而内部RAM 60H单元中的内容是3BH,则指令“MOV A,R0”的功能是将3BH这个数送到累加器A,如图3-1所示。第3章 MCS-51系列单片机的指令系统 图3-1 寄存器间接寻址过程示意图
14、第3章 MCS-51系列单片机的指令系统 5基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址这种寻址方式用于访问程序存储器中的数据表格,它把基址寄存器(DPTR或PC)和变址寄存器A的内容作为无符号数相加形成16位的地址,访问程序存储器中的数据表格。例如:MOVC A,A+DPTR ;(DPTR)+(A)(A)MOVC A,A+PC ;(PC)+(A)(A)A中为无符号数,这两条指令的功能分别是A的内容与DPTR和当前PC的内容相加得到程序存储器的有效地址,把该存储器单元中的内容送到A。第3章 MCS-51系列单片机的指令系统 6相对寻址相对寻址这类寻址方式是以当前PC的内容作为基
15、地址,加上指令中给定的偏移量所得结果作为转移地址,它只适用于双字节转移指令。偏移量是带符号数,在-128+127范围内,用补码表示。例如:JC rel ;CY=1跳转这是一条双字节指令,第一字节为操作码,第二字节就是相对于程序计数器PC当前地址的偏移量rel。若转移指令操作码存放在1000H单元,偏移量存放在1001H单元,则该指令执行后PC已为1002H。若偏移量rel为05H,则转移到的目标地址为1007H,即当CY=1时,将去执行1007H单元中的指令。第3章 MCS-51系列单片机的指令系统 7位寻址位寻址位地址表示一个可作位寻址的单元,它或者在内部RAM中进行位寻址,字节地址为20H
16、2FH,相应的位地址为00H7FH;或者在某些特殊功能寄存器(SFR)中进行位寻址(参见第2章有关位地址的内容)。在位寻址指令中,一般用bit(具体值取决于访问的位地址单元)表示位地址,以区别用direct表示的字节地址。第3章 MCS-51系列单片机的指令系统 为了提高程序设计的可读性,汇编语言中有以下四种方式表示位地址:(1)直接使用位地址单元,如:MOV C,07H ;CY(07H)07H为位地址,它表示20H字节单元的D7位,即20H.7。(2)采用某个字节单元第几位表示,如:MOV C,20H.7 ;CY(07H)第3章 MCS-51系列单片机的指令系统(3)对于可位寻址的特殊功能寄
17、存器可以采用其寄存器名称加位数的方法或直接用位名称来表示,如对于程序状态字寄存器PSW的进位标志位置1时,可用如下指令:SETB PSW.7或 SETB C(4)也可以通过伪指令定义的符号名称访问位单元,见第4章。第3章 MCS-51系列单片机的指令系统 3.3 数据传送类指令数据传送类指令 数据传送类指令一般的操作是把源操作数传送到指令所指定的目标操作数中,指令执行后,源操作数不变,目的操作数被源操作数所代替。数据传送是一种最基本的操作,数据传送类指令是编程时使用最频繁的指令,其性能对整个程序的执行效率起很大的作用。在MCS-51指令系统中,数据传送类指令非常灵活,它可以把数据方便地传送到数
18、据存储器或I/O口中。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCHD、PUSH和POP。数据传送类指令比较简单,共有29条(见表3-1),它可以分为内部数据传送指令、外部数据传送指令、堆栈操作指令和数据交换指令等四类。第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 1CPU内部数据传送指令内部数据传送指令MOV(16条条)CPU内部数据传送指令是以MOV为操作码的指令,主要实现CPU内部数据存储器之间的数据传送,从源操作数传送到目的操作数中。它提供了丰富的传送操作,通过不同的寻址方式和操作数,可以访
19、问内部所有的数据存储器和特殊功能寄存器。一般格式:MOV 目的操作数,源操作数 按照寻址方式不同,内部数据传送指令又分为以下几类。第3章 MCS-51系列单片机的指令系统(1)立即数寻址传送指令,有如下5条:MOV A,#data ;(A)#dataMOV Rn,#data ;(Rn)#dataMOV Ri,#data ;(Ri)#dataMOV direct,#data ;(direct)#dataMOV DPTR,#data16 ;(DPTR)#data16,唯一的一条16位传送指令第3章 MCS-51系列单片机的指令系统(2)直接寻址方式的数据传送指令。源操作数或(和)目标操作数的地址都
20、以直接地址形式表示,它们可以是内部RAM存储器或特殊功能寄存器或累加器。这种方式的数据传送指令的功能很强,能实现内部RAM之间、特殊功能寄存器之间或特殊功能寄存器与内部RAM之间的数据传送。MOV A,direct ;(A)(direct)MOV Rn,direct ;(Rn)(direct)MOV Ri,direct ;(Ri)(direct)MOV direct1,direct2 ;(direct1)(direct2)MOV direct,A ;(direct)(A)第3章 MCS-51系列单片机的指令系统(3)寄存器寻址方式的数据传送指令:MOV A,Rn ;(A)(Rn)MOV Rn,
21、A ;(Rn)(A)MOV direct,Rn ;(direct)(Rn)(4)寄存器间接寻址方式的数据传送指令:MOV direct,Ri ;(direct)(Ri)MOV A,Ri ;(A)(Ri)MOV Ri,A ;(Ri)(A)第3章 MCS-51系列单片机的指令系统 2外部数据传送指令外部数据传送指令(6条条)该类指令必须用到累加器A并分别为数据存储器和程序存储器传送数据两组。(1)数据存储器传送数据。DPTR内容指示外部数据存储器地址,用于外部数据存储器或I/O端口与累加器A之间的数据传送。助记符 功能MOVX A,DPTR ;(A)(DPTR)MOVX DPTR,A ;(DPTR
22、)(A)第3章 MCS-51系列单片机的指令系统 执行第一条指令时,P3.7引脚上输出有效信号,用作外部数据存储器的读选通信号。DPTR所包含的16位地址信息由P0口(低8位)和P2口(高8位)输出,选中单元的数据由P0输入到累加器,P0口作分时复用的总线。执行第二条指令时,P3.6引脚上输出有效信号,用作外部数据存储器的写选通信号。DPTR所包含的16位地址信息由P0口(低8位)和P2口(高8位)输出,累加器的内容由P0口输出,P0口作分时复用总线。第3章 MCS-51系列单片机的指令系统 由Ri内容指示外部数据存储器地址。助记符 功能MOVX A,Ri ;(A)(Ri),i=0,1MOVX
23、 Ri,A ;(Ri)(A),i=0,1执行第一条指令时,在P3.7引脚上输出有效信号,用作外部数据存储器的读选通信号。Ri所包含的低8位地址由P0口输出。选中单元的数据由P0口输入到累加器。执行第二条指令时,在P3.6引脚上输出有效信号,用作外部数据存储器的写选通信号。P0口上分时输出由Ri指定的低8位地址及输入外部数据存储器单元的内容。第3章 MCS-51系列单片机的指令系统【例3-1】设外部数据存储器2097H单元中内容为80H,在执行下列指令后,则A中的内容为80H。MOV DPTR,#2097HMOVX A,DPTR(2)程序存储器内容送累加器。这类指令有下列两条,常用于查表。助记符
24、 功能MOVC A,A+PC ;(PC(PC)+1,A(A)+(PC)MOVC A,A+DPTR ;(A)(A)+(DPTR)第3章 MCS-51系列单片机的指令系统 第一条指令以PC作为基址寄存器,A的内容作为无符号数和PC的内容(下一条指令第一字节地址)相加后得到一个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A。这条指令的优点是不改变特殊功能寄存器及PC的状态,根据A的内容就可以取出表格中的常数。缺点是表格只能存放在该条查表指令后面256个单元之内,因此表格的大小受到限制,而且表格只能被该段程序所使用。第3章 MCS-51系列单片机的指令系统 第二条指令以DPTR作为基址寄
25、存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A。这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关。因此表格的大小和位置可在64KB程序存储器中任意安排,一个表格可被各个程序块共用。第3章 MCS-51系列单片机的指令系统【例例3-2】(A)=60H,设当前PC值为2000H,执行下列指令:2000H:MOVC A,A+PC结果为程序存储器中2061H单元的内容送入A。如果(DPTR)=8100H,(A)=40H,执行下列指令:MOVC A,A+DPTR结果为程序存储器中8140H单元的内容送入累加
26、器A。第3章 MCS-51系列单片机的指令系统 3栈操作指令栈操作指令(2条条)在MCS-51内部RAM中可以设定一个后进先出的区域(LIFO),称为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置。在指令系统中有下列两条用于数据传送的栈操作指令:进栈指令和出栈指令。助记符 功能PUSH direct ;(SP)(SP)+1,(SP)(direct)POP direct ;(direct)(SP),SP(SP)-1第一条指令的功能是进栈,首先将栈指针SP的内容加1,然后把直接地址指出的单元内容传送到栈指针SP所指的内部RAM单元中。第二条指令的功能是出栈,栈指针SP所指的内部RAM
27、单元内容送入直接地址指出的字节单元中,栈指针SP的内容减1。第3章 MCS-51系列单片机的指令系统【例例3-3】(SP)=60H,(ACC)=30H,(B)=70H,执行下列指令:PUSH ACC ;(SP)(SP)+1,即(SP)61H,(61H)30HPUSH B ;(SP)(SP)+1,即(SP)62H,(62H)70H结果:(61H)=30H,(62H)=70H,(SP)=62H。【例例3-4】(SP)=62H,(62H)=70H,(61H)=30H,执行下列指令:POP DPH ;(DPH)(SP),(SP)(SP)-1POP DPL ;(DPL)(SP),(SP)(SP)-1结果
28、:(DPTR)=7030H,(SP)=60H。执行POP direct指令不影响标志,但当直接地址为PSW时,可以使一些标志改变。这也是通过指令强行修改标志的一种方法。第3章 MCS-51系列单片机的指令系统 4字节交换指令字节交换指令(5条条)(1)字节交换指令。这组指令的功能是将累加器A的内容和源操作数内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等寻址方式。助记符 功能XCH A,Rn ;(A)(Rn),n=07XCH A,Ri ;(A)(Ri),i=0,1XCH A,direct ;(A)(direct)【例例3-5】(A)=80H,(R7)=08H,执行下列指令:XCH
29、 A,R7 ;(A)(R7)结果:(A)=08H,(R7)=80H。第3章 MCS-51系列单片机的指令系统(2)半字节交换指令。助记符 功能XCHD A,Ri ;(A30)(Ri)30),i=0,1SWAP A ;(A30)(A74)第一条指令将A的低4位和R0或R1指出的RAM单元低4位相互交换,各自的高4位不变。第二条指令实现把累加器半字节交换,即将累加器ACC的高半字节(ACC7ACC4)和低半字节(ACC3ACC0)互换。【例例3-6】(A)=0C5H,执行指令:SWAP A结果:(A)=5CH。第3章 MCS-51系列单片机的指令系统 3.4 算术运算类指令算术运算类指令 算术运算
30、类指令是MCS-51指令系统中具有单字节的加、减、乘、除法指令,见表3-2,其运算功能比较强。算术运算类指令执行的结果将影响进位(CY)、辅助进位(AC)、溢出标志位(OV)。但是加1和减1指令不影响这些标志位。对标志位有影响的所有指令见附录B。第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 由表3-2可知,算术运算类指令可分为8类。1加法指令加法指令(4条条)ADD A,Rn ;n=07ADD A,direct ADD A,Ri ;i=0,1ADD A,#data 这组加法指令的功能是把所给出的源操作数和累加器A相
31、加,其结果存放在累加器中。相加过程中如果D7有进位(C7=1),则进位CY置1,否则清零;如果D3有进位,则辅助进位AC置1,否则清零;如果D6有进位而D7无进位,或者D7有进位D6无进位,则溢出标志OV置1,否则清零。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。第3章 MCS-51系列单片机的指令系统【例例3-7】(A)=85H,(R0)=20H,(20H)=0AFH,执行指令ADD A,R0运算过程如图3-2所示。结果:(A)=34H,CY=1,AC=1,OV=1。图3-2 ADD 指令执行示意图第3章 MCS-51系列单片机的指令系统 对于加法,溢出只能发生在两个
32、加数符号相同的情况。在进行带符号数的加法运算时,利用它可以判断两个带符号数相加,其和是否溢出(即和大于+127或小于-128),当溢出时结果无意义。本例中,由于OV=1,故结果无意义。第3章 MCS-51系列单片机的指令系统 2带进位加法指令带进位加法指令(4条条)ADDC A,Rn ;n=07ADDC A,direct ADDC A,Ri ;i=0,1ADDC A,#data 这组带进位加法指令的功能是把所指出的字节变量、进位标志与累加器A内容相加,其结果存在累加器中。该组指令对进位标志与溢出标志的影响与ADD指令相同。第3章 MCS-51系列单片机的指令系统【例例3-8】(A)=85H,(
33、20H)=0FFH,CY=1,执行指令:ADDC A,20H运算过程如图3-3所示。结果:(A)=85(H),CY=1,AC=1,OV=0。图3-3 ADDC指令执行示意图第3章 MCS-51系列单片机的指令系统 3增量指令增量指令(5条条)INC A INC Rn ;n=07INC direct INC Ri ;i=0,1INC DPTR 这组增量指令的功能是把所指出的变量加1,若原来数据为0FFH,则执行后为00H,不影响任何标志位。操作数有寄存器寻址、直接寻址和寄存器间接寻址方式。注意:当用本指令修改输出口Pi(即指令中的direct为端口P0P3,地址分别为80H、90H、A0H、B0
34、H)时,其功能是修改端口的内容。在该指令的执行过程中,首先读入端口的内容,然后在CPU中加1,继而输出到端口。这里读入端口的内容来自端口的锁存器而不是端口的引脚。第3章 MCS-51系列单片机的指令系统【例例3-9】(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H,(40H)=00H,执行下列指令:INC A ;(A)(A)+1 INC R3 ;(R3)(R3)+1 INC 30H ;(30H)(30H)+1INC R0 ;(R0)(R0)+1结果:(A)=00H,(R3)=10H,(30H)=F1H,(40H)=01H,不改变PSW状态。第3章 MCS-51系列单片
35、机的指令系统 4十进制调整指令十进制调整指令(1条条)DA A这条指令对累加器参与的BCD码加法运算所获得的8位结果(在累加器中)进行十进制调整,使累加器中的内容调整为二位BCD码。计算机进行相应的调整规则是:BCD码相加后,当低4位大于9或D3位向前有进位时,在低4位上加06H;当高4位大于9或D7位向前有进位时,在高4位上加6H。第3章 MCS-51系列单片机的指令系统【例例3-10】(A)=58H,(R5)=26H,执行指令:ADD A,R5DA A运算过程如图3-4所示。第3章 MCS-51系列单片机的指令系统 图3-4 DA A指令执行示意图结果:(A)=84H,CY=1。第3章 M
36、CS-51系列单片机的指令系统 5带进位减法指令带进位减法指令(4条条)SUBB A,Rn ;n=07SUBB A,direct SUBB A,Ri ;i=0,1 SUBB A,#data 这组带进位减法指令的功能是从累加器中减去指定的变量和进位标志,结果放在累加器中。进行减法过程中如果位7需借位,则CY置位,否则CY清零;如果位3需借位,则AC置位,否则AC清零;如果位6需借位而位7不需借位或者位7需借位而位6不需借位,则溢出标志OV置位,否则溢出标志清零。在带符号数运算时,只有当符号不相同的两数相减时才会发生溢出。第3章 MCS-51系列单片机的指令系统 6减1指令(4条)DEC A DE
37、C Rn ;n=07DEC direct DEC Ri ;i=0,1这组指令的功能是将指定的变量减1。若原来为00H,减1后下溢为0FFH,不影响标志位。当指令中的直接地址direct为P0P3端口(即80H、90H、A0H、B0H)时,指令可用来修改一个输出口的内容,是一条具有读修改写功能的指令。指令执行时,首先读入端口的原始数据,在CPU中执行减1操作,然后再送到端口。注意:此时读入的数据来自端口的锁存器而不是从引脚读入。第3章 MCS-51系列单片机的指令系统【例例3-11】(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令:DEC A
38、 ;(A)(A)-1DEC R7 ;(R7)(R7)-1DEC 30H ;(30H)(30H)-1DEC R1 ;(R1)(R1)-1结果:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,不影响标志位。第3章 MCS-51系列单片机的指令系统 7乘法指令乘法指令(1条条)MUL AB 这条指令的功能是把累加器A和寄存器B中的无符号8位整数相乘,其16位积的低位字节在累加器A中,高位字节在B中。如果积大于255(0FFH),则溢出标志位OV置位,否则OV清零。进位标志位CY总是清零。【例例3-12】(A)=50H,(B)=0A0H,执行指令:MUL AB结果:(B)
39、=32H,(A)=00H(即积为3200H),CY=0,OV=1。第3章 MCS-51系列单片机的指令系统 8除法指令除法指令(1条条)DIV AB这条指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商的整数部分存放在累加器A中,余数存放在寄存器B中。进位CY和溢出标志OV清零。如果原来B中的内容为0(被零除),则结果A和B中内容不定,且溢出标志OV置位,在任何情况下,CY都清零。【例例3-13】(A)=0FBH,(B)=12H,执行指令:DIV AB结果:(A)=0DH,(B)=11H,CY=0,OV=0。第3章 MCS-51系列单片机的指令系统 3.5 逻辑操作
40、与移位操作类指令逻辑操作与移位操作类指令 3.5.1 逻辑操作指令逻辑操作指令逻辑操作类指令见表3-3。第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 1逻辑与指令逻辑与指令(6条条)ANL A,Rn ;n=07ANL A,direct ANL A,Ri ;i=0,1ANL A,#data ANL direct,A ANL direct,#data 第3章 MCS-51系列单片机的指令系统 这组指令的功能是在指出的变量之间执行以位为基础的逻辑与操作,结果存放在目的变量中。操作数有寄存器寻址、直接寻址、寄存器间接寻址和
41、立即寻址等寻址方式。当这类指令用于修改一个输出口时,作为原数据的值将从输出口数据锁存器(P0P3)读入,而不是读引脚状态。例如:ANL A,R3 ;(A)(A)(R3)ANL A,40H ;(A)(A)(40H)ANL A,R0 ;(A)(A)(R0)ANL A,#07H ;(A)(A)07HANL 70H,A ;(70H)(70H)(A)ANL P1,#0F0H ;(P1)(P1)F0H第3章 MCS-51系列单片机的指令系统【例例3-14】设(A)=07H,(R0)=0FDH,执行指令:ANL A,R0运算过程如图3-5所示。结果:(A)=05H。图3-5 ANL 指令执行示意图第3章 M
42、CS-51系列单片机的指令系统 2逻辑或指令逻辑或指令(6条条)ORL A,Rn ;n=07ORL A,direct ORL A,Ri ;i=0,1ORL A,#data ORL direct,A ORL direct,#data 这组指令的功能是在所指出的变量之间执行以位为基础的逻辑或操作,结果存到目的变量中。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等方式。同ANL指令类似,用于修改输出端口数据时,原数据值为端口锁存器内容。第3章 MCS-51系列单片机的指令系统【例例3-15】(P1)=05H,(A)=33H,执行指令:ORL P1,A运算过程如图3-6所示。结果:(P1)=
43、37H。图3-6 ORL 指令执行示意图第3章 MCS-51系列单片机的指令系统 3逻辑异或指令逻辑异或指令(6条条)XRL A,Rn ;n=07XRL A,direct XRL A,Ri ;i=0,1XRL A,#data XRL direct,A XRL direct,#data 这组指令的功能是在所指出的变量之间执行以位为基础的逻辑异或操作,结果存放到目的变量中。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。对输出口P i(i=0,1,2,3)与ANL指令一样是对口锁存器内容读出修改。第3章 MCS-51系列单片机的指令系统【例例3-16】设(A)=90H,(R3)=
44、73H,执行指令:XRL A,R3运算过程如图3-7所示。第3章 MCS-51系列单片机的指令系统 图3-7 XRL 指令执行示意图结果:(A)=0E3H。第3章 MCS-51系列单片机的指令系统 4累加器清零与取反指令累加器清零与取反指令(2条条)1)累加器清零CLR A 这条指令的功能是将累加器A清零,结果不影响CY、AC、OV等标志位。2)累加器内容按位取反CPL A 这条指令的功能是将累加器A的每一位逻辑取反,原来为1的位变为0,原来为0的位变为1,不影响标志位。第3章 MCS-51系列单片机的指令系统【例例3-17】(A)=10101010B,执行指令:CPL A结果:(A)=010
45、10101B。第3章 MCS-51系列单片机的指令系统 3.5.2 循环移位操作指令循环移位操作指令 循环移位操作指令分为累加器内容不带进位位左移、右移和带进位位循环左移以及右移指令。1不带进位位左移指令不带进位位左移指令(1条条)RL A 这条指令的功能是把累加器ACC的内容向左循环移1位,位7循环移入位0(如图3-8(a)所示),不影响标志。第3章 MCS-51系列单片机的指令系统 2不带进位位右移指令不带进位位右移指令(1条条)RR A 这条指令的功能是将累加器ACC的内容向右循环移1位,ACC的位0循环移入ACC的位7(如图3-8(b)所示),不影响标志。3带进位左移位指令带进位左移位
46、指令(1条条)RLC A 这条指令的功能是将累加器ACC的内容和进位标志一起向左循环移1位,ACC的位7移入进位位CY,CY移入ACC的位0(如图3-8(c)所示),影响CY标志位。第3章 MCS-51系列单片机的指令系统 4带进位右移位指令带进位右移位指令(1条条)RRC A 这条指令的功能是将累加器ACC的内容和进位标志CY一起向右循环移1位,ACC的位0移入CY,CY移入ACC的位7(如图3-8(d)所示),影响CY标志位。第3章 MCS-51系列单片机的指令系统 图3-8 移位、循环指令执行示意图第3章 MCS-51系列单片机的指令系统 3.6 位操作类指令位操作类指令 MCS-51单
47、片机内部有一个布尔处理机,对位地址空间具有丰富的位操作指令(见表3-4)。第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片机的指令系统 1数据位传送指令数据位传送指令(2条条)MOV C,bit ;(CY)(bit)MOV bit,C ;(bit)(CY)这组指令的功能是把由源操作数指出的布尔变量送到目的操作数指定的位中。其中一个操作数必须为进位标志,另一个可以是任何直接寻址位,指令不影响其他寄存器和标志。如:MOV C,06H ;(CY)(20H.6)MOV P1.0,C ;(P1.0)(CY)第3章 MCS-51系列单片机的指
48、令系统 第3章 MCS-51系列单片机的指令系统 这组指令的功能是将操作数指出的位清零,取反,置1,不影响其他标志。例如:CLR C ;(CY)0CLR 27H ;(24H.7)0CPL 08H ;(21H.0)SETB P1.7 ;(P1.7)1第3章 MCS-51系列单片机的指令系统 3位变量逻辑与指令位变量逻辑与指令(2条条)ANL C,bit ;(CY)(CY)(bit)ANL C,;(CY)(CY)()这组指令的功能是,如果源操作数的布尔值是逻辑0,则进位标志清零,否则进位标志保持不变。源操作数只有直接位寻址方式。第3章 MCS-51系列单片机的指令系统 第3章 MCS-51系列单片
49、机的指令系统 这组指令的功能是,如果源操作数的布尔值为1,则进位标志置位,否则进位标志CY保持原来状态。第3章 MCS-51系列单片机的指令系统【3-19】P1口为输出口,设(20H)=02H,执行下列指令:MOV C,00H ;(CY)(20H.0)ORL C,01H ;(CY)(CY)(20H.1)MOV P1.0,C ;(P1.0)(CY)结果:P1.0输出为1。第3章 MCS-51系列单片机的指令系统 5位变量条件转移指令位变量条件转移指令(5条条)JC rel ;(CY)=1,转移JNC rel ;(CY)=0,转移JB bit,rel ;(bit)=1,转移JNB bit,rel
50、;(bit)=0,转移JBC bit,rel ;(bit)=1,转移,且该位清零第3章 MCS-51系列单片机的指令系统 这一组指令的功能如下:JC:如果进位标志CY为1,则执行转移,即跳到标号rel处执行;为0就执行下一条指令。JNC:如果进位标志CY为0,则执行转移,即跳到标号rel处执行;为1就执行下一条指令。JB:如果直接寻址位的值为1,则执行转移,即跳到标号rel处执行;为0就执行下一条指令。JNB:如果直接寻址位的值为0,则执行转移,即跳到标号rel处执行;为1就执行下一条指令。JBC:如果直接寻址位的值为1,则执行转移,即跳到标号rel处执行,然后将直接寻址的位清零;为0就执行下