单片机原理及应用陈燕第3章 指令系统_第1页
单片机原理及应用陈燕第3章 指令系统_第2页
单片机原理及应用陈燕第3章 指令系统_第3页
单片机原理及应用陈燕第3章 指令系统_第4页
单片机原理及应用陈燕第3章 指令系统_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第3章 at89s51单片机的 指令系统1第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统2at89s51at89s51单片机单片机使用使用mcs-51mcs-51指令系统指令系统。n介绍指令系统介绍指令系统寻址方式寻址方式n对对111111条条基本指令基本指令按功能分类详细讲解按功能分类详细讲解。指令指令-是是cpucpu按照人们的意图来完成某种操作的命令,它以按照人们的意图来完成某种操作的命令,它以英文名称或缩写形式作为英文名称或缩写形式作为助记符助记符。汇编语言指令汇编语言指令-用助记符、符号地址、标号等表示的书写用助记符、符号地址、标号等表示的书写程序的语

2、言。程序的语言。掌握汇编语言指令是程序设计的掌握汇编语言指令是程序设计的基础。基础。内容概要内容概要第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统33.1 3.1 指令系统概述指令系统概述简明、易掌握、效率较高的指令系统,简明、易掌握、效率较高的指令系统,复杂指令集复杂指令集。按按所占字节分所占字节分,分,分三种三种:(1 1)单字节指令)单字节指令4949条;条;(2 2)双字节指令)双字节指令4545条;条;(3 3)三字节指令)三字节指令1717条。条。按按执行时间来分执行时间来分,分三种:,分三种:(1 1)1 1个个机器周期(机器周期(1212个时钟振荡

3、周期)的指令个时钟振荡周期)的指令6464条条;(2 2)2 2个个机器周期指令机器周期指令4545条条;(3 3)4 4个个机器周期机器周期乘、除指令。乘、除指令。12mhz12mhz晶振,每个机器周期为晶振,每个机器周期为1 1 s s。at89s51at89s51一大特点一大特点是在硬件结构中有一个是在硬件结构中有一个位处理机位处理机,一个处理,一个处理位变量位变量的的指令子集指令子集。3第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统43.2 3.2 指令格式指令格式 指令格式:指令格式:指令的表示方法。指令的表示方法。指令通常由指令通常由两部分两部分组成:

4、组成:操作码操作码和和操作数操作数。操作码操作码指令进行什么指令进行什么操作操作。操作数操作数指令操作的指令操作的对象对象。可能是一具体数据,也可能是指。可能是一具体数据,也可能是指出到哪里取得数据的地址或符号。出到哪里取得数据的地址或符号。指令长度不同,格式也就不同。指令长度不同,格式也就不同。(1 1)单字节指令:操作码和操作数同在一个字节中。)单字节指令:操作码和操作数同在一个字节中。(2 2)双字节指令:一个字节为操作码,另一个字节是操作数)双字节指令:一个字节为操作码,另一个字节是操作数。(3 3)三字节指令:操作码占一个字节,操作数占二个字节。)三字节指令:操作码占一个字节,操作数

5、占二个字节。4第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统53.3 3.3 指令系统的寻址方式指令系统的寻址方式寻址方式寻址方式在指令中说明操作数所在地址的方法。在指令中说明操作数所在地址的方法。一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统一般说,寻址方式越多,功能就越强,灵活性则越大,指令系统就越复杂。就越复杂。寻址方式所要解决的主要问题寻址方式所要解决的主要问题就是如何在整个存储器和寄存器的就是如何在整个存储器和寄存器的寻址空间内快速地寻址空间内快速地找到指定的地址单元找到指定的地址单元。下面介绍指令系统下面介绍指令系统7 7种种寻址方式。寻址方

6、式。5第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统61 1寄存器寻址方式寄存器寻址方式指令中的操作数为某一寄存器的内容。指令中的操作数为某一寄存器的内容。例如:例如:movmova a,r rn n ;(r(rn n)a)a,n n =0=07 7把把r rn n中的源操作数送入到累加器中的源操作数送入到累加器a a中。由于指令指定了从寄存中。由于指令指定了从寄存器器r rn n中取得源操作数,所以称为寄存器寻址方式。中取得源操作数,所以称为寄存器寻址方式。本寻址方式的寻址范围:本寻址方式的寻址范围:(1 1)4 4组通用工作寄存区共组通用工作寄存区共3232个

