《第3章 指令系统.ppt》由会员分享,可在线阅读,更多相关《第3章 指令系统.ppt(151页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程主讲人:第第3章章 指令系统指令系统2 2第第3章章 8051指令系统与指令系统与 编程基础编程基础 23 3第第3章章 8051指令系统与编程基础指令系统与编程基础3.1 3.1 指令系统概述指令系统概述3.2 3.2 指令格式指令格式3.3 3.3 指令系统的寻址方式指令系统的寻址方式3.4 3.4 80518051指令系统分类介绍指令系统分类介绍 3.4.1 3.4.1 数据传送类指令数据传送类指令 3.4.2 3.4.2 算术运算类指令算术运算类指令 3.4.3 3.4.3 逻辑操作类指令逻辑操作类指令 3.4.4 3.4.4 控制跳转类指令控制跳转类指令 3.4.5 3.4.5
2、位操作类指令位操作类指令3.5 3.5 80518051指令系统汇总指令系统汇总3.6 3.6 某些指令的说明某些指令的说明3.7 3.7 80518051汇编语言程序设计基础汇编语言程序设计基础4 4 3.7.1 3.7.1 编程语言概述编程语言概述 3.7.2 3.7.2 汇编语言语句和格式汇编语言语句和格式 3.7.3 3.7.3 伪指令伪指令 3.7.4 3.7.4 汇编语言源程序的汇编汇编语言源程序的汇编3.8 3.8 80518051汇编语言程序设计举例汇编语言程序设计举例 3.8.1 3.8.1 子程序的设计子程序的设计 3.8.2 3.8.2 查表程序设计查表程序设计 3.8.
3、3 3.8.3 分支转移程序设计分支转移程序设计 3.8.4 3.8.4 循环程序设计循环程序设计5 5内容概要内容概要凡是凡是8051内核的单片机均使用内核的单片机均使用8051的汇编语言指令系统。的汇编语言指令系统。介绍指令系统介绍指令系统寻寻址方式址方式对对111111条条基本指令基本指令按功能分类详细讲解按功能分类详细讲解。指令指令-是是CPUCPU按照人们的意图来完成某种操作的命令,它以英文名称或缩按照人们的意图来完成某种操作的命令,它以英文名称或缩写形式作为写形式作为助记符助记符。汇编语言指令汇编语言指令-用助记符、符号地址、标号等表示的书写程序的语言。用助记符、符号地址、标号等表
4、示的书写程序的语言。熟知并掌握熟知并掌握8051指令系统的各类指令是指令系统的各类指令是AT89S51/52单片机汇编语言源程序单片机汇编语言源程序的设计基础。的设计基础。6 63.1 3.1 指令系统概述指令系统概述简明、易掌握、效率较高的指令系统简明、易掌握、效率较高的指令系统,复杂指令集复杂指令集。按按所占字节分所占字节分,分,分三种三种:(1 1)单字节指令)单字节指令4949条;条;(2 2)双字节指令)双字节指令4545条;条;(3 3)三字节指令)三字节指令1717条。条。按按执行时间来分执行时间来分,分三种:,分三种:(1 1)1 1个个机器周期(机器周期(1212个时钟振荡周
5、期)的指令个时钟振荡周期)的指令6464条条;(2 2)2 2个个机器周期指令机器周期指令4545条条;(3 3)4 4个个机器周期机器周期乘、除指令乘、除指令。67 712MHz12MHz晶振,每个机器周期为晶振,每个机器周期为1 1s s。AT89S52AT89S52一大特点一大特点是在硬件结构中有一个是在硬件结构中有一个位处理机位处理机,一个处理一个处理位变量位变量的的指指令子集令子集。3.2 3.2 指令格式指令格式 指令格式指令格式:指令的表示方法。指令的表示方法。指令通常由指令通常由两部分两部分组成:组成:操作码操作码和和操作数操作数。操作码操作码指令进行什么指令进行什么操作操作。
6、操作数操作数指令操作的指令操作的对象对象。可能是一具体数据,也可能是指出到哪里取。可能是一具体数据,也可能是指出到哪里取得数据的地址或符号。得数据的地址或符号。指令长度不同,格式也就不同。指令长度不同,格式也就不同。78 8(1 1)单字节指令:操作码和操作数同在一个字节中。)单字节指令:操作码和操作数同在一个字节中。(2 2)双字节指令:一个字节为操作码,另一个字节是操作数)双字节指令:一个字节为操作码,另一个字节是操作数。(3 3)三字节指令:操作码占一个字节,操作数占二个字节)三字节指令:操作码占一个字节,操作数占二个字节。3.3 3.3 指令系统的寻址方式指令系统的寻址方式寻址方式寻址
7、方式在指令中说明操作数所在地址的方法。在指令中说明操作数所在地址的方法。一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统就越复杂一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统就越复杂。寻址方式所要解决的主要问题寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的寻址空间就是如何在整个存储器和寄存器的寻址空间内快速地内快速地找到指定的地址单元找到指定的地址单元。下面介绍指令系统下面介绍指令系统7 7种种寻址方式。寻址方式。89 91 1寄存器寻址方式寄存器寻址方式指令中的操作数为某一寄存器的内容。指令中的操作数为某一寄存器的内容。 例如:例如:MOVMOVA A,R Rn
8、n ;(R(Rn n) )A A,n n =0=07 7把把R Rn n中的源操作数送入到累加器中的源操作数送入到累加器A A中。由于指令指定了从寄存器中。由于指令指定了从寄存器R Rn n中取得中取得源操作数,所以称为寄存器寻址方式。源操作数,所以称为寄存器寻址方式。2 2直接寻址方式直接寻址方式指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用接的操作数单元地址用“directdirect”表示。表示。例如:例如: MOVMOVA A,directdirect “directdirect”就是
9、操作数的单元地址就是操作数的单元地址。91010 例如:例如: MOVMOV A A,40H40H 表示把内部表示把内部RAM 40HRAM 40H单元(单元(directdirect)的内容传送到)的内容传送到A A。指令中。指令中源操作数(源操作数(右边的操作数)采用的是右边的操作数)采用的是直接寻址方式直接寻址方式。 指令中两个操作数都可由直接寻址方式给出指令中两个操作数都可由直接寻址方式给出。 例如:例如: MOVMOVdirect1direct1,direct2direct2 具体指令:具体指令:MOV 42HMOV 42H,62H62H 把片内把片内RAMRAM中中62H62H单元
10、的内容送到片内单元的内容送到片内RAMRAM中的中的42H42H单元中单元中。直接寻址直接寻址是访问片内所有特殊功能寄存器的是访问片内所有特殊功能寄存器的唯一寻址方式。唯一寻址方式。1011113. 3. 寄存器间接寻址方式寄存器间接寻址方式寄存器中存的是寄存器中存的是操作数地址操作数地址,即先从寄存器中找到操作数的地址,再按该,即先从寄存器中找到操作数的地址,再按该地址找到操作数。地址找到操作数。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加寄存器名称前面加前缀标志前缀标志“ ”。例如:例如:M
11、OV AMOV A,RRi i ;i i=0=0或或1 1其中,其中, R Ri i的内容为的内容为40H40H,即把,即把内部内部RAM 40HRAM 40H地址单元中的内容传送给地址单元中的内容传送给A A。1112124 4立即数寻址方式立即数寻址方式直接在指令中给出操作数直接在指令中给出操作数也称也称立即数立即数。为了与直接寻址指令中的直接。为了与直接寻址指令中的直接地址加以区别,地址加以区别,需在操作数前加前缀标志需在操作数前加前缀标志“# #”。例如:例如: MOV AMOV A,#40H#40H第一个字节是操作码,第二字节是立即数第一个字节是操作码,第二字节是立即数,就是放在程序
12、存储器内的常数就是放在程序存储器内的常数。1213135 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式以以DPTRDPTR或或PCPC作为作为基址寄存器基址寄存器,以累加器,以累加器A A作为作为变址寄存器变址寄存器,以两者内容相,以两者内容相加形成的加形成的1616位地址作为目的地址进行寻址。例如指令:位地址作为目的地址进行寻址。例如指令: MOVCMOVCA A,A+DPTRA+DPTR 其中,其中,(A A)=05H=05H,(DPTRDPTR)=0400H=0400H,指令执行结果是把程序存储器,指令执行结果是把程序存储器0405H0405H单元的内容传送给单
13、元的内容传送给A A。本寻址方式的本寻址方式的指令有指令有3 3条条:MOVCMOVCA A,A+DPTRA+DPTRMOVCMOVCA A,A+PCA+PCJMPJMPA A,A+DPTRA+DPTR前两条指令适用于读程序存储器中固定的数据。前两条指令适用于读程序存储器中固定的数据。例如,例如,将固定的、按将固定的、按131414一定顺序排列的一定顺序排列的表格表格存放在程序存储器中,在程序运行中由存放在程序存储器中,在程序运行中由A A的动态参量的动态参量来确定读取对应的表格参数来确定读取对应的表格参数。第第3 3条为条为散转指令散转指令,A A中内容为程序运行后的动态结果,可根据中内容为
14、程序运行后的动态结果,可根据A A中不同内中不同内容,实现跳向不同程序入口的跳转。容,实现跳向不同程序入口的跳转。6 6相对寻址方式相对寻址方式解决程序转移。解决程序转移。该该寻址是以该转移指令的地址(寻址是以该转移指令的地址(PCPC值)加上它的字节数值)加上它的字节数,再加上,再加上相对偏移量(相对偏移量(relrel),),形成形成新的转移目的地址新的转移目的地址,从而程序转,从而程序转移到该目的地址。转移的目的地址移到该目的地址。转移的目的地址用下式计算:用下式计算: 目的地址目的地址= =转移指令所在的地址转移指令所在的地址+ +转移指令字节数转移指令字节数+rel+rel1515其
15、中,其中,偏移量偏移量relrel是带符号是带符号8 8位二进制补码数位二进制补码数,128128+127+127。程序转移范围程序转移范围是以转移指令的是以转移指令的下条指令首地址下条指令首地址为基准地址,相对偏移在为基准地址,相对偏移在128128+127+127之间。之间。例如,例如, SJMP rel SJMP rel程序要转移到该指令的程序要转移到该指令的PCPC值加值加3 3再加上再加上relrel的目的地址处。编写程序时,只的目的地址处。编写程序时,只需在转移指令中直接写要转向的地址标号。需在转移指令中直接写要转向的地址标号。例如:例如: SJMP LOOPSJMP LOOP“L
16、OOPLOOP” 为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。但手工汇编时,偏移量的值但手工汇编时,偏移量的值由由手工计算。手工计算。1516167 7位寻址方式位寻址方式 对内部对内部RAMRAM和特殊功能寄存器具有位寻址功能的某位内容进行置和特殊功能寄存器具有位寻址功能的某位内容进行置1 1和清和清0 0操操作。作。位地址一般以位地址一般以直接位地址直接位地址给出,位地址符号为给出,位地址符号为“bitbit”。例如:例如:MOV CMOV C,bitbit 其具体指令:其具体指令: MOV CMOV C,40H40H把位
17、地址为把位地址为40H40H的值送到进位位的值送到进位位C C。由于由于AT89S52AT89S52具有位处理功能,可直接对数据位方便地实现置具有位处理功能,可直接对数据位方便地实现置1 1、清、清0 0、求、求反、传送、判跳和逻辑运算等操作,为测控系统的应用提供了最佳代反、传送、判跳和逻辑运算等操作,为测控系统的应用提供了最佳代码和速度,增强了实时性。码和速度,增强了实时性。1617177 7种寻址方式种寻址方式已介绍完毕。已介绍完毕。问题:问题:当一条指令给定后,如何来确定该指令的寻址方式?当一条指令给定后,如何来确定该指令的寻址方式?例如例如: : MOV MOV A A,#40H#40
18、H,属于立即数寻址还是寄存器寻址?,属于立即数寻址还是寄存器寻址?要看以哪个操作数要看以哪个操作数作为参照系作为参照系。操作数分为操作数分为源操作数源操作数和和目的操作数目的操作数。对于。对于源操作数源操作数“#40H#40H”来说,是来说,是“立即数寻址立即数寻址”方式,但对方式,但对目的操作数目的操作数“A A”来说,是属于来说,是属于“寄存器寻寄存器寻址址”方式。方式。一般而言,一般而言,寻址方式指的是寻址方式指的是源操作数源操作数,所以此例为立即数寻址方式。,所以此例为立即数寻址方式。对指令系统对指令系统7 7种寻址方式种寻址方式总结,概括总结,概括见见表表3-13-1。1718181
19、8表表3-1 3-1 7 7种寻址方式及其寻址空间种寻址方式及其寻址空间19193.4 80513.4 8051指令系统分类介绍指令系统分类介绍共共111111条条指令,按功能分为指令,按功能分为五类五类:(1 1)数据传送类()数据传送类(2828条)条)(2 2)算术运算类()算术运算类(2424条)条)(3 3)逻辑操作类()逻辑操作类(2525条)条)(4 4)控制转移类()控制转移类(1717条)条)(5 5)位操作类()位操作类(1717条)条)先简单介绍指令先简单介绍指令用到用到的符号。的符号。Rn 当前寄存器区的当前寄存器区的8个工作寄存器个工作寄存器R0R7(n=07)。Ri
20、 当前寄存器区中作为间接寻址寄存器的当前寄存器区中作为间接寻址寄存器的2个寄存器个寄存器R0、R1(i=0,1)。19202020directdirect直接地址,即8位内部数据存储器单元或特殊功能寄存器的地址。#data#data指令中的8位立即数。#data16#data16指令中的16位立即数。relrel偏移量,8位的带符号补码数。DPTRDPTR数据指针,可用作16位数据存储器单元地址的寄存器。bitbit内部RAM或特殊功能寄存器中的直接寻址位。C C或或CyCy进位标志位或位处理机中的累加器。addr11addr1111位目的地址。addr16addr1616位目的地址。 间接寻
21、址寄存器前缀,如Ri,A+DPTR。( () )表示地址单元或寄存器中的内容。()表示以单元或寄存器中的内容作为地址间接寻址单元的内容。箭头右边的内容被箭头左边的内容所取代。21213.4.1 3.4.1 数据传送类指令数据传送类指令使用最频繁使用最频繁。一般数据传送类指令的助记符为。一般数据传送类指令的助记符为“MOVMOV”,通用格式通用格式如下:如下: MOV MOV , 数据传送类指令是数据传送类指令是把把源操作数源操作数传送传送到到目的操作数目的操作数。指令执行。指令执行之之后,源操作后,源操作数不改变,目的操作数修改为源操作数。所以数据传送类操作属数不改变,目的操作数修改为源操作数
22、。所以数据传送类操作属“复制复制”性质,性质,而不是而不是“搬家搬家”。本本类指令类指令不影响标志位不影响标志位: :CyCy、AcAc和和OVOV,但,但不包括不包括奇偶标志位奇偶标志位P P。2122221以累加器为目的操作数的指令以累加器为目的操作数的指令MOVA,Rn; (Rn)A,n =07MOVA, R Ri i ; (R Ri i)A i =0,1MOVA,direct ; (direct)AMOVA,#data ; #dataA把源操作数内容送累加器把源操作数内容送累加器A,源操作数源操作数有寄存器寻址、直接寻址、间接寻有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式,例如:
23、址和立即数寻址等方式,例如:MOVA,R6;(R6)A,寄存器寻址,寄存器寻址MOVA,R0;(R0)A,间接寻址,间接寻址MOVA,70H ;(70H)A,直接寻址,直接寻址MOVA,#78H;78HA,立即数寻址,立即数寻址2223232 2以以RnRn为目的操作数的指令为目的操作数的指令MOV MOV Rn ,A A ;(A)(A)Rn ,n n =0=07 7MOV MOV Rn ,direct direct ;(direct)(direct)Rn ,n n =0=07 7MOV MOV Rn ,#data#data;#data#dataRn ,n n =0=07 7把源操作数送入当前
24、寄存器区的把源操作数送入当前寄存器区的R0R0R7R7中的某一寄存器。中的某一寄存器。3 3以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令MOV directMOV direct,A A ; (A)(A)directdirectMOV directMOV direct,Rn ; ( (Rn) )directdirect,n n =0=07 7MOV direct1MOV direct1,direct2 direct2 ;(direct2)(direct2)direct1direct1MOV directMOV direct, Ri ; (Ri)directdi
25、rect,i i =0=0,1 1MOV directMOV direct,#data #data ; #data#datadirectdirect232424把源操作数送入直接地址指定的存储单元。把源操作数送入直接地址指定的存储单元。directdirect指的是内部指的是内部RAMRAM或或SFRSFR地址。地址。4 4以寄存器间接地址为目的操作数的指令以寄存器间接地址为目的操作数的指令MOVMOVRRi i,A A ;(A)(A)(R(Ri i), i i=0=0,1 1MOVMOVRRi i,direct direct ;(direct)(direct)(R(Ri i),i i=0=0
26、,1 1MOVMOVRRi i,#data #data ;#data#data(R(Ri i), i i=0=0,1 1功能是把源操作数内容送入功能是把源操作数内容送入R0R0或或R1R1指定的存储单元中。指定的存储单元中。5 51616位数传送指令位数传送指令MOVMOVDPTRDPTR,#data16#data16;#data16#data16DPTR DPTR 功能是把功能是把1616位立即数送入位立即数送入DPTRDPTR,用来设置数据存储器的地址指针。,用来设置数据存储器的地址指针。242525AT89S52AT89S52有两个有两个DPTRDPTR,通过设置,通过设置特殊功能寄存器
27、特殊功能寄存器AUXR1AUXR1中的中的DPSDPS位位来选择。当来选择。当DPS=1DPS=1,则指令中的,则指令中的DPTRDPTR即为即为DPTR1DPTR1,DPTR0DPTR0被屏蔽,反之亦然。被屏蔽,反之亦然。DPTRDPTR为为1616位的数据指针,分为位的数据指针,分为DPHDPH和和DPLDPL。操作十分灵活方便。操作十分灵活方便。设有两个设有两个DPTRDPTR后,就可避免频繁的出入堆栈操作后,就可避免频繁的出入堆栈操作。对于所有对于所有MOVMOV类指令,累加器类指令,累加器A A是一个特别重要的是一个特别重要的8 8位寄存器,位寄存器,CPUCPU对它具有对它具有其他
28、寄存器所没有的操作指令。后面将要介绍的加、减、乘、除指令都其他寄存器所没有的操作指令。后面将要介绍的加、减、乘、除指令都是以是以A A作为目的操作数作为目的操作数。2626R Rn n为所选择的寄存器组中的为所选择的寄存器组中的R0R0R7R7,直接地址直接地址directdirect为内部为内部RAMRAM的的00H00H7FH7FH和特殊功能寄存器(地址范围和特殊功能寄存器(地址范围80H80HFFHFFH)在间接地址中,用在间接地址中,用R0R0或或R1R1作为内部作为内部RAMRAM的地址指针,可访问内部的地址指针,可访问内部RAMRAM的的00H00H7FH7FH共共128128个单
29、元。个单元。6 6堆栈操作指令堆栈操作指令内部内部RAMRAM中设定一个中设定一个后进先出后进先出(LIFOLIFO,Last In First OutLast In First Out)的区域,称)的区域,称为为堆栈堆栈。在特殊功能寄存器中有一个。在特殊功能寄存器中有一个堆栈指针堆栈指针SPSP,指,指示示堆栈的栈顶位堆栈的栈顶位置。堆栈操作有进栈和出栈两种,因此,在指令系统中相应有两条堆置。堆栈操作有进栈和出栈两种,因此,在指令系统中相应有两条堆栈操作指令。栈操作指令。262727(1)进栈指令)进栈指令PUSH direct首先将栈指针首先将栈指针SP加加1,然后把,然后把direct中
30、的内容送到中的内容送到SP指示的内部指示的内部RAM单元中单元中。例如:例如:当当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令时,执行下列指令PUSHAcc;(SP)+1=61HSP,(A)61HPUSHB;(SP)+1=62HSP,(B)62H结果结果:(61H)=30H,(62H)=70H,(SP)=62H。(2)出栈指令)出栈指令POPdirect将将SP指示的栈顶单元指示的栈顶单元的的内容送入内容送入direct字节字节中中,SP减减1。272828例如:例如:当当(SP)=62H(SP)=62H,(62H)=70H(62H)=70H,(61H)=30H(61H)=
31、30H时,执行指令时,执行指令POP DPH POP DPH ;(SP)(SP)DPHDPH,(SP)-1(SP)-1SPSPPOP DPLPOP DPL;(SP)(SP)DPLDPL,(SP)-1(SP)-1SPSP结果为结果为(DPTR)=7030H(DPTR)=7030H,(SP)=60H(SP)=60H。7 7累加器累加器A A与外部数据存储器与外部数据存储器RAM/IORAM/IO传送指令传送指令MOVX AMOVX A,DPTR DPTR ;(DPTR)(DPTR)A A,读外部,读外部RAM/IORAM/IOMOVX AMOVX A,RRi i ;(R(Ri i)A A,读外部,
32、读外部RAM/IORAM/IOMOVX DPTRMOVX DPTR,A A ;(A)(A)(DPTR)(DPTR),写外部,写外部RAM/IO RAM/IO MOVX RMOVX Ri i ,A A ;(A)(A)(R(Ri i),写外部,写外部RAM/IORAM/IO282929MOVMOV的后面加的后面加“X X”,表示访问的是片外,表示访问的是片外RAMRAM或或I/OI/O口,在执行前两条指令,口,在执行前两条指令, (P3.7P3.7)有效;后两条指令,有效;后两条指令, (P3.6P3.6)有效。有效。采用采用1616位的位的 DPTRDPTR间接寻址间接寻址,可寻址整个,可寻址整
33、个64KB64KB片外数据存储器空间,高片外数据存储器空间,高8 8位地址位地址(DPHDPH)由)由P2P2口输出,低口输出,低8 8位地址(位地址(DPLDPL)由)由P0P0口输出。口输出。采用采用R Ri i(i i =0=0,1 1)进行间接寻址,)进行间接寻址,可寻址片外可寻址片外256256个单元的数据存储器。个单元的数据存储器。8 8位地位地址由址由P0P0口输出,锁存在地址锁存器中,然后口输出,锁存在地址锁存器中,然后P0P0口再作为口再作为8 8位数据口。位数据口。8 8查表指令查表指令共共两条两条,仅有的仅有的两条两条读程序存储器中表格数据的指令读程序存储器中表格数据的指
34、令。由于程序。由于程序29RDWR3030存储器只读存储器只读不写,因此传送不写,因此传送为为单向,从程序存储器中读出单向,从程序存储器中读出数据到数据到A中。两条查表指令均采用基址寄存器加变址寄存器间接寻址方式。中。两条查表指令均采用基址寄存器加变址寄存器间接寻址方式。(1)MOVCA,A+PC以以PC作为基址寄存器作为基址寄存器,A的内容的内容(无符号数无符号数)和和PC的当前值(下一条指令的的当前值(下一条指令的起始地址)相加后得到一个起始地址)相加后得到一个新的新的16位地址位地址,把该地址的内容送到,把该地址的内容送到A。例如:例如:当当 (A)=30H时,执行地址时,执行地址100
35、0H处的指令处的指令1000H: MOVCA,A+PC303131该指令占用一个字节,下一条指令的地址为该指令占用一个字节,下一条指令的地址为1001H,(PC)=1001H再加上再加上A中的中的30H,得得1031H,结果,结果把把程序存储器中程序存储器中1031H的内容送入累加的内容送入累加器器A。优点优点:不改变特殊功能寄存器及不改变特殊功能寄存器及PC的状态,根据的状态,根据A的内容就可以取出表的内容就可以取出表格中的常数。格中的常数。缺点缺点:表格只能存放在表格只能存放在该指令所在地址的该指令所在地址的+256个单元之内个单元之内,表格大小受,表格大小受到限制,且表格只能被一段程序所
36、用。到限制,且表格只能被一段程序所用。(2)MOVC A,A+DPTRDPTR为基址寄存器,为基址寄存器,A的内容的内容(无符号数无符号数)和和DPTR的内容相加得到一个的内容相加得到一个16位地址,把由该地址指定的程序存储器单元的内容送到累加器位地址,把由该地址指定的程序存储器单元的内容送到累加器A。3232例如:例如:(DPTR)=8100H,(A)=40H,执行指令,执行指令 MOVC A,A+DPTR将程序存储器中将程序存储器中8140H单元单元内容送入内容送入A中。中。本本指令执行结果只与指针指令执行结果只与指针DPTR及累加器及累加器A的内容有关,与该指令存放的地址的内容有关,与该
37、指令存放的地址及常数表格存放的地址无关,因此及常数表格存放的地址无关,因此表格的大小和位置可以在表格的大小和位置可以在64KB程序存程序存储器空间中任意安排储器空间中任意安排,一个表格,一个表格可以为各个程序块公用可以为各个程序块公用。两条指令的助记符都是在两条指令的助记符都是在MOV的后面加的后面加“C”,是是CODE的第一个字母,即的第一个字母,即表示程序存储器中的代码。表示程序存储器中的代码。323333执行上述两条指令时,单片机的执行上述两条指令时,单片机的 PSEN*引脚信号(程序存储器读)有效,引脚信号(程序存储器读)有效,这一点读者要牢记。这一点读者要牢记。9字节交换指令字节交换
38、指令XCH A,Rn ; (A) ( Rn),n =07XCH A,direct ; (A) ( direct)XCH A,Ri ; (A) ( Ri),i=0,1这组指令的功能是将累加器这组指令的功能是将累加器A的内容和源操作数的内容相互交换。源操作数的内容和源操作数的内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等方式。例如:有寄存器寻址、直接寻址和寄存器间接寻址等方式。例如: (A)=80H,(R7)=08H,(40H)=F0H (R0)=30H,(30H)=0FH执行下列指令:执行下列指令:333434XCHA,R7 ;(A) (R7)XCHA,40H ;(A) (40H
39、)XCHA,R0 ;(A) (R0)结果为结果为(A)=0FH(A)=0FH,(R7)=80H(R7)=80H,(40H)=08H(40H)=08H,(30H)=F0H(30H)=F0H。结果为结果为(A)=0FH(A)=0FH,(R7)=80H(R7)=80H,(40H)=08H(40H)=08H,(30H)=F0H(30H)=F0H。1010半字节交换指令半字节交换指令XCHDXCHD A A,RRi i累加器的低累加器的低4 4位与内部位与内部RAMRAM低低4 4位交换。位交换。例如:例如:(R0)=60H(R0)=60H,(60H)=3EH(60H)=3EH,(A)=59H(A)=5
40、9H 执行完执行完“XCHD AXCHD A,R0”R0”指令,则指令,则(A)=5EH(A)=5EH,(60H)=39H(60H)=39H。35353.4.2 3.4.2 算术运算类指令算术运算类指令指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较强。指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较强。算术运算指令都是算术运算指令都是针对针对8 8位二进制无符号数位二进制无符号数的,如要进行带符号或多字节二的,如要进行带符号或多字节二进制数运算,需编写具体的运算程序,通过执行程序实现。进制数运算,需编写具体的运算程序,通过执行程序实现。算术运算的结果将使算术运算的结果
41、将使PSWPSW的进位(的进位(CyCy)、辅助进位()、辅助进位(AcAc)、溢出()、溢出(OVOV)3 3种种标志位标志位置置1 1或清或清0 0。但增但增1 1和减和减1 1指令指令不影响这些标志不影响这些标志。3536361加法指令加法指令4 4条指令:条指令:ADD AADD A,R Rn n ;(A)+(R(A)+(Rn n) )A A ,n=0n=07 7ADD AADD A,directdirect;(A)+(direct)(A)+(direct)A A ADD AADD A,RRi i ;(A)+(R(A)+(Ri i)A A,i=0i=0,1 1ADD AADD A,#d
42、ata #data ;(A)+#data(A)+#dataA A8 8位加法指令的位加法指令的一个加数一个加数总是来自累加器总是来自累加器A A,而,而另一个加数另一个加数可由寄存器寻可由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻址方式得到址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻址方式得到。加的结果总是放在累加器。加的结果总是放在累加器A A中。中。使用使用本本指令时,要注意累加器指令时,要注意累加器A A中的运算结果中的运算结果对各个标志位的影响:对各个标志位的影响:(1 1)如果)如果位位7 7有进位有进位,则进位标志,则进位标志CyCy置置1 1,否则,否则Cy
43、Cy清清0 0。363737(2)如果)如果位位3有进位有进位,辅助进位标志,辅助进位标志Ac置置1,否则否则Ac(Ac为为PSW寄存器中寄存器中的一位)清的一位)清0。(3)如果)如果位位6有进位有进位,而,而位位7没有进位,没有进位,或者或者位位7有进位有进位,而,而位位6没有进位没有进位,则溢出标志位则溢出标志位OV置置1,否则否则OV清清0。溢出标志位溢出标志位OV的状态的状态,只有带符号数加法运算时才有意义。当两个带符号,只有带符号数加法运算时才有意义。当两个带符号数相加时,数相加时,OV=1,表示加法运算超出了累加器,表示加法运算超出了累加器A所能表示的带符号数的所能表示的带符号数
44、的有效范围(有效范围(-128+127),即产生了溢出,表示运算结果是错误的,否),即产生了溢出,表示运算结果是错误的,否则运算是正确的,即无溢出产生。则运算是正确的,即无溢出产生。373838【例【例3-13-1】 (A)=53H (A)=53H,(R0)=FCH(R0)=FCH,执行指令,执行指令ADDADDA A,R0R0运算式为运算式为 38 结果结果:(A)=4FH,Cy=1,Ac=0,OV=0,P=1(A中中1的位数为奇数)。的位数为奇数)。 注意:注意:在上面的运算中,由于位在上面的运算中,由于位6和位和位7同时有进位,所以标志位同时有进位,所以标志位OV=0。3939【例【例3
45、-2】 (A)= 85H(A)= 85H,(R0)=20H(R0)=20H,(,(20H20H)=AFH=AFH,执行指令,执行指令ADD A,R0 运算式为 结果结果:(A)=34H(A)=34H,Cy=1Cy=1,Ac=1Ac=1,OV=1OV=1,P=1P=1。注意:注意:由于位由于位7 7有进位,而位有进位,而位6 6无进位,所以标志位无进位,所以标志位OV=1OV=1。3940402带进位加法指令带进位加法指令 特点是进位标志位特点是进位标志位Cy参加运算,三个数相加。参加运算,三个数相加。 4条指令:条指令:ADDC A,Rn ;(A)+(Rn)+CA ,n =07ADDC A,d
46、irect ;(A)+(direct)+CAADDC A,Ri ;(A)+(Ri)+CA,i =0,1ADDC A,#data ;(A)+#data+CA如果如果位位7有进位有进位,则进位标志,则进位标志Cy置置“1”,否则,否则Cy清清“0”;如果如果位位3有进位有进位,则辅助进位标志,则辅助进位标志Ac置置“1”,否则,否则Ac清清“0”;如果如果位位6有进位有进位而而位位7没有进位没有进位,或者,或者位位7有进位有进位而而位位6没有进位没有进位,则溢出标,则溢出标志志OV置置“1”,否则标志,否则标志OV清清“0”。404141【例【例3-3】 (A)=85H(A)=85H,(20H)=
47、FFH(20H)=FFH,Cy=1Cy=1,执行指令,执行指令ADDCADDCA A,20H20H运算式为运算式为 结果为结果为 (A)=85H(A)=85H,Cy=1Cy=1,Ac=1Ac=1,OV=0OV=0,P=1 P=1 (A A中中1 1的位数为奇数的位数为奇数)。4142423增增1指令指令5 5条指令:条指令:INC AINC Rn ;n=07INC direct INC Ri ;i =0,1 INC DPTR把指令中所指出的变量增把指令中所指出的变量增1 1,且不影响,且不影响PSWPSW中的任何标志。中的任何标志。指令指令“INC DPTRINC DPTR”,1616位数增位
48、数增1 1指令。首先对低指令。首先对低8 8位指针位指针DPLDPL执行加执行加1 1,当溢出时,就对当溢出时,就对DPHDPH的内容进行加的内容进行加1 1,不影响标志,不影响标志CyCy。4243434 4十进制调整指令十进制调整指令用于对用于对BCDBCD码加法运算结果的内容修正,指令格式为码加法运算结果的内容修正,指令格式为: DA ADA A是对压缩的是对压缩的BCDBCD码(一个字节存放码(一个字节存放2 2位位BCDBCD码)的加法结果进行十进制调整码)的加法结果进行十进制调整。两个两个BCDBCD码按二进制相加之后,必须经本指令的调整才能得到正确的压缩码按二进制相加之后,必须经
49、本指令的调整才能得到正确的压缩BCDBCD码的和数。码的和数。(1 1)十进制调整问题)十进制调整问题对对BCDBCD码加法运算,只能借助于二进制加法指令。码加法运算,只能借助于二进制加法指令。但但二进制数加法原则上二进制数加法原则上并不适于十进制数的加法运算,有时会产生错误结果。例如:并不适于十进制数的加法运算,有时会产生错误结果。例如:434444上述的上述的BCDBCD码运算中:码运算中:(a a)结果正确。)结果正确。(b b)结果不正确,因为)结果不正确,因为BCDBCD码中没有码中没有11111111这个编码。这个编码。(c c)结果不正确,正确结果应为)结果不正确,正确结果应为1
50、717,而运算结果却是,而运算结果却是1111。可见可见,二进制数加法指令不能完全适用于,二进制数加法指令不能完全适用于BCDBCD码十进制数的加法运算,要码十进制数的加法运算,要对结果做有条件的修正,这就是所谓的十进制调整问题。对结果做有条件的修正,这就是所谓的十进制调整问题。444545(2)出错原因和调整方法)出错原因和调整方法出错原因在于出错原因在于BCD码共有码共有16个编码个编码,但,但只用其中的只用其中的10个个,剩下,剩下6个没用到个没用到。这。这6个没用到的编码(个没用到的编码(1010,1011,1100,1101,1110,1111)为为无效编码无效编码。在在BCD码加运