《第3章MCS-51单片机的汇编语言指.ppt》由会员分享,可在线阅读,更多相关《第3章MCS-51单片机的汇编语言指.ppt(67页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第3 3章章 MCS-51MCS-51单片机的汇编语言指令单片机的汇编语言指令本章定位本章定位 基础知识基础知识 3 31 1 指令及指令系统概念指令及指令系统概念 3 32 MCS-512 MCS-51指令系统的寻址方式指令系统的寻址方式 3 32 21 1 寄存器寻址寄存器寻址 3 32 22 2 直接寻址直接寻址 3 32 23 3 寄存器间接寻址寄存器间接寻址 3 32 24 4 立即寻址立即寻址 3 32 25 5 基址寄存器加变址寄存器间接寻址基址寄存器加变址寄存器间接寻址 3 33 MCS-513 MCS-51单片机指令系统单片机指令系统 3 33 31 1 数据传送类指令数据
2、传送类指令 3 33 32 2 算术操作类指令算术操作类指令 3 33 33 3 逻辑运算类指令逻辑运算类指令 3 33 34 4 控制转移类指令控制转移类指令 3 33 35 5 位操作类指令位操作类指令 3 34 4 伪指令伪指令第第3 3章章 MCS-51MCS-51单片机的汇编语言指令单片机的汇编语言指令 3 31 1 指令及指令系统概念指令及指令系统概念1 1 指令指令 CPUCPU执行某种执行某种特定功能的特定功能的操作的命令。以指令代码形式表示。操作的命令。以指令代码形式表示。ROM ROM 字节数少,速度则快。字节数少,速度则快。MCS-51MCS-51的基本指令共的基本指令共
3、111111条条,按指令所占的字节来分:按指令所占的字节来分:(1)(1)单字节单字节指令指令4949条;条;(2)(2)双字节双字节指令指令4545条;条;(3)(3)三字节三字节指令指令1717条。条。按指令的执行时间来分:按指令的执行时间来分:(1)(1)1 1个机器周期个机器周期(1212个时钟振荡周期)指令个时钟振荡周期)指令6464条条 (2)(2)2 2个机器周期个机器周期(2424个时钟振荡周期)指令个时钟振荡周期)指令4545条条 (3)(3)只有只有乘、除两条指令乘、除两条指令的执行时间为的执行时间为4 4个机器周期个机器周期(4848个时钟振荡周期)。个时钟振荡周期)。1
4、2MHz12MHz晶振晶振:机器周期为机器周期为1 1 s s。2 2 指令表示形式指令表示形式 二进制二进制 机器码,目标吗机器码,目标吗|十六进制十六进制 辅助辅助|助记符形式助记符形式 汇编,汇编,C C语言语言MCS-51MCS-51单片机汇编语言指令格式一般包含单片机汇编语言指令格式一般包含4 4个区段:个区段:标号:标号:操作码助记符操作码助记符 目的操作数目的操作数,源操作数源操作数 ;注释;注释 标标号号是是一一条条指指令令的的标标志志,是是可可选选字字段段,与与操操作作码码之之间间用用“:”:”隔隔开;主要方便调用或转移。开;主要方便调用或转移。操操作作码码规规定定指指令令的
5、的功功能能,是是一一条条指指令令的的必必选选字字段段,如如果果没没有有操操作码,就不能成为指令。它与操作数之间用作码,就不能成为指令。它与操作数之间用“空格空格”隔开。隔开。操操作作数数是是指指令令操操作作的的对对象象。分分为为目目的的操操作作数数和和源源操操作作数数两两类类,它们之间用它们之间用“,”分隔。分隔。操作数是可选字段。一条指令可以有操作数是可选字段。一条指令可以有0 0、1 1、2 2、3 3个操作数。个操作数。注释注释是对指令功能的说明解释。以是对指令功能的说明解释。以“;”开始。开始。例如例如:AAAA:ADD AADD A,10H10H ;将累加器将累加器A A的内容与的内
6、容与10H10H相加,相加,结果存入累加器结果存入累加器A A。AAAA为为标标号号,是是这这条条指指令令的的标标志志,其其值值是是该该条条指指令令的的首首地地址址;ADDADD为为操操作作码码,说说明明要要进进行行加加法法运运算算;目目的的操操作作数数为为累累加加器器A A,源源操操作作数数为为10H10H;“;”后后面面为为注注释释部分。部分。3 3 指令系统指令系统 一套控制计算机执行操作的编码,通常是二进制,称为机器语言。汇编需要翻译成机器语言。4 4 指令中的数据形式指令中的数据形式二进制 0110B八进制 23O十进制 23十六进制 23H都要以数字开头:12H,0F7H。3.2
7、3.2 指令系统的寻址方式指令系统的寻址方式寻址方式寻址方式就是在指令中就是在指令中说明操作数所在地址说明操作数所在地址的方法。的方法。共共5 5种种寻址方式。寻址方式。1 1寄存器寻址方式寄存器寻址方式2 2直接寻址方式直接寻址方式3.3.寄存器间接寻址方式寄存器间接寻址方式4 4立即寻址方式立即寻址方式5 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式下面,首先看看指令下面,首先看看指令学习时学习时的符号意义。的符号意义。指令中符号的意义指令中符号的意义:-:-在课本在课本 3.3 3.3 的的 P29P29RnRn 当前寄存器区的当前寄存器区的8 8个工作寄存器个
8、工作寄存器R0R0R7(n=0R7(n=0 7)7)。如:如:MOV AMOV A,RnRnRiRi 当前寄存器区中可作间接寻址寄存器的当前寄存器区中可作间接寻址寄存器的2 2个寄存个寄存 器器R0R0、R1(i=0,1)R1(i=0,1)。DirectDirect 直接地址,即直接地址,即8 8位的内部位的内部RAMRAM或特殊功能寄存或特殊功能寄存 器的地址。器的地址。如:如:MOV AMOV A,10H10H#data#data 包含在包含在指令中的指令中的8 8位立即数位立即数。MOV AMOV A,#12H#12H#data16#data16 包含在包含在指令中的指令中的1616位立
9、即数位立即数。relrel 相对转移指令中的偏移量,为相对转移指令中的偏移量,为8 8位的带符号补位的带符号补 码数。码数。DPTRDPTR 数据指针数据指针,可用作,可用作1616位的数据地址寄存器。位的数据地址寄存器。bitbit 内部内部RAMRAM或特殊功能寄存器中的或特殊功能寄存器中的直接寻址位直接寻址位。C C(或(或CyCy)进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。addr11addr11 1111位目的地址位目的地址addr16addr16 1616位目的地址位目的地址 间接寻址寄存器前缀,如间接寻址寄存器前缀,如 RiRi,A+DPTRA+DPTR(X
10、)(X)X X中的内容中的内容。(X)(X)由由X X寻址的单元中的内容寻址的单元中的内容。箭头右边的内容被箭头左边的内容所取代。箭头右边的内容被箭头左边的内容所取代。5 5种种寻址方式。寻址方式。1 1寄存器寻址方式寄存器寻址方式 操作数在寄存器中操作数在寄存器中 MOV AMOV A,RnRn ;(;(RnRn)A A,n=0n=07 7 表示把寄存器表示把寄存器RnRn的内容传送给累加器的内容传送给累加器A A 寻址范围:寻址范围:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个工作寄存器。个工作寄存器。(2 2)部部分分特特殊殊功功能能寄寄存存器器,例例如如A A、B B
11、 以以及及数数据据指指针针寄存器寄存器DPTRDPTR等。等。2 2直接寻址方式直接寻址方式 操作数直接以单元地址的形式给出:操作数直接以单元地址的形式给出:MOV AMOV A,40H40H 寻址范围:寻址范围:(1)(1)内部内部RAMRAM的的128128个单元个单元(2)(2)特特殊殊功功能能寄寄存存器器。除除了了以以单单元元地地址址的的形形式式外外,还还可用寄存器符号可用寄存器符号的形式给出。例如:的形式给出。例如:MOV AMOV A,80H80H 与与 MOV AMOV A,P0P0是等价的是等价的。3.3.寄存器间接寻址方式寄存器间接寻址方式 寄存器中存放的是操作数的地址,寄存
12、器中存放的是操作数的地址,在寄存器前加在寄存器前加前缀前缀标志标志“”。访问访问内部内部RAMRAM或或外部外部RAMRAM的低的低256256个字节个字节时,时,只能采用只能采用R0R0或或R1R1作为间址寄存器作为间址寄存器。例如:。例如:MOV AMOV A,RiRi ;i=0i=0或或1 1 其中其中RiRi中的内容为中的内容为40H40H,把内部把内部RAM40HRAM40H单元内容送单元内容送A A。寻址范围:寻址范围:(1 1)访问)访问内部内部RAMRAM低低128128个个单元,其通用形式为单元,其通用形式为 RiRi(2 2)对对外部内部外部内部RAMRAM的的64K64K
13、字节字节的间接寻址,例如:的间接寻址,例如:MOVX AMOVX A,DPTRDPTR(3 3)片外数据存储器的低)片外数据存储器的低256256字节字节 例如:例如:MOVX AMOVX A,RiRi(4 4)堆栈区堆栈区 堆栈操作指令堆栈操作指令PUSHPUSH(压栈)和压栈)和POPPOP(出栈)使用堆出栈)使用堆栈指针(栈指针(SPSP)作间址寄存器作间址寄存器4 4立即寻址方式立即寻址方式 操作数在指令中直接给出,需在操作数前面加前缀操作数在指令中直接给出,需在操作数前面加前缀 “#”#”。例如:。例如:MOV AMOV A,#40H#40H 5 5基址寄存器加变址寄存器间址寻址方式
14、基址寄存器加变址寄存器间址寻址方式 本寻址方式是以本寻址方式是以DPTRDPTR或或PCPC作基址寄存器,以累加器作基址寄存器,以累加器A A作为变址寄存器。作为变址寄存器。例例如如:指指令令 MOVC MOVC A A,A+DPTRA+DPTR 其其中中A A的的原原有有内内容容为为05H05H,DPTRDPTR的的内内容容为为0400H0400H,该该指指令令执执行行的的结结果果是是把把程程序序存储器存储器0405H0405H单元的内容传送给单元的内容传送给A A。说明:说明:(1 1)本本寻寻址址方方式式是是专专门门针针对对程程序序存存储储器器的的寻寻址址方方式式,寻址范围可达到寻址范围
15、可达到64KB64KB。(2 2)本寻址方式的指令只有本寻址方式的指令只有3 3条条:MOVC AMOVC A,A+DPTRA+DPTRMOVC AMOVC A,A+PCA+PCJMP A+DPTRJMP A+DPTR3.3 MCS-513.3 MCS-51指令系统分类介绍指令系统分类介绍111111条指令条指令,按功能分类,可分为下面,按功能分类,可分为下面5 5大类大类:(1 1)数据传送类)数据传送类(28(28条条)(2 2)算术操作类)算术操作类(24(24条条 (3 3)逻辑运算类)逻辑运算类(25(25条条)(4 4)控制转移类)控制转移类(17(17条条)(5 5)位操作类)位
16、操作类(17(17条条)3.4.1 3.4.1 数据传送类指令数据传送类指令 使用最频繁使用最频繁的一类指令的一类指令,通用格式:通用格式:MOV MOV ,属属“复制复制”性质,而性质,而不是不是“搬家搬家”数数据据传传送送类类指指令令不不影影响响标标志志位位:CyCy、AcAc和和OVOV,影影响响奇奇偶标志位偶标志位P P。1 1以累加器为目的操作数的指令以累加器为目的操作数的指令 MOV MOV A,RnA,Rn ;(;(Rn)ARn)A,n=0n=07 7 MOV MOV A,RiA,Ri ;(;(Ri)A,iRi)A,i=0,1=0,1 MOV A,direct ;MOV A,di
17、rect ;(directdirect)A A MOV A,#data ;#dataAMOV A,#data ;#dataA 例如:例如:MOV A,R6 ;(R6)AMOV A,R6 ;(R6)A,寄存器寻址寄存器寻址 MOV A,70H ;(70H)AMOV A,70H ;(70H)A,直接寻址直接寻址 MOV A,R0 ;(R0)AMOV A,R0 ;(R0)A,间接寻址间接寻址 MOV A,#78H ;78HAMOV A,#78H ;78HA,立即寻址立即寻址 2.2.以以RnRn为目的操作数的指令为目的操作数的指令 MOV MOV Rn,ARn,A ;(;(A)Rn,nA)Rn,n=
18、0=07 7 MOV MOV Rn,directRn,direct ;(directdirect)Rn,nRn,n=0=07 7 MOV MOV Rn,#datRn,#dat ;#;#dataRn,ndataRn,n=0=07 7功功能能:是是把把源源操操作作数数的的内内容容送送入入当当前前一一组组工工作作寄寄存存器器区的区的R0R0R7R7中的某一个寄存器。中的某一个寄存器。3.3.以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令 MOV direct,A;(A)directMOV direct,A;(A)direct MOV MOV direct,Rn;(R
19、n)directdirect,Rn;(Rn)direct,n=0,n=07 7 MOV direct1,direct2;MOV direct1,direct2;MOV MOV direct,Ridirect,Ri;(;(Ri)directRi)direct MOV MOV direct,#data;#datadirect direct,#data;#datadirect功功能能:把把源源操操作作数数送送入入直直接接地地址址指指出出的的存存储储单单元元。directdirect指的是内部指的是内部RAMRAM或或SFRSFR的地址。的地址。4.4.以寄存器间接地址为目的操作数的指令以寄存器间接地
20、址为目的操作数的指令 MOV MOV Ri,ARi,A ;(;(A)(Ri),iA)(Ri),i=0,1=0,1 MOV MOV Ri,directRi,direct ;(directdirect)(RiRi)MOV MOV Ri,#dataRi,#data ;#;#data(Ridata(Ri)5.165.16位数传送指令位数传送指令 MOV DPTR,#data16 ;#data16DPTRMOV DPTR,#data16 ;#data16DPTR唯一的唯一的1616位数据的传送指令位数据的传送指令 ,立即数的高立即数的高8 8位送入位送入DPHDPH,立即数的低立即数的低8 8位送入位送
21、入DPLDPL。6 6堆栈操作指令堆栈操作指令MCS-51MCS-51内部内部RAMRAM中可以设定一个中可以设定一个后进先出后进先出(LIFO-Last LIFO-Last In First OutIn First Out)的区域称作的区域称作堆栈堆栈.堆栈指针堆栈指针SPSP指出堆栈的栈顶位置。指出堆栈的栈顶位置。(1)(1)进栈指令进栈指令 PUSH directPUSH direct先先将将栈栈指指针针SPSP加加1 1,然然后后把把directdirect中中的的内内容容送送到到栈栈指指针针SPSP指示的内部指示的内部RAMRAM单元中。单元中。例如:例如:当(当(SPSP)=60H
22、,=60H,(A A)=30H,=30H,(B B)=70H=70H时,执行:时,执行:PUSH ACCPUSH ACC (SP)+1=61HSP,(A)61H (SP)+1=61HSP,(A)61H PUSH 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
23、字字节节单单元中,栈指针元中,栈指针SPSP减减1 1。例如例如:当当 (SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H,(61H)=30H,执行:执行:POP DPH;(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)=60H思考:思考:POP SPPOP SP7.7.累加器累加器A A与外部数据存储器传送指令与外部数据存储器传送指令
24、 MOVX A,DPTR;(DPTR)A,MOVX A,DPTR;(DPTR)A,读外部读外部RAM/IORAM/IO MOVX MOVX A,RiA,Ri;(;(Ri)ARi)A,读外部读外部RAM/IORAM/IO MOVX DPTR,A;(A)(DPTR),MOVX DPTR,A;(A)(DPTR),写外部写外部RAM/IORAM/IO MOVX MOVX Ri,ARi,A;(;(A)(RiA)(Ri),),写外部写外部RAM/IORAM/IO功功能能:读读外外部部RAMRAM存存储储器器或或I/OI/O中中的的一一个个字字节节,或或把把A A中中一个字节的数据写到外部一个字节的数据写到
25、外部RAMRAM存储器或存储器或I/OI/O中。中。注意:注意:RDRD*或或WRWR*信号有效。信号有效。采用采用DPTRDPTR间接寻址,间接寻址,高高8 8位地址(位地址(DPHDPH)由)由P2P2口口输出,输出,低低8 8位地址(位地址(DPLDPL)由)由P0P0口口输出。输出。采用采用RiRi(i=0,1i=0,1)间接寻址)间接寻址,可寻址片外,可寻址片外RAMRAM的的256256个个单元。单元。RiRi内容由内容由P0P0口输出。口输出。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)
27、=30H,(A)=30H,执行地址执行地址1000H1000H处的指令处的指令 1000H1000H:MOVC A,A+PCMOVC 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 本本指指令令的的执执行行结结果果只只和和指指针针D
29、PTRDPTR及及累累加加器器A A的的内内容容有有关关,与与该该指指令令存存放放的的地地址址及及常常数数表表格格存存放放的的地地址址无无关,关,因因此此表表格格的的大大小小和和位位置置可可以以在在64K64K程程序序存存储储器器中中任任意意安安排排,一个表格,一个表格可为各个程序块公用。可为各个程序块公用。两条指令是在两条指令是在MOVMOV的后面加的后面加C C,“C”C”是是CODECODE的第一个字的第一个字母,即代码的意思。母,即代码的意思。9 9数据交换指令数据交换指令 1 1)字节交换指令字节交换指令 XCH XCH A,RnA,Rn XCH A,directXCH A,dire
30、ct XCH XCH A,RiA,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)=0
31、FH,(R7)=80H,(40H)=08H,(30H)=F0H 2 2)半字节交换指令)半字节交换指令 XCHD XCHD A,RiA,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.3.2 3.3.2 算术操作类指令算术操作类指令 单字节的加、减、乘、除法指令,都是针对单字节的加、减、乘、除法指令,都
32、是针对8 8位二进位二进制无符号数。制无符号数。执行的结果对执行的结果对CyCy、AcAc、OVOV 三种标志位有影响。三种标志位有影响。但增但增1 1和减和减1 1指令不影响上述标志。指令不影响上述标志。1 1加法指令加法指令 共有共有4 4条加法运算指令:条加法运算指令:ADD ADD A,RnA,Rn ;(;(A)+(Rn)AA)+(Rn)A,n=0n=07 7 ADD A,direct ;(A)+(direct)A ADD A,direct ;(A)+(direct)A ADD ADD A,RiA,Ri ;(;(A)+(Ri)A,iA)+(Ri)A,i=0,1=0,1 ADD A,#d
33、ata ;(A)+#dataAADD A,#data ;(A)+#dataA一一个个加加数数总总是是来来自自累累加加器器A A,而而另另一一个个加加数数可可由由不不同同的寻址方式得到。结果总是放在的寻址方式得到。结果总是放在A A中。中。使使用用加加法法指指令令时时,要要注注意意累累加加器器A A中中的的运运算算结结果果对对各各个标志位的影响:个标志位的影响:(1 1)如如果果位位7 7有有进进位位,则则置置“1”1”进进位位标标志志CyCy,否否则则清清“0”Cy0”Cy(2 2)如如果果位位3 3有有进进位位,置置“1”1”辅辅助助进进位位标标志志AcAc,否否则清则清“0”Ac0”Ac(
34、AcAc为为PSWPSW寄存器中的一位)寄存器中的一位)(3 3)如如果果位位6 6有有进进位位,而而位位7 7没没有有进进位位,或或者者位位7 7有有进进位位,而而位位6 6没没有有,则则溢溢出出标标志志位位OVOV置置“1”1”,否否则则清清“0”OV0”OV。溢溢出出标标志志位位OVOV的的状状态态,只只有有在在带带符符号号数数加加法法运运算算时时才才有有意意义义。当当两两个个带带符符号号数数相相加加时时,OV=1OV=1,表表示示加加法法运算运算超出了超出了累加器累加器A A所能表示的带符号数的有效范围。所能表示的带符号数的有效范围。例例 (A)=53H(A)=53H,(R0)=0FC
35、H(R0)=0FCH,执行指令执行指令 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)=0AFH=0AFH,执行指令:执行指令: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=1OV=12 2带进位加法指令带进位加法指令标志位标志位CyCy参加运算,因此是三个数相加。共参加运算,因此是三个数相加。共4 4条:条:ADDCADDCA,RnA,Rn;(;(A)+(Rn)+A)+(Rn)+C CAA,n=0n=07 7 ADDCADDCA,directA,direct;(A)+(direct)+;(A)+(direct)+C CA A ADDCADDCA,RiA,Ri ;(;(A)+(Ri)+A)+(Ri)+C CAA,i=0,1i=0,1 ADDC ADDCA,#data A,#data;(A)+
37、#data+;(A)+#data+C CAA 例:例:(A A)=85H,=85H,(20H20H)=0FFH,Cy=1=0FFH,Cy=1,执行指令:执行指令:ADDC A,20HADDC A,20H结结果果为为:(A A)=85H=85H,Cy=1Cy=1,OV=0OV=0,P=1 P=1(A A中中1 1 的的位位数数为奇数)为奇数)3 3增增1 1指令指令 5 5条增条增1 1指令:指令:INC AINC A INC INC RnRn ;n=0 ;n=07 7INC direct INC direct INC INC RiRi ;i=0,1 ;i=0,1 INC DPTRINC DPT
38、R不影响不影响PSWPSW中的任何标志中的任何标志。第第5 5条条指指令令INC INC DPTRDPTR,是是1616位位数数增增1 1指指令令。指指令令首首先先对对低低8 8位指针位指针DPLDPL的内容执行加的内容执行加1 1的操作,当产生溢出的操作,当产生溢出时,就对时,就对DPHDPH的内容进行加的内容进行加1 1操作,操作,并不影响并不影响标志标志CyCy的的状态。状态。4 4十进制调整指令(十进制调整指令(会用会用指令指令 了解了解原理)原理)用于对用于对BCDBCD码十进制数加法运算结果的内容修正。码十进制数加法运算结果的内容修正。指令格式:指令格式:DA ADA A两两个个B
39、CDBCD码码按按二二进进制制相相加加之之后后,必必须须经经本本指指令令的的调调整整 才能得到正确的压缩才能得到正确的压缩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+1000
40、=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位
42、位分别加分别加6 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=12
43、356+67=123,结果是正确的。,结果是正确的。5 5带借位的减法指令带借位的减法指令 4 4条指令条指令:SUBB SUBB A,RnA,Rn ;(A A)-(RnRn)-Cy-CyAA,n=0n=07 7 SUBB A,direct;SUBB A,direct;(A A)-(directdirect)-CyCyAA SUBB SUBB A,RiA,Ri;(A A)-((RiRi))-CyCyAA,i=0,1,i=0,1 SUBB SUBB A,#dataA,#data ;(A A)-#data-#data-CyCyAA 从累加器从累加器A A中的内容减去指定的变量和进位标志中的内容减去
44、指定的变量和进位标志CyCy的的值,结果存在累加器值,结果存在累加器A A中。中。如果如果位位7 7需借位需借位则置则置“1”Cy1”Cy,否则清否则清“0”Cy0”Cy;如果如果位位3 3需借位需借位则置则置“1”Ac1”Ac,否则清否则清“0”Ac0”Ac;如果如果位位6 6需借位需借位而而位位7 7不需要借位不需要借位,或者或者位位7 7需借位,需借位,位位6 6不需借位不需借位,则置,则置“1”1”溢出标志位溢出标志位OVOV,否则清否则清“0”OV0”OV。例例 (A A)=C9H,=C9H,(R2R2)=54H,Cy=1=54H,Cy=1,执行指令执行指令:SUBB A,R2SUB
45、B 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 DEC RnRn ;(Rn)-1Rn(Rn)-1Rn,n=0n=07 7DEC directDEC direct;(direct)-1direct(direct)-1directDEC DEC RiRi ;(Ri)-1(Ri)-1(RiRi),),i=0,1i=0,1减减1 1指令不影响标志位。指令不影响标志位。7 7乘法指令乘法指令 MUL
46、AB MUL AB ;ABBA ABBA 高位高位B B如果积大于如果积大于255255,则置,则置“1”1”溢出标志位溢出标志位OVOV 8除法指令除法指令 DIV AB DIV AB ;A/BAA/BA(商),余数商),余数B B如如果果B B的的内内容容为为“0”0”(即即除除数数为为“0”0”),则则存存放放结结果的果的A A、B B中的内容不定,并置中的内容不定,并置“1”1”溢出标志位溢出标志位OVOV。3.3.3 3.3.3 逻辑运算指令逻辑运算指令1.1.清零指令清零指令 :CLR ACLR A功能是累加器功能是累加器A A清清“0”0”。不影响。不影响CyCy、AcAc、OV
47、OV等标志。等标志。2.2.取反取反 :CPL ACPL 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移入进位位移入进位位CyCy,CyCy移入移入Acc.0Acc.0,不影不影响
48、其它标志。响其它标志。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 ASWAP A将将累累加加器器A A的的高高半半字字节节(Acc.7Acc.7Acc.4Ac
49、c.4)和和低低半半字字节节(Acc.3Acc.3Acc.0Acc.0)互换。互换。例例 (A A)=0C5H=0C5H,执行指令:执行指令:SWAP ASWAP A 结果结果:(:(A A)=5CH=5CH7 7逻辑与指令逻辑与指令 ANL ANL A,RnA,Rn ;(A A)(RnRn)A A,n=0n=07 7 ANL A,direct;ANL A,direct;(A A)(directdirect)A A ANL A,#data ;ANL A,#data ;(A A)#dataA#dataA ANL ANL A,RiA,Ri ;(A A)((RiRi))A)A,i=0i=01 1 A
50、NL 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 ORL A,RnA,Rn ;(A)(A)(RnRn)A A,n=0n=07 7 ORL A,direct ORL A,direct ;(A