7、工作寄存器。但只对个工作寄存器。但只对当前工当前工作寄存器区作寄存器区的的8 8个工作寄存器寻址,指令中的寄存器名称只个工作寄存器寻址,指令中的寄存器名称只能是能是r0r0r7r7。(2 2)部分特殊功能寄存器,如累加器)部分特殊功能寄存器,如累加器a a、寄存器、寄存器b b以及数据指以及数据指针寄存器针寄存器dptrdptr等。等。6第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统72 2直接寻址方式直接寻址方式指令中直接给出操作数的单元地址,该单元地址中的内容就指令中直接给出操作数的单元地址,该单元地址中的内容就是操作数,直接的操作数单元地址用是操作数,直接的

8、操作数单元地址用“direct”direct”表示。表示。例如:例如: movmova a,directdirect “direct”“direct”就是操作数的单元地址。就是操作数的单元地址。例如:例如: movmova a,40h40h 表示把内部表示把内部ram 40hram 40h单元(单元(directdirect)的内容传送到)的内容传送到a a。指令中。指令中源操作数(右边的操作数)采用的是源操作数(右边的操作数)采用的是直接寻址方式直接寻址方式。指令中两个操作数都可由直接寻址方式给出。指令中两个操作数都可由直接寻址方式给出。例如:例如: movmov direct1direct

9、1,direct2direct2具体指令:具体指令:mov 42hmov 42h,62h62h把片内把片内ramram中中62h62h单元的内容送到片内单元的内容送到片内ramram中的中的42h42h单元中。单元中。直接寻址直接寻址是访问片内所有特殊功能寄存器的是访问片内所有特殊功能寄存器的唯一寻址方式。唯一寻址方式。7第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统83. 3. 寄存器间接寻址方式寄存器间接寻址方式寄存器中存的是寄存器中存的是操作数地址操作数地址,即先从寄存器中找到操作数的地,即先从寄存器中找到操作数的地址,再按该地址找到操作数。址,再按该地址找

10、到操作数。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加式中,应在寄存器名称前面加前缀标志前缀标志“”。例如:例如:mov amov a,rri i ;i i=0=0或或1 1其中,其中, r ri i的内容为的内容为40h40h,即把,即把内部内部ram 40hram 40h地址单元中的内容地址单元中的内容传送给传送给a a。8第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统94 4立即数寻址方式立即数寻址方式直接在指令中给出操作数直接在指令中给出操作数也称也称立即数立即数。为

11、了与直接寻址指。为了与直接寻址指令中的直接地址加以区别,令中的直接地址加以区别,需在操作数前加前缀标志需在操作数前加前缀标志“#”#”。例如:例如: mov amov a,#40h#40h表示把立即数表示把立即数40h40h送给送给a a,40h40h这个常数是指令代码的一部分。这个常数是指令代码的一部分。第一个字节是操作码,第二字节是立即数,就是放在程序存第一个字节是操作码,第二字节是立即数,就是放在程序存储器内的常数。储器内的常数。9第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统105 5基址寄存器加变址寄存器间址寻址方式基址寄存器加变址寄存器间址寻址方式以以

