1、第第3 3章章 MCS-51 MCS-51的指令系统的指令系统 介绍介绍MCS-51MCS-51汇编语言汇编语言的指令系统。的指令系统。3.1 3.1 指令系统概述指令系统概述 MCS-51MCS-51的基本指令共的基本指令共111111条条,按指令所占的字节来分:按指令所占的字节来分:(1)(1)单字节指令单字节指令4949条;条;(2)(2)双字节指令双字节指令4545条;条;(3)(3)三字节指令三字节指令1717条。条。按指令的执行时间来分按指令的执行时间来分:(1)1 (1)1个机器周期(个机器周期(1212个时钟振荡周期)指令个时钟振荡周期)指令6464条条 (2)2 (2)2个机
2、器周期(个机器周期(2424个时钟振荡周期)指令个时钟振荡周期)指令4545条条 (3)(3)只有只有乘、除两条指令乘、除两条指令的执行时间为的执行时间为4 4个机器周期个机器周期(4848个时钟振荡周期)。个时钟振荡周期)。12MHz12MHz晶振晶振:机器周期为机器周期为1 1 s s。3.2 3.2 指令格式指令格式 两部分组成,即两部分组成,即操作码操作码和和操作数操作数。操作码操作码用来规定指令进行什么操作用来规定指令进行什么操作 操作数操作数则是指令操作的对象则是指令操作的对象有单字节指令、双字节指令、三字节不同长度的指令,有单字节指令、双字节指令、三字节不同长度的指令,格式不同:
3、格式不同:(1 1)单字节指令:)单字节指令:指令只有一个字节,操作码和操指令只有一个字节,操作码和操作数同在一个字节中。作数同在一个字节中。(2 2)双字节指令:)双字节指令:一个字节为操作码,另一个字节一个字节为操作码,另一个字节是操作数。是操作数。(3 3)三字节指令:)三字节指令:操作码占一个字节,操作数占二操作码占一个字节,操作数占二个字节。其中操作数既可能是数据,也可能是地址。个字节。其中操作数既可能是数据,也可能是地址。3.3 3.3 指令系统的寻址方式指令系统的寻址方式 寻址方式寻址方式就是在指令中说明操作数所在地址的方法。就是在指令中说明操作数所在地址的方法。共共7 7种种寻
4、址方式。寻址方式。1 1寄存器寻址方式寄存器寻址方式 操作数在寄存器中操作数在寄存器中 MOV AMOV A,Rn Rn ;(;(RnRn)AA,n=0n=07 7 表示把寄存器表示把寄存器RnRn的内容传送给累加器的内容传送给累加器A A 寻址范围包括:寻址范围包括:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器。个工作寄存器。(2 2)部分特殊功能寄存器,例如)部分特殊功能寄存器,例如A A、B B 以及数据指针以及数据指针寄存器寄存器DPTRDPTR等。等。2 2直接寻址方式直接寻址方式 操作数直接以单元地址的形式给出:操作数直接以单元地址的形式给出:MOV A
5、MOV A,40H40H 寻址范围:寻址范围:(1)(1)内部内部RAMRAM的的128128个单元个单元(2)(2)特殊功能寄存器。除了以单元地址的形式外特殊功能寄存器。除了以单元地址的形式外,还还可用寄存器符号可用寄存器符号的形式给出。例如:的形式给出。例如:MOV AMOV A,80H 80H 与与 MOV A MOV A,P0P0是等价的是等价的。3.3.寄存器间接寻址方式寄存器间接寻址方式 寄存器中存放的是操作数的地址寄存器中存放的是操作数的地址 在寄存器的名称前面加在寄存器的名称前面加前缀标志前缀标志“”“”访问内部访问内部RAMRAM或外部数据存储器的低或外部数据存储器的低256
6、256个字节时,个字节时,只只能采用能采用R0R0或或R1R1作为间址寄存器作为间址寄存器。例如。例如:MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的内容为中的内容为40H40H,把内部,把内部RAM40HRAM40H单元内容送单元内容送A A。寻址范围:寻址范围:(1 1)访问内部)访问内部RAMRAM低低128128个单元,其通用形式为个单元,其通用形式为RiRi(2 2)对片外数据存储器的)对片外数据存储器的64K64K字节的间接寻址,例如:字节的间接寻址,例如:MOVX AMOVX A,DPTRDPTR(3 3)片外数据存储器的低)片外数据存储器的低25
7、6256字节字节 例如:例如:MOVX AMOVX A,RiRi(4 4)堆栈区)堆栈区 堆栈操作指令堆栈操作指令PUSHPUSH(压栈)和(压栈)和POPPOP(出栈)使用堆(出栈)使用堆栈指针(栈指针(SPSP)作间址寄存器)作间址寄存器4 4立即寻址方式立即寻址方式 操作数在指令中直接给出,需在操作数前面加前缀操作数在指令中直接给出,需在操作数前面加前缀 “#”“#”。例如:。例如:MOV AMOV A,#40H#40H 5 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式 本寻址方式是以本寻址方式是以DPTRDPTR或或PCPC作基址寄存器,以累加器作基址寄存器,
8、以累加器A A作为变址寄存器。作为变址寄存器。例如:例如:指令指令 MOVC A MOVC A,A+DPTR A+DPTR 其中其中A A的原有内容为的原有内容为05H05H,DPTRDPTR的内容为的内容为0400H0400H,该指令执行的结果是把程序存,该指令执行的结果是把程序存储器储器0405H0405H单元的内容传送给单元的内容传送给A A。说明:说明:(1 1)本寻址方式是专门针对程序存储器的寻址方式,)本寻址方式是专门针对程序存储器的寻址方式,寻址范围可达到寻址范围可达到64KB64KB。(2 2)本寻址方式的指令只有本寻址方式的指令只有3 3条:条:MOVC AMOVC A,A+
9、DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR6 6位寻址方式位寻址方式 MCS-51MCS-51有位处理功能,可以对数据位进行操作,例如:有位处理功能,可以对数据位进行操作,例如:MOV CMOV C,40H40H 是把位是把位40H40H的值送到进位位的值送到进位位C C。寻址范围包括:寻址范围包括:(1 1)内部)内部RAMRAM中的位寻址区。中的位寻址区。位有两种表示方法位有两种表示方法,例,例如,如,40H40H;另一种是单元地址加上位,例如,;另一种是单元地址加上位,例如,(28H).0(28H).0,指的是指的是28H28H
10、单元中的最低位。它们是等价的。单元中的最低位。它们是等价的。(2 2)特殊功能寄存器中的可寻址位)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下可寻址位在指令中有如下4 4种的表示方法:种的表示方法:a.a.直接使用位地址直接使用位地址。例如。例如PSW.5PSW.5的位地址为的位地址为0D5H0D5H。b.b.位名称的表示位名称的表示方法。例如:方法。例如:PSW.5PSW.5是是F0F0标志位,可使标志位,可使用用F0F0表示该位。表示该位。c.c.单元地址加位数单元地址加位数的表示方法。例如的表示方法。例如:(0D0H).5:(0D0H).5。d.d.特 殊 功 能 寄 存 器 符
11、号 加 位 数特 殊 功 能 寄 存 器 符 号 加 位 数 的 表 示 方 法。例的 表 示 方 法。例如如:PSW.5:PSW.5。7 7相对寻址方式相对寻址方式 在相对寻址的转移指令中,给出了地址偏移量,以在相对寻址的转移指令中,给出了地址偏移量,以“rel”“rel”表示,即把表示,即把PCPC的当前值加上偏移量就构成了的当前值加上偏移量就构成了程序转移的目的地址:程序转移的目的地址:目的地址目的地址=转移指令所在的地址转移指令所在的地址+转移指令的字节数转移指令的字节数 +rel+rel 偏移量偏移量relrel是一带符号的是一带符号的8 8位二进制数补码数位二进制数补码数。范围是:
12、范围是:128 128 +127+127 向地址增加方向最大可转移(向地址增加方向最大可转移(127+127+转移指令字节)个转移指令字节)个单元地址,向地址减少方向最大可转移(单元地址,向地址减少方向最大可转移(128-128-转移转移指令字节)个单元地址。指令字节)个单元地址。7 7种寻址方式及寻址空间,见表种寻址方式及寻址空间,见表3-13-1(P43)P43)。3.4 MCS-513.4 MCS-51指令系统分类介绍指令系统分类介绍111111条指令条指令,按功能分类,可分为下面,按功能分类,可分为下面5 5大类大类:(1 1)数据传送类)数据传送类(28(28条条)(2 2)算术操作
13、类)算术操作类(24(24条条 (3 3)逻辑运算类)逻辑运算类(25(25条条)(4 4)控制转移类)控制转移类(17(17条条)(5 5)位操作类)位操作类(17(17条条)指令中符号的意义指令中符号的意义:Rn Rn 当前寄存器区的当前寄存器区的8 8个工作寄存器个工作寄存器R0R0R7(n=0R7(n=07)7)。Ri Ri 当前选中的寄存器区中可作间接寻址寄存器的当前选中的寄存器区中可作间接寻址寄存器的2 2 个寄存器个寄存器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直接地址,即直接地址,即8 8位的内部数据存储器单元或位的内部数据存储器单元或特殊功能
14、寄存器的地址。特殊功能寄存器的地址。#data#data 包含在指令中的包含在指令中的8 8位立即数。位立即数。#data16#data16 包含在指令中的包含在指令中的1616位立即数。位立即数。relrel 相对转移指令中的偏移量,为相对转移指令中的偏移量,为8 8位的带符号补位的带符号补 码数码数DPTRDPTR 数据指针,可用作数据指针,可用作1616位的数据地址寄存器。位的数据地址寄存器。bitbit 内部内部RAMRAM或特殊功能寄存器中的直接寻址位。或特殊功能寄存器中的直接寻址位。C C(或(或CyCy)进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。addr11
15、addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 间接寻址寄存器前缀,如间接寻址寄存器前缀,如RiRi,A+DPTRA+DPTR(X)(X)X X中的内容。中的内容。(X)(X)由由X X寻址的单元中的内容。寻址的单元中的内容。箭头右边的内容被箭头左边的内容所取代。箭头右边的内容被箭头左边的内容所取代。3.4.1 3.4.1 数据传送类指令数据传送类指令 使用最频繁的一类指令使用最频繁的一类指令,通用格式:通用格式:MOV MOV ,属属“复制复制”性质,而不是性质,而不是“搬家搬家”数据传送类指令数据传送类指令不影响标志位不影响标志位,Cy,C
16、y、AcAc和和OVOV,但不包,但不包括奇偶标志位括奇偶标志位P P。1 1以累加器为目的操作数的指令以累加器为目的操作数的指令 MOV A,Rn ;(Rn)AMOV A,Rn ;(Rn)A,n=0n=07 7 MOV A,Ri ;(Ri)A,i=0,1MOV A,Ri ;(Ri)A,i=0,1 MOV A,direct ;MOV A,direct ;(directdirect)AA MOV A,#data ;#dataAMOV A,#data ;#dataA 例如:例如:MOV A,R6 ;(R6)AMOV A,R6 ;(R6)A,寄存器寻址,寄存器寻址 MOV A,70H ;(70H)A
17、MOV A,70H ;(70H)A,直接寻址,直接寻址 MOV A,R0 ;(R0)AMOV A,R0 ;(R0)A,间接寻址,间接寻址 MOV A,#78H ;78HAMOV A,#78H ;78HA,立即寻址,立即寻址 2.2.以以RnRn为目的操作数的指令为目的操作数的指令 MOV Rn,A ;(A)Rn,n=0MOV Rn,A ;(A)Rn,n=07 7 MOV Rn,direct ;MOV Rn,direct ;(directdirect)Rn,n=0Rn,n=07 7 MOV Rn,#dat ;#dataRn,n=0 MOV Rn,#dat ;#dataRn,n=07 7功能:是把
18、源操作数的内容送入当前一组工作寄存器功能:是把源操作数的内容送入当前一组工作寄存器区的区的R0R0R7R7中的某一个寄存器。中的某一个寄存器。3.3.以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令 MOV direct,A;(A)directMOV direct,A;(A)direct MOV MOV direct,Rn;(Rn)direct,n=0 direct,Rn;(Rn)direct,n=07 7 MOV direct1,direct2;MOV direct1,direct2;MOV direct,Ri;(Ri)direct MOV direct,Ri
19、;(Ri)direct MOV MOV direct,#data;#datadirect direct,#data;#datadirect功能:功能:把源操作数送入直接地址指出的存储单元。把源操作数送入直接地址指出的存储单元。directdirect指的是内部指的是内部RAMRAM或或SFRSFR的地址。的地址。4.4.以寄存器间接地址为目的操作数的指令以寄存器间接地址为目的操作数的指令 MOV Ri,A ;(A)(Ri),i=0,1MOV Ri,A ;(A)(Ri),i=0,1 MOV Ri,direct ;MOV Ri,direct ;(directdirect)(Ri)(Ri)MOV R
20、i,#data ;#data(Ri)MOV Ri,#data ;#data(Ri)5.165.16位数传送指令位数传送指令 MOV DPTR,#data16 ;#data16DPTRMOV DPTR,#data16 ;#data16DPTR唯一的唯一的1616位数据的传送指令位数据的传送指令,立即数的高立即数的高8 8位送入位送入DPHDPH,立即数的低立即数的低8 8位送入位送入DPLDPL。6 6堆栈操作指令堆栈操作指令 MCS-51 MCS-51内部内部RAMRAM中可以设定一个中可以设定一个后进先出后进先出(LIFO-LIFO-Last In First OutLast In Firs
21、t Out)的区域称作)的区域称作堆栈堆栈.堆栈指针堆栈指针SPSP指出堆栈的栈顶位置。指出堆栈的栈顶位置。(1)(1)进栈指令进栈指令 PUSH directPUSH direct先将栈指针先将栈指针SPSP加加1 1,然后把,然后把directdirect中的内容送到栈指中的内容送到栈指针针SPSP指示的内部指示的内部RAMRAM单元中。单元中。例如:例如:当(当(SPSP)=60H,=60H,(A A)=30H,=30H,(B B)=70H=70H时,时,执行:执行:PUSH APUSH ACCCC;(SP)+1=61HSP,(A)61H(SP)+1=61HSP,(A)61H PUSH
22、BPUSH B;(SP)+1=62HSP,(B)62H(SP)+1=62HSP,(B)62H 结果:结果:(61H)=30H,(62H)=70H,(SP)=62H(61H)=30H,(62H)=70H,(SP)=62H(2)(2)出栈指令出栈指令 POP directPOP directSPSP指示的栈顶(内部指示的栈顶(内部RAMRAM单元)内容送入单元)内容送入directdirect字节单字节单元中,栈指针元中,栈指针SPSP减减1.1.例如例如:当当(SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H,(61H)=30H,执行:执行:POP DPH
23、;(SP)DPH,(SP)-1SP POP DPH;(SP)DPH,(SP)-1SP POP DPL;(SP)DPL,(SP)-1SP POP DPL;(SP)DPL,(SP)-1SP 结果:结果:(DPTR)=7030H(DPTR)=7030H,(SP)=60H(SP)=60H7.7.累加器累加器A A与外部数据存储器传送指令与外部数据存储器传送指令 MOVX A,DPTR;(DPTR)A,MOVX A,DPTR;(DPTR)A,读外部读外部RAM/IORAM/IO MOVX A,Ri;(Ri)A,MOVX A,Ri;(Ri)A,读外部读外部RAM/IORAM/IO MOVX DPTR,A;
24、(A)(DPTR),MOVX DPTR,A;(A)(DPTR),写外部写外部RAM/IORAM/IO MOVX Ri,A;(A)(Ri),MOVX Ri,A;(A)(Ri),写外部写外部RAM/IORAM/IO功能:读外部功能:读外部RAMRAM存储器或存储器或I/OI/O中的一个字节,或把中的一个字节,或把A A中中一个字节的数据写到外部一个字节的数据写到外部RAMRAM存储器或存储器或I/OI/O中。中。注意:注意:RDRD*或或WRWR*信号有效。信号有效。采用采用DPTRDPTR间接寻址,高间接寻址,高8 8位地址(位地址(DPHDPH)由)由P2P2口输出,口输出,低低8 8位地址(
25、位地址(DPLDPL)由)由P0P0口输出。口输出。采用采用RiRi(i=0,1i=0,1)间接寻址,可寻址片外)间接寻址,可寻址片外256256个单元的个单元的数据存储器。数据存储器。RiRi内容由内容由P0P0口输出。口输出。8 8位地址和数据均由位地址和数据均由P0P0口输出,可选用其它任何输出口口输出,可选用其它任何输出口线来输出高于线来输出高于8 8位的地址(一般选用位的地址(一般选用P2P2口输出高口输出高8 8位位的地址)。的地址)。MOVMOV后后 “X”“X”表示单片机访问的是片外表示单片机访问的是片外RAMRAM存储器或存储器或I/OI/O。8.8.查表指令查表指令 共两条
26、,用于读程序存储器中的数据表格的指令,均共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。采用基址寄存器加变址寄存器间接寻址方式。(1)MOVC A,A+PC(1)MOVC A,A+PC 以以PCPC作基址寄存器,作基址寄存器,A A的内容作为无符号整数和的内容作为无符号整数和PCPC中的中的内容(下一条指令的起始地址)相加后得到一个内容(下一条指令的起始地址)相加后得到一个1616位的地址,该地址指出的程序存储单元的内容送到位的地址,该地址指出的程序存储单元的内容送到累加器累加器A A。注意:注意:PSENPSEN*信号有效信号有效。例如例如:(A)=30
27、H,(A)=30H,执行地址执行地址1000H1000H处的指令处的指令 1000H:MOVC A,A+PC1000H:MOVC A,A+PC 本指令占用一个字节,执行结果将程序存储器中本指令占用一个字节,执行结果将程序存储器中1031H1031H的内容送入的内容送入A A。优点:优点:不改变特殊功能寄存器及不改变特殊功能寄存器及PCPC的状态,根据的状态,根据A A的内的内容就可以取出表格中的常数。容就可以取出表格中的常数。缺点:缺点:表格只能存放在该条查表指令后面的表格只能存放在该条查表指令后面的256256个单元个单元之内之内,表格的大小受到限制,且表格只能被一段程,表格的大小受到限制,
28、且表格只能被一段程序所利用。序所利用。(2)MOVC A,A+DPTR(2)MOVC A,A+DPTR以以DPTRDPTR作为基址寄存器,作为基址寄存器,A A的内容作为无符号数和的内容作为无符号数和DPTRDPTR的内容相加得到一个的内容相加得到一个1616位的地址,把由该地址指出位的地址,把由该地址指出的程序存储器单元的内容送到累加器的程序存储器单元的内容送到累加器A.A.例如例如 (DPTR)=8100H (A)=40H (DPTR)=8100H (A)=40H 执行指令执行指令 MOVC A,A+DPTRMOVC A,A+DPTR 本指令的执行结果只和指针本指令的执行结果只和指针DPT
29、RDPTR及累加器及累加器A A的内容有的内容有关,与该指令存放的地址及常数表格存放的地址无关,与该指令存放的地址及常数表格存放的地址无关,关,因此表格的大小和位置可以在因此表格的大小和位置可以在64K64K程序存储器中程序存储器中任意安排任意安排,一个表格可以为各个程序块公用。,一个表格可以为各个程序块公用。两条指令是在两条指令是在MOVMOV的后面加的后面加C C,“C”“C”是是CODECODE的第一个字的第一个字母,即代码的意思。母,即代码的意思。9 9字节交换指令字节交换指令 XCH A,RnXCH A,Rn XCH A,directXCH A,direct XCH A,RiXCH
30、A,Ri例如:例如:(A)=80H (A)=80H,(R7)=08H(R7)=08H,(40H)=F0H(40H)=F0H (R0)=30H (R0)=30H,(30H)=OFH(30H)=OFH执行下列指令:执行下列指令:XCH A,R7 ;(A)XCH A,R7 ;(A)与与(R7)(R7)互换互换 XCH A,40H ;(A)XCH A,40H ;(A)与与(40H)(40H)互换互换 XCH A,R0 ;(A)XCH A,R0 ;(A)与与(R0)(R0)互换互换 结果:结果:(A)=0FH,(R7)=80H,(40H)=08H,(30H)=F0H(A)=0FH,(R7)=80H,(4
31、0H)=08H,(30H)=F0H 1010半字节交换指令半字节交换指令 XCHD A,RiXCHD A,Ri 累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。例如:位交换。例如:(R0)=60H,(60H)=3EH,(A)=59H (R0)=60H,(60H)=3EH,(A)=59H执行完执行完 XCHD A,ROXCHD A,RO 指令指令,则则(A)=5EH,(60H)=39H(A)=5EH,(60H)=39H。3.4.2 3.4.2 算术操作类指令算术操作类指令 单字节的加、减、乘、除法指令,都是针对单字节的加、减、乘、除法指令,都是针对8 8位二进位二进制无符
32、号数。制无符号数。执行的结果对执行的结果对CyCy、AcAc、OVOV 三种标志位有影响。三种标志位有影响。但增但增1 1和减和减1 1指令不影响上述标志。指令不影响上述标志。1 1加法指令加法指令 共有共有4 4条加法运算指令:条加法运算指令:ADD A,Rn ;(A)+(Rn)A ADD A,Rn ;(A)+(Rn)A,n=0n=07 7 ADD A,direct ;(A)+(direct)A ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,#data ;(A)+#d
33、ataAADD A,#data ;(A)+#dataA一个加数总是来自累加器一个加数总是来自累加器A A,而另一个加数可由不同,而另一个加数可由不同的寻址方式得到。结果总是放在的寻址方式得到。结果总是放在A A中。中。使用加法指令时,使用加法指令时,要注意累加器要注意累加器A A中的运算结果对各中的运算结果对各个标志位的影响:个标志位的影响:(1 1)如果)如果位位7 7有进位有进位,则置,则置“1”“1”进位标志进位标志CyCy,否则,否则清清“0”Cy“0”Cy(2 2)如果)如果位位3 3有进位有进位,置,置“1”“1”辅助进位标志辅助进位标志AcAc,否,否则清则清“0”Ac“0”Ac
34、(AcAc为为PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如果位如果位6 6有进位,而位有进位,而位7 7没有进位,或者位没有进位,或者位7 7有进位,而位有进位,而位6 6没有,则溢出标志位没有,则溢出标志位OVOV置置“1”“1”,否则清,否则清“0”OV“0”OV。溢出标志位溢出标志位OVOV的状态,只有在带符号数加法运的状态,只有在带符号数加法运算时才有意义算时才有意义。当两个带符号数相加时,。当两个带符号数相加时,OV=1OV=1,表示加法运算超出了累加器,表示加法运算超出了累加器A A所能表示所能表示的带符号数的有效范围的带符号数的有效范围 例例(A)=53H(A)=53
35、H,(R0)=FCH(R0)=FCH,执行指令,执行指令 ADD A,R0ADD A,R0结果结果:(A)=4FH:(A)=4FH,Cy=1Cy=1,Ac=0Ac=0,OV=0OV=0,P=1P=1注意:注意:上面的运算中,由于位上面的运算中,由于位6 6和位和位7 7同时有进同时有进位,所以标志位位,所以标志位OV=0OV=0。例例(A)=85H,(R0)=20H,(A)=85H,(R0)=20H,(20H20H)=AFH=AFH,执行,执行指令:指令:ADD A,R0ADD A,R0 结果结果:(A A)=34H=34H,Cy=1Cy=1,Ac=1Ac=1,OV=1OV=1,P=1P=1注
36、意:注意:由于位由于位7 7有进位,而位有进位,而位6 6无进位,所以标无进位,所以标志位志位OV=1 OV=1 2 2带进位加法指令带进位加法指令标志位标志位CyCy参加运算,因此是三个数相加。共参加运算,因此是三个数相加。共4 4条:条:ADDCADDCA,RnA,Rn;(A)+(Rn)+CA;(A)+(Rn)+CA,n=0n=07 7 ADDCADDCA,directA,direct;(A)+(direct)+CA ;(A)+(direct)+CA ADDCADDCA,Ri A,Ri ;(A)+(Ri)+CA;(A)+(Ri)+CA,i=0,1i=0,1 ADDC ADDCA,#data
37、 A,#data;(A)+#data+CA;(A)+#data+CA 例:例:(A A)=85H,=85H,(20H20H)=FFH,Cy=1=FFH,Cy=1,执行指令:,执行指令:ADDC A,20HADDC A,20H结果为结果为:(A A)=85H=85H,Cy=1Cy=1,Ac=1Ac=1,OV=0OV=0,P=1 P=1(A A中中1 1 的位数为奇数)的位数为奇数)3 3增增1 1指令指令 5 5条增条增1 1指令:指令:INC AINC A INC Rn ;n=0INC Rn ;n=07 7INC direct INC direct INC Ri ;i=0,1 INC Ri ;
38、i=0,1 INC DPTRINC DPTR不影响不影响PSWPSW中的任何标志中的任何标志。第第5 5条指令条指令INC DPTRINC DPTR,是,是1616位数增位数增1 1指令。指令首先对指令。指令首先对低低8 8位指针位指针DPLDPL的内容执行加的内容执行加1 1的操作,当产生溢出时,的操作,当产生溢出时,就对就对DPHDPH的内容进行加的内容进行加1 1操作,并不影响标志操作,并不影响标志CyCy的状的状态。态。4 4十进制调整指令十进制调整指令用于对用于对BCDBCD码十进制数加法运算结果的内容修正。码十进制数加法运算结果的内容修正。指令格式:指令格式:DA A DA A两个
39、两个BCDBCD码按二进制相加之后,必须经本指令的调整码按二进制相加之后,必须经本指令的调整 才能得到正确的压缩才能得到正确的压缩BCDBCD码的和数。码的和数。二进制数的加法运算原则并不能适用于十进制数的加二进制数的加法运算原则并不能适用于十进制数的加法运算,有时会产生错误结果。例如:法运算,有时会产生错误结果。例如:(a a)3+6=9 0011+0101=1001 3+6=9 0011+0101=1001 运算结果正确运算结果正确(b b)7+8=15 0111+1000=1111 7+8=15 0111+1000=1111 运算结果不正确运算结果不正确(c c)9+8=17 1001+
40、1000=00001 C=1 9+8=17 1001+1000=00001 C=1 结果不正确结果不正确二进制数加法指令不能完全适用于二进制数加法指令不能完全适用于BCDBCD码十进制数的加码十进制数的加法运算,法运算,对结果作有条件的修正对结果作有条件的修正 十进制调整十进制调整 出错原因和调整方法:出错原因和调整方法:BCDBCD码只用了了其中的码只用了了其中的1010个,个,6 6个没用到的编码。个没用到的编码。(10101010,10111011,11001100,11011101,11101110,11111111)为)为无效码无效码 凡结果进入或者跳过无效码编码区时,其结果就是错凡
41、结果进入或者跳过无效码编码区时,其结果就是错误的误的。调整的方法是把结果加调整的方法是把结果加6 6调整调整,即所谓十进制调整修正。,即所谓十进制调整修正。修正方法应是:修正方法应是:(a a)累加器低)累加器低4 4位大于位大于9 9或辅助进位位或辅助进位位Ac=1Ac=1,则进行低,则进行低4 4位加位加6 6修正。修正。(b b)累加器高)累加器高4 4位大于位大于9 9或进位位或进位位Cy=1Cy=1,则进行高,则进行高4 4位位加加6 6修正。修正。(c c)累加器高)累加器高4 4位为位为9 9,低,低4 4位大于位大于9 9,则高,则高4 4位和低位和低4 4位位分别加分别加6
42、6修正。修正。具体是通过执行指令:具体是通过执行指令:DA A DA A 来自动实现的来自动实现的 。例例 (A A)=56H,=56H,(R5R5)=67H=67H,把它们看作为两个压缩,把它们看作为两个压缩的的BCDBCD数,进行数,进行BCDBCD数的加法。执行指令:数的加法。执行指令:ADD A,R5ADD A,R5 DA A DA A 由于高、低由于高、低4 4位分别大于位分别大于9 9,所以要分别加,所以要分别加6 6进行进行十进制调整对结果进行修正。十进制调整对结果进行修正。结果为:结果为:(A A)=23H=23H,Cy=1Cy=1 可见,可见,56+67=12356+67=1
43、23,结果是正确的。,结果是正确的。5 5带借位的减法指令带借位的减法指令 4 4条指令:条指令:SUBB A,Rn ;SUBB A,Rn ;(A A)-(RnRn)-CyA-CyA,n=0n=07 7 SUBB A,direct;SUBB A,direct;(A A)-(directdirect)-CyA-CyA SUBB A,Ri;SUBB A,Ri;(A A)-((Ri)(Ri))-CyA,i=0,1-CyA,i=0,1 SUBB A,#data ;SUBB A,#data ;(A A)-#data-CyA-#data-CyA从累加器从累加器A A中的内容减去指定的变量和进位标志中的内容
44、减去指定的变量和进位标志CyCy的的值,结果存在累加器值,结果存在累加器A A中。中。如果位如果位7 7需借位则置需借位则置“1”Cy“1”Cy,否则清,否则清“0”Cy“0”Cy;如果位如果位3 3需借位则置需借位则置“1”Ac“1”Ac,否则清,否则清“0”Ac“0”Ac;如果位如果位6 6需借位而位需借位而位7 7不需要借位,或者位不需要借位,或者位7 7需借位,需借位,位位6 6不需借位,则置不需借位,则置“1”“1”溢出标志位溢出标志位OVOV,否则清,否则清“0”OV“0”OV。例例 (A A)=C9H,=C9H,(R2R2)=54H,Cy=1=54H,Cy=1,执行指令,执行指令
45、:SUBB A,R2 SUBB A,R2 结果:(结果:(A A)=74H,Cy=0,Ac=0,OV=1=74H,Cy=0,Ac=0,OV=1(位(位6 6向位向位7 7借位)借位)6 6减减1 1指令指令 4 4条指令:条指令:DEC ADEC A;(A)-1A(A)-1ADEC Rn DEC Rn ;(Rn)-1Rn(Rn)-1Rn,n=0n=07 7DEC directDEC direct;(direct)-1direct(direct)-1directDEC Ri DEC Ri;(Ri)-1(Ri)-1(RiRi),),i=0,1i=0,1减减1 1指令不影响标志位。指令不影响标志位。
46、7 7乘法指令乘法指令 MUL AB MUL AB ;A ABBABBA如果积大于如果积大于255255,则置,则置“1”“1”溢出标志位溢出标志位OVOV 8除法指令除法指令 DIV AB DIV AB ;A/BAA/BA(商),余数(商),余数BB如果如果B B的内容为的内容为“0”“0”(即除数为(即除数为“0”“0”),则存放结),则存放结果的果的A A、B B中的内容不定,并置中的内容不定,并置“1”“1”溢出标志位溢出标志位OVOV。3.4.3 3.4.3 逻辑运算指令逻辑运算指令1.1.简单逻辑操作指令简单逻辑操作指令 (1)CLR A(1)CLR A功能是累加器功能是累加器A
47、A清清“0”“0”。不影响。不影响CyCy、AcAc、OVOV等标志。等标志。(2)CPL A(2)CPL A功能是将累加器功能是将累加器A A的内容的内容按位逻辑取反按位逻辑取反,不影响标志,不影响标志。2 2左环移指令左环移指令 RL ARL A功能是累加器功能是累加器A A的的8 8位向左循环移位,位位向左循环移位,位7 7循环移入位循环移入位0 0,不影响标志。不影响标志。3 3带进位左环移指令带进位左环移指令 RLC ARLC A功能是将累加器功能是将累加器A A的内容和进位标志位的内容和进位标志位CyCy一起向左环一起向左环移一位,移一位,Acc.7Acc.7移入进位位移入进位位C
48、yCy,CyCy移入移入Acc.0Acc.0,不影,不影响其它标志。响其它标志。4 4右环移指令右环移指令 RR ARR A功能是累加器功能是累加器A A的内容向右环移一位,的内容向右环移一位,Acc.0Acc.0移入移入Acc.7Acc.7,不影响其它标志。,不影响其它标志。5 5带进位环移指令带进位环移指令 RRC ARRC A这条指令的功能是累加器这条指令的功能是累加器A A的内容和进位标志的内容和进位标志CyCy一起一起向右环移一位,向右环移一位,Acc.0Acc.0进入进入CyCy,CyCy移入移入Acc.7Acc.7。6 6累加器半字节交换指令累加器半字节交换指令 SWAP ASW
49、AP A将累加器将累加器A A的高半字节(的高半字节(Acc.7Acc.7Acc.4Acc.4)和低半字节)和低半字节(Acc.3Acc.3Acc.0Acc.0)互换。)互换。例例 (A A)=0C5H=0C5H,执行指令:,执行指令:SWAP A SWAP A 结果:(结果:(A A)=5CH=5CH7 7逻辑与指令逻辑与指令 ANL A,Rn ;ANL A,Rn ;(A A)(RnRn)AA,n=0n=07 7 ANL A,direct;ANL A,direct;(A A)(directdirect)AA ANL A,#data ;ANL A,#data ;(A A)#dataA#data
50、A ANL A,Ri ;ANL A,Ri ;(A A)((RiRi))A)A,i=0i=01 1 ANL direct,A;ANL direct,A;(directdirect)(A)direct(A)direct ANL ANL direct,#data direct,#data ;(directdirect)#datadirect#datadirect例例 (A A)=07H,=07H,(R0R0)=0FDH,=0FDH,执行指令:执行指令:ANL A,R0ANL A,R0 结果:(结果:(A A)=05H=05H8.8.逻辑或指令逻辑或指令 ORL A,Rn ORL A,Rn ;(A)(