12、dptrdptr或或pcpc作为作为基址寄存器基址寄存器,以累加器,以累加器a a作为作为变址寄存器变址寄存器,以两者内容相加形成的以两者内容相加形成的1616位地址作为目的地址进行寻址。位地址作为目的地址进行寻址。例如指令:例如指令: movcmovc a a,a+dptra+dptr 其中,(其中,(a a)=05h=05h,(,(dptrdptr)=0400h=0400h,指令执行结果是把程,指令执行结果是把程序存储器序存储器0405h0405h单元的内容传送给单元的内容传送给a a。本寻址方式的本寻址方式的指令有指令有3 3条条:movcmovca a,a+dptra+dptrmovc

13、movca a,a+pca+pcjmpjmpa+dptra+dptr前两条指令适用于读程序存储器中固定的数据。前两条指令适用于读程序存储器中固定的数据。10第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统11例如,例如,将固定的、按一定顺序排列的将固定的、按一定顺序排列的表格表格存放在程序存储器存放在程序存储器中,在程序运行中由中,在程序运行中由a a的动态参量来确定读取对应的表格的动态参量来确定读取对应的表格参数。参数。第第3 3条为条为散转指令散转指令,a a中内容为程序运行后的动态结果,可根中内容为程序运行后的动态结果,可根据据a a中不同内容,实现跳向不同程

14、序入口的跳转。中不同内容,实现跳向不同程序入口的跳转。第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统126 6相对寻址方式相对寻址方式解决程序转移。该寻址是以该转移指令的地址(解决程序转移。该寻址是以该转移指令的地址(pcpc值)加上值)加上它的字节数,再加上它的字节数,再加上相对偏移量(相对偏移量(relrel),),形成形成新的转移新的转移目的地址目的地址,从而程序转移到该目的地址。转移的目的地址,从而程序转移到该目的地址。转移的目的地址用下式计算:用下式计算: 目的地址目的地址= =转移指令所在的地址转移指令所在的地址+ +转移指令字节数转移指令字节数+re

15、l+rel其中,其中,偏移量偏移量relrel是带符号是带符号8 8位二进制补码数,位二进制补码数,128128+127+127。程序转移范围程序转移范围是以转移指令的是以转移指令的下条指令首地址下条指令首地址为基准地址,为基准地址,相对偏移在相对偏移在128128+127+127之间。之间。第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统13例如,例如, ljmp relljmp rel程序要转移到该指令的程序要转移到该指令的pcpc值加值加3 3再加上再加上relrel的目的地址处。编写的目的地址处。编写程序时,只需在转移指令中直接写要转向的地址标号。程序时,只

16、需在转移指令中直接写要转向的地址标号。例如:例如: ljmp loopljmp loop “loop” “loop” 为目的地址标号。汇编时,由汇编程序自动计算和为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量。但手工汇编时,偏移量的值由手工计算。填入偏移量。但手工汇编时,偏移量的值由手工计算。13第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统147 7位寻址方式位寻址方式 对内部对内部ramram和特殊功能寄存器具有位寻址功能的某位内容进行和特殊功能寄存器具有位寻址功能的某位内容进行置置1 1和清和清0 0操作。操作。位地址一般以位地址一般以直接位地址直接

17、位地址给出,位地址符号为给出,位地址符号为“bit”bit”。例如:例如:mov cmov c,bitbit 其具体指令:其具体指令: mov cmov c,40h40h把位地址为把位地址为40h40h的值送到进位位的值送到进位位c c。由于由于at89s51at89s51具有位处理功能,可直接对数据位方便地实现置具有位处理功能,可直接对数据位方便地实现置1 1、清、清0 0、求反、传送、判跳和逻辑运算等操作,为测控系、求反、传送、判跳和逻辑运算等操作,为测控系统的应用提供了最佳代码和速度,增强了实时性。统的应用提供了最佳代码和速度,增强了实时性。14第第3 3章章 at89s51at89s5

18、1单片机的指令系统单片机的指令系统157 7种寻址方式种寻址方式已介绍完毕。已介绍完毕。问题:问题:当一条指令给定后,如何来确定该指令的寻址方式?当一条指令给定后,如何来确定该指令的寻址方式?例如例如: : mov amov a,#40h#40h,属于立即数寻址还是寄存器寻址?,属于立即数寻址还是寄存器寻址?要看以哪个操作数要看以哪个操作数作为参照系作为参照系。操作数分为操作数分为源操作数源操作数和和目的操作数目的操作数。对于。对于源操作数源操作数“#40h”#40h”来说,是来说,是“立即数寻址立即数寻址”方式,但对方式,但对目的操作数目的操作数“a”a”来来说,是属于说,是属于“寄存器寻址

19、寄存器寻址”方式。方式。一般而言,一般而言,寻址方式指的是寻址方式指的是源操作数源操作数,所以此例为立即数寻,所以此例为立即数寻址方式。址方式。对指令系统对指令系统7 7种寻址方式种寻址方式总结,概括见总结,概括见表表3-13-1。15第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统1616序号序号1 12 23 34 45 56 67 7寻址方式寻址方式寄存器寻址寄存器寻址直接寻址直接寻址寄存器间接寻址寄存器间接寻址立即数寻址立即数寻址基址寄存器加变址寄存器间基址寄存器加变址寄存器间接寻址接寻址相对寻址相对寻址位寻址位寻址寻址空间寻址空间r0r0r7r7、a a、

20、b b、c(c(位位) )、dptrdptr等等内部内部128128字节字节ramram、特殊功能寄存器、特殊功能寄存器片内数据存储器、片外数据存储器片内数据存储器、片外数据存储器程序存储器中的立即数程序存储器中的立即数读程序存储器固定数据和程序散转读程序存储器固定数据和程序散转程序存储器相对转移程序存储器相对转移内部内部ramram中的可寻址位、中的可寻址位、sfrsfr中的可中的可寻址位寻址位表表3-1 3-1 7 7种寻址方式及其寻址空间种寻址方式及其寻址空间第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统173.4 at89s513.4 at89s51指令系

21、统分类介绍指令系统分类介绍共共111111条条指令,按功能分为指令,按功能分为五类五类:(1 1)数据传送类()数据传送类(2828条)条)(2 2)算术运算类()算术运算类(2424条)条)(3 3)逻辑操作类()逻辑操作类(2525条)条)(4 4)控制转移类()控制转移类(1717条)条)(5 5)位操作类()位操作类(1717条)条)先简单介绍指令用到的符号。先简单介绍指令用到的符号。rn 当前寄存器区的当前寄存器区的8个工作寄存器个工作寄存器r0r7(n=07)。ri 当前寄存器区中作为间接寻址寄存器的当前寄存器区中作为间接寻址寄存器的2个寄存器个寄存器r0、r1(i=0,1)。17

22、第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统1818directdirect#data#data#data1#data16 6relreldptrdptrbitbitc c或或cycyaddr11addr11addr16addr16 直接地址,即直接地址,即8 8位位内部数据存储器单元或特殊功能寄存器内部数据存储器单元或特殊功能寄存器的地址。的地址。指令中的指令中的8 8位立即数。位立即数。指令中的指令中的1616位立即数。位立即数。偏移量,偏移量,8 8位的带符号补码数。位的带符号补码数。数据指针,可用作数据指针,可用作1616位数据存储器单元地址的寄存器。位

23、数据存储器单元地址的寄存器。内部内部ramram或特殊功能寄存器中的直接寻址位。或特殊功能寄存器中的直接寻址位。进位标志位或位处理机中的累加器。进位标志位或位处理机中的累加器。1111位目的地址。位目的地址。1616位目的地址。位目的地址。间接寻址寄存器前缀,如间接寻址寄存器前缀,如rri i,a+dptra+dptr。第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统193.4.1 3.4.1 数据传送类指令数据传送类指令使用最频繁使用最频繁。一般数据传送类指令的助记符为。一般数据传送类指令的助记符为“mov”mov”,通用通用格式格式如下:如下: mov mov

24、, 数据传送类指令是数据传送类指令是把把源操作数源操作数传送传送到到目的操作数目的操作数。指令执行之。指令执行之后,源操作数不改变,目的操作数修改为源操作数。所以数后,源操作数不改变,目的操作数修改为源操作数。所以数据传送类操作属据传送类操作属“复制复制”性质,性质,而不是而不是“搬家搬家”。本类指令本类指令不影响标志位不影响标志位: :cycy、acac和和ovov,但,但不包括不包括奇偶标志位奇偶标志位p p。19第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统201以累加器为目的操作数的指令以累加器为目的操作数的指令mova,rn; (rn)a,n =07mo

25、va, r ri i ; (r ri i)a i =0,1mova,direct ; (direct)amova,#data ; #dataa把源操作数内容送累加器把源操作数内容送累加器a,源操作数源操作数有寄存器寻址、直接寻有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式,例如:址、间接寻址和立即数寻址等方式,例如:mova,r6;(r6)a,寄存器寻址,寄存器寻址mova,r0;(r0)a,间接寻址,间接寻址mova,70h ;(70h)a,直接寻址,直接寻址mova,#78h;78ha,立即数寻址,立即数寻址20第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系

26、统212 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把源操作数送入当前寄存器区的把源操作数送入当前寄存器区的r0r0r7r7中的某一寄存器。中的某一寄存器。3 3以直接地址以直接地址directdirect为目的操作数的指令为目的操作数的指令mov directmov direct,a a ; (a)d

27、irect(a)directmov directmov direct,rn ; ( (rn)direct)direct,n n =0=07 7mov direct1mov direct1,direct2 direct2 ;(direct2)direct1(direct2)direct1mov directmov direct, ri ; (ri)direct)direct,i i =0=0,1 1mov directmov direct,#data #data ; #datadirect#datadirect把源操作数送入直接地址指定的存储单元。把源操作数送入直接地址指定的存储单元。direc

28、tdirect指的是内指的是内部部ramram或或sfrsfr地址。地址。21第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统224 4以寄存器间接地址为目的操作数的指令以寄存器间接地址为目的操作数的指令movmovrri i,a a;(a)(r(a)(ri i), i i=0=0,1 1movmovrri i,direct direct ;(direct)(r(direct)(ri i),i i=0=0,1 1movmovrri i,#data #data ;#data(r#data(ri i), i i=0=0,1 1功能是把源操作数内容送入功能是把源操作数内容

29、送入r0r0或或r1r1指定的存储单元中。指定的存储单元中。5 51616位数传送指令位数传送指令movmovdptrdptr,#data16#data16;#data16dptr #data16dptr 功能是把功能是把1616位立即数送入位立即数送入dptrdptr,用来设置数据存储器的地址,用来设置数据存储器的地址指针。指针。at89s51at89s51有两个有两个dptrdptr,通过设置,通过设置特殊功能寄存器特殊功能寄存器auxr1auxr1中的中的dpsdps位位来选择。当来选择。当dps=1dps=1,则指令中的,则指令中的dptrdptr即为即为dptr1dptr1,dptr

30、0dptr0被被屏蔽,反之亦然。屏蔽,反之亦然。22第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统23dptrdptr为为1616位的数据指针,分为位的数据指针,分为dphdph和和dpldpl。操作十分灵活方便。操作十分灵活方便。设有两个设有两个dptrdptr后,就可避免频繁的出入堆栈操作后,就可避免频繁的出入堆栈操作。对于所有对于所有movmov类指令,累加器类指令,累加器a a是一个特别重要的是一个特别重要的8 8位寄存器,位寄存器,cpucpu对它具有其他寄存器所没有的操作指令。后面将要介绍对它具有其他寄存器所没有的操作指令。后面将要介绍的加、减、乘、除

31、指令都是以的加、减、乘、除指令都是以a a作为目的操作数。作为目的操作数。r rn n为所选择的寄存器组中的为所选择的寄存器组中的r0r0r7r7,直接地址直接地址directdirect为内部为内部ramram的的00h00h7fh7fh和特殊功能寄存器(地址范围和特殊功能寄存器(地址范围80h80hffhffh)在间接地址中,用在间接地址中,用r0r0或或r1r1作为内部作为内部ramram的地址指针,可访问内的地址指针,可访问内部部ramram的的00h00h7fh7fh共共128128个单元。个单元。第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统246 6

32、堆栈操作指令堆栈操作指令内部内部ramram中设定一个中设定一个后进先出后进先出(lifolifo,last in first outlast in first out)的)的区域,称为区域,称为堆栈堆栈。在特殊功能寄存器中有一个。在特殊功能寄存器中有一个堆栈指针堆栈指针spsp,指示堆栈的栈顶位置。堆栈操作有进栈和出栈两种,因此,指示堆栈的栈顶位置。堆栈操作有进栈和出栈两种,因此,在指令系统中相应有两条堆栈操作指令。在指令系统中相应有两条堆栈操作指令。(1)进栈指令)进栈指令push direct首先将栈指针首先将栈指针sp加加1,然后把,然后把direct中的内容送到中的内容送到sp指示的

33、内指示的内部部ram单元中。单元中。例如:例如:当当(sp)=60h,(a)=30h,(b)=70h时,执行下列指令时,执行下列指令pushacc;(sp)+1=61hsp,(a)61hpushb;(sp)+1=62hsp,(b)62h结果:结果:(61h)=30h,(62h)=70h,(sp)=62h。24第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统25(2)出栈指令)出栈指令popdirect将将sp指示的栈顶单元的内容送入指示的栈顶单元的内容送入direct字节中,字节中,sp减减1。例如:例如:当当(sp)=62h(sp)=62h,(62h)=70h(6

34、2h)=70h,(61h)=30h(61h)=30h时,执行指令时,执行指令pop dph pop dph ;(sp)dph(sp)dph,(sp)-1sp(sp)-1sppop dplpop dpl;(sp)dpl(sp)dpl,(sp)-1sp(sp)-1sp结果为结果为(dptr)=7030h(dptr)=7030h,(sp)=60h(sp)=60h。25第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统267 7累加器累加器a a与外部数据存储器与外部数据存储器ram/ioram/io传送指令传送指令movx amovx a,dptr dptr ;(dptr)

35、a(dptr)a,读外部,读外部ram/ioram/iomovx amovx a,rri i ;(r(ri i)a)a,读外部,读外部ram/ioram/iomovx dptrmovx dptr,a a ;(a)(dptr)(a)(dptr),写外部,写外部ram/io ram/io movx rmovx ri i ,a a ;(a)(r(a)(ri i),写外部,写外部ram/ioram/iomovmov的后面加的后面加“x”x”,表示访问的是片外,表示访问的是片外ramram或或i/oi/o口,在执行前口,在执行前两条指令,两条指令, (p3.7p3.7)有效;后两条指令,有效;后两条指令

36、, (p3.6p3.6)有效有效。采用采用1616位的位的 dptrdptr间接寻址间接寻址,可寻址整个,可寻址整个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位数据口。位数

37、据口。26rdwr第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统278 8查表指令查表指令共共两条两条,仅有的仅有的两条两条读程序存储器中表格数据的指令读程序存储器中表格数据的指令。由于程序。由于程序存储器只读存储器只读不写,因此传送为单向,从程序存储器中读出不写,因此传送为单向,从程序存储器中读出数据到数据到a中。两条查表指令均采用基址寄存器加变址寄存器间接中。两条查表指令均采用基址寄存器加变址寄存器间接寻址方式。寻址方式。(1)movc a,a+pc以以pc作为基址寄存器作为基址寄存器,a的内容的内容(无符号数无符号数)和和pc的当前值(下的当前值(下一条指令

38、的起始地址)相加后得到一个一条指令的起始地址)相加后得到一个新的新的16位地址位地址,把该,把该地址的内容送到地址的内容送到a。27第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统28例如:例如:当当 (a)=30h时,执行地址时,执行地址1000h处的指令处的指令1000h: movca,a+pc该指令占用一个字节,下一条指令的地址为该指令占用一个字节,下一条指令的地址为1001h,(pc)=1001h再加上再加上a中的中的30h,得得1031h,结果把程序存储,结果把程序存储器中器中1031h的内容送入累加器的内容送入累加器a。优点优点:不改变特殊功能寄存器及不

39、改变特殊功能寄存器及pc的状态,根据的状态,根据a的内容就可的内容就可以取出表格中的常数。以取出表格中的常数。缺点:缺点:表格只能存放在表格只能存放在该条查表指令所在地址的该条查表指令所在地址的+256个单元之个单元之内内,表格大小受到限制,且表格只能被一段程序所用。,表格大小受到限制,且表格只能被一段程序所用。28第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统29(2)movc a,a+dptrdptr为基址寄存器,为基址寄存器,a的内容的内容(无符号数无符号数)和和dptr的内容相的内容相加得到一个加得到一个16位地址,把由该地址指定的程序存储器单元位地址,把

40、由该地址指定的程序存储器单元的内容送到累加器的内容送到累加器a。例如:例如:(dptr)=8100h,(a)=40h,执行指令,执行指令 movc a,a+dptr将程序存储器中将程序存储器中8140h单元单元内容送入内容送入a中。中。第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统30本指令执行结果只与指针本指令执行结果只与指针dptr及累加器及累加器a的内容有关,与该指的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此令存放的地址及常数表格存放的地址无关,因此表格的大小表格的大小和位置可以在和位置可以在64kb程序存储器空间中任意安排程序存储器空间中任

41、意安排,一个表格,一个表格可可以为各个程序块公用以为各个程序块公用。两条指令的助记符都是在两条指令的助记符都是在mov的后面加的后面加“c”,是是code的第一的第一个字母,即表示程序存储器中的代码。个字母,即表示程序存储器中的代码。执行上述两条指令时,单片机的执行上述两条指令时,单片机的 引脚信号(程序存储器引脚信号(程序存储器读)有效,这一点读者要牢记。读)有效,这一点读者要牢记。30psen第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统319字节交换指令字节交换指令xch a,rn ; (a) ( rn),n =07xch a,direct ; (a) (

42、direct)xch a,ri ; (a) ( ri),i=0,1这组指令的功能是将累加器这组指令的功能是将累加器a的内容和源操作数的内容相互的内容和源操作数的内容相互交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻交换。源操作数有寄存器寻址、直接寻址和寄存器间接寻址等方式。例如:址等方式。例如: (a)=80h,(r7)=08h,(40h)=f0h (r0)=30h,(30h)=0fh执行下列指令:执行下列指令:xcha,r7 ;(a) (r7)xcha,40h ;(a) (40h)xcha,r0 ;(a) (r0)结果为结果为(a)=0fh,(r7)=80h,(40h)=08h,(30h

43、)=f0h。31第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统3210半字节交换指令半字节交换指令xchd a,ri累加器的低累加器的低4位与内部位与内部ram低低4位交换。位交换。例如:例如:(r0)=60h,(60h)=3eh,(a)=59h,执行完,执行完“xchd a,r0”指令,则指令,则(a)=5eh,(60h)=39h。第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统333.4.2 算术运算类指令算术运算类指令指令系统中,有单字节的加、减、乘、除法指令,算术运算功指令系统中,有单字节的加、减、乘、除法指令,算术运算功能比较

44、强。能比较强。算术运算指令都是算术运算指令都是针对针对8位二进制无符号数位二进制无符号数的,如要进行带符的,如要进行带符号或多字节二进制数运算,需编写具体的运算程序,通过执号或多字节二进制数运算,需编写具体的运算程序,通过执行程序实现。行程序实现。算术运算的结果将使算术运算的结果将使psw的进位(的进位(cy)、辅助进位()、辅助进位(ac)、)、溢出(溢出(ov)3种标志位种标志位置置1或清或清0。但增但增1和减和减1指令指令不影响这些标志不影响这些标志。33第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统341加法指令加法指令4条指令:条指令:add a,rn

45、;(a)+(rn)a ,n=07add a,direct;(a)+(direct)a add a,ri ;(a)+(ri)a,i=0,1add a,#data ;(a)+#dataa8位加法指令的位加法指令的一个加数一个加数总是来自累加器总是来自累加器a,而,而另一个加数另一个加数可可由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址由寄存器寻址、直接寻址、寄存器间接寻址和立即数寻址等不同的寻址方式得到。加的结果总是放在累加器等不同的寻址方式得到。加的结果总是放在累加器a中。中。使用本指令时,要注意累加器使用本指令时,要注意累加器a中的运算结果中的运算结果对各个标志位对各个标志位的影响:的影响

46、:(1)如果)如果位位7有进位有进位,则进位标志,则进位标志cy置置1,否则,否则cy清清0。34第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统35(2)如果)如果位位3有进位有进位,辅助进位标志,辅助进位标志ac置置1,否则否则ac(ac为为psw寄存器中的一位)清寄存器中的一位)清0。(3)如果)如果位位6有进位有进位,而,而位位7没有进位,没有进位,或者或者位位7有进位有进位,而,而位位6没有进位没有进位,则溢出标志位,则溢出标志位ov置置1,否则否则ov清清0。溢出标志位溢出标志位ov的状态的状态,只有带符号数加法运算时才有意义。当,只有带符号数加法运算时

47、才有意义。当两个带符号数相加时,两个带符号数相加时,ov=1,表示加法运算超出了累加器,表示加法运算超出了累加器a所能表示的带符号数的有效范围(所能表示的带符号数的有效范围(-128+127),即产生了),即产生了溢出,表示运算结果是错误的,否则运算是正确的,即无溢溢出,表示运算结果是错误的,否则运算是正确的,即无溢出产生。出产生。35第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统36【例【例3-1】 (a)=53h,(r0)=fch,执行指令,执行指令adda,r0运算式为运算式为 结果:结果:(a)=4fh,cy=1,ac=0,ov=0,p=1(a中中1的位的

48、位数为奇数)。数为奇数)。注意:注意:在上面的运算中,由于位在上面的运算中,由于位6和位和位7同时有进位,所以标同时有进位,所以标志位志位ov=0。36第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统37【例【例3-2】 (a)= 85h,(r0)=20h,(,(20h)=afh,执行指令,执行指令add a,r0 运算式为运算式为 结果:结果:(a)=34h,cy=1,ac=1,ov=1,p=1。注意:注意:由于位由于位7有进位,而位有进位,而位6无进位,所以标志位无进位,所以标志位ov=1。37第第3 3章章 at89s51at89s51单片机的指令系统单片机的

49、指令系统382带进位加法指令带进位加法指令 特点是进位标志位特点是进位标志位cy参加运算,三个数相加。参加运算,三个数相加。 4条指令:条指令:addc a,rn ;(a)+(rn)+ca ,n =07addc a,direct ;(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

50、没有进位没有进位,或者,或者位位7有进位有进位而而位位6没有进没有进位位,则溢出标志,则溢出标志ov置置“1”,否则标志,否则标志ov清清“0”。38第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统39【例【例3-3】 (a)=85h,(20h)=ffh,cy=1,执行指令,执行指令addc a,20h运算式为运算式为 结果为结果为 (a)=85h,cy=1,ac=1,ov=0,p=1 (a中中1的位的位数为奇数)。数为奇数)。39第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统403增增1指令指令5条指令:条指令:inc ainc rn

51、 ;n=07inc direct inc ri ;i =0,1 inc dptr把指令中所指出的变量增把指令中所指出的变量增1,且不影响,且不影响psw中的任何标志。中的任何标志。指令指令“inc dptr”,16位数增位数增1指令。首先对低指令。首先对低8位指针位指针dpl执行加执行加1,当溢出时,就对,当溢出时,就对dph的内容进行加的内容进行加1,不,不影响标志影响标志cy。40第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统414十进制调整指令十进制调整指令用于对用于对bcd码加法运算结果的内容修正,指令格式为:码加法运算结果的内容修正,指令格式为: da

52、a是对压缩的是对压缩的bcd码(一个字节存放码(一个字节存放2位位bcd码)的加法结果码)的加法结果进行十进制调整。进行十进制调整。两个两个bcd码按二进制相加之后,必须经本指令的调整才能得码按二进制相加之后,必须经本指令的调整才能得到正确的压缩到正确的压缩bcd码的和数。码的和数。(1)十进制调整问题)十进制调整问题对对bcd码加法运算,只能借助于二进制加法指令。但二进制码加法运算,只能借助于二进制加法指令。但二进制数加法原则上并不适于十进制数的加法运算,有时会产生数加法原则上并不适于十进制数的加法运算,有时会产生错误结果。例如:错误结果。例如:41第第3 3章章 at89s51at89s5

53、1单片机的指令系统单片机的指令系统42上述的上述的bcd码运算中:码运算中:(a)结果正确。)结果正确。(b)结果不正确,因为)结果不正确,因为bcd码中没有码中没有1111这个编码。这个编码。(c)结果不正确,正确结果应为)结果不正确,正确结果应为17,而运算结果却是,而运算结果却是11。可见,二进制数加法指令不能完全适用于可见,二进制数加法指令不能完全适用于bcd码十进制数的码十进制数的加法运算,要对结果做有条件的修正,这就是所谓的十进加法运算,要对结果做有条件的修正,这就是所谓的十进制调整问题。制调整问题。42第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统4

54、3(2)出错原因和调整方法)出错原因和调整方法出错原因在于出错原因在于bcd码共有码共有16个编码个编码,但,但只用其中的只用其中的10个个,剩,剩下下6个没用到。这个没用到。这6个没用到的编码(个没用到的编码(1010,1011,1100,1101,1110,1111)为为无效编码无效编码。在在bcd码加运算中,凡结果进入或者跳过码加运算中,凡结果进入或者跳过无效编码区无效编码区时,结果时,结果出错。因此出错。因此1位位bcd码加法运算出错的情况有码加法运算出错的情况有两种两种: 加结果加结果大于大于9,说明已经,说明已经进入进入无效编码区。无效编码区。 加结果加结果有进位有进位,说明已经,

55、说明已经跳过跳过无效编码区。无效编码区。无论哪种错误,都因为无论哪种错误,都因为6个无效编码个无效编码造成的。因此,只要出现造成的。因此,只要出现上述两种情况之一,就必须调整。上述两种情况之一,就必须调整。方法是把运算结果方法是把运算结果加加6调调整整,即,即十进制调整修正十进制调整修正。43第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统44十进制调整方法如下:十进制调整方法如下: 累加器低累加器低4位大于位大于9或辅助进位位或辅助进位位ac=1,则低,则低4位加位加6修正。修正。 累加器高累加器高4位大于位大于9或进位位或进位位cy=1,则高,则高4位加位加6修

56、正。修正。 累加器高累加器高4位为位为9,低,低4位大于位大于9,高,高4位和低位和低4位分别加位分别加6修正修正上述调整修正,是上述调整修正,是通过执行指令通过执行指令“da a”来自动实现的来自动实现的。【例【例3-4】 (a)=56h,(r5)=67h,把它们看作两个压缩的,把它们看作两个压缩的bcd数,进行数,进行bcd加法。执行指令:加法。执行指令:add a,r5da a高高4位和低位和低4位分别大于位分别大于9,所以,所以“da a”指令要分别加指令要分别加6,对,对结果修正。结果修正。44第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统45结果为结果

57、为(a)=23h,cy=1。由上可见,由上可见,56+67=123,结果正确。,结果正确。45第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统465带借位的减法指令带借位的减法指令4条指令:条指令:subb a,rn ; (a)-(rn)-cya,n =07subb a,direct ; (a)-(direct)-cyasubb a,ri ; (a)-(ri)-cya, i =0,1subb a,#data ; (a)-#data-cya从从a的内容减去指定变量和进位标志的内容减去指定变量和进位标志cy的值,结果存在的值,结果存在a中。中。如果位如果位7需借位需借位

58、则则cy置置1,否则,否则cy清清0;如果位如果位3需借位需借位则则ac置置1,否则,否则ac清清0;如果位如果位6借位而位借位而位7不借位不借位,或者,或者位位7借位而位借位而位6不借位不借位,则溢,则溢出标志位出标志位ov置置“1”,否则,否则ov清清“0”。46第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统47【例【例3-5】 (a)=c9h,(r2)=54h,cy=1,执行指令,执行指令subb a,r2运算式为运算式为 结果:结果: (a)=74h,cy=0,ac=0,ov=1(位(位6向位向位7借位)。借位)。47第第3 3章章 at89s51at89

59、s51单片机的指令系统单片机的指令系统486减减1指令指令dec a;(a)-1adec rn ;(rn)-1rn,n=07dec direct ;(direct)-1directdec ri ;(ri)-1(ri),i =0,1功能是指定的变量减功能是指定的变量减1。若原来为。若原来为00h,减,减1后下溢为后下溢为ffh,不,不影响标志位(影响标志位(p标志除外)。标志除外)。【例【例3-6】 (a)=0fh,(r7)=19h,(30h)=00h,(r1)=40h,(40h)=0ffh,执行指令,执行指令dec a;(a)-1adec r7;(r7)-1r7dec 30h;(30h)-13

60、0hdec r1;(r1)-1(r1)结果:结果:(a)=0eh,(r7)=18h,(30h)=0ffh,(40h)=0feh,p=1,不影响其他标志。,不影响其他标志。48第第3 3章章 at89s51at89s51单片机的指令系统单片机的指令系统497乘法指令乘法指令mul ab ;abba 积的低字节在累加器积的低字节在累加器a中,高字节在中,高字节在b中。如果积大于中。如果积大于255,则,则ov置置1,否则,否则ov清清0。cy标志总是清标志总是清0。8除法指令除法指令div ab ;a/ba(商商),余数,余数b商(为整数)存放在商(为整数)存放在a中,余数存放在中,余数存放在b中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论