第七章MCS51单片机的指令与程序设计课件.ppt

上传人(卖家):晟晟文业 文档编号:4907360 上传时间:2023-01-24 格式:PPT 页数:94 大小:224.50KB
下载 相关 举报
第七章MCS51单片机的指令与程序设计课件.ppt_第1页
第1页 / 共94页
第七章MCS51单片机的指令与程序设计课件.ppt_第2页
第2页 / 共94页
第七章MCS51单片机的指令与程序设计课件.ppt_第3页
第3页 / 共94页
第七章MCS51单片机的指令与程序设计课件.ppt_第4页
第4页 / 共94页
第七章MCS51单片机的指令与程序设计课件.ppt_第5页
第5页 / 共94页
点击查看更多>>
资源描述

1、1第七章第七章 MCS-51单片机的指令与程序设计单片机的指令与程序设计本章教学基本要求本章教学基本要求1掌握掌握MCS-51单片机汇编语言的特点和格式。单片机汇编语言的特点和格式。2掌握掌握MCS-51单片机汇编指令的单片机汇编指令的7种寻址方式和种寻址方式和111条指令的使用方法。条指令的使用方法。3掌握掌握MCS-51单片机汇编程序的设计方法。单片机汇编程序的设计方法。4掌握掌握MCS-51单片机单片机C语言程序设计方法。语言程序设计方法。重点与难点重点与难点汇编指令的寻址方式与指令的使用方法。汇编指令的寻址方式与指令的使用方法。汇编程序和汇编程序和C程序的结构设计。程序的结构设计。27

2、.1 MCS-51汇编指令格式和寻址方式汇编指令格式和寻址方式nAT89C51单片机的基本指令共单片机的基本指令共111条,按指令在程序存储条,按指令在程序存储器所占的字节来分,可分为以下器所占的字节来分,可分为以下3种:种:(1)单字节指令)单字节指令49条;条;(2)双字节指令)双字节指令45条;条;(3)三字节指令)三字节指令17条。条。n按指令的执行时间来分,可分为以下按指令的执行时间来分,可分为以下3种:种:(1)1个机器周期(个机器周期(12个时钟振荡周期)的指令个时钟振荡周期)的指令64条;条;(2)2个机器周期(个机器周期(24个时钟振荡周期)的指令个时钟振荡周期)的指令45条

3、;条;(3)只有乘、除两条指令的执行时间为)只有乘、除两条指令的执行时间为4个机器周期(个机器周期(48个时钟振荡周期)。个时钟振荡周期)。3MCS-51单片机的指令格式与8086类似,一条指令通常由两部分组成:操作码和操作数。AT89C51单片机的汇编语言指令的书写格式如下:标号:操作码 操作数;注释例如,一条数据传送指令:MOV A,4CH;将4CH存储单元的内容送到累加器A中,其中:MOV是操作码,A和3AH是操作数,“;”的后面是注释。需要注意是在汇编程序中使用的注释符号“;”,“:”和“,”为英文下的分号,冒号和逗号,而非中文下的“;”,“:”和“,”。一、指令格式一、指令格式4n1

4、操作码操作码操作码是由助记符表示的字符串,它规定了指令操作码是由助记符表示的字符串,它规定了指令的操作功能。操作码是指令的核心,不可或缺。的操作功能。操作码是指令的核心,不可或缺。n2操作数操作数操作数是指参加操作的数据或数据的地址。操作数是指参加操作的数据或数据的地址。MCS-51单片机的指令系统中指令的操作数可以是单片机的指令系统中指令的操作数可以是03个。不同功能的指令,操作数的个数和作用有所个。不同功能的指令,操作数的个数和作用有所不同。例如,传送类指令多数有两个操作数。紧跟不同。例如,传送类指令多数有两个操作数。紧跟在操作码后面的第一操作数称为目的操作数,表示在操作码后面的第一操作数

5、称为目的操作数,表示操作结果存放的地址;后面的第二操作数称为源操操作结果存放的地址;后面的第二操作数称为源操作数,给出操作数或操作数的来源地址。作数,给出操作数或操作数的来源地址。53标号标号标号用符号代表其后面的指令的首地址。标号由标号用符号代表其后面的指令的首地址。标号由18个字符组个字符组成,第一个字符必须是字母,其余字符可以是字母、数字或其成,第一个字符必须是字母,其余字符可以是字母、数字或其他特定符号,标号放在操作码前面,与操作码之间必须用他特定符号,标号放在操作码前面,与操作码之间必须用“:”号隔开。标号起标记作用,在指令中是可选项,一般用在一段号隔开。标号起标记作用,在指令中是可

6、选项,一般用在一段功能程序的第一条指令前面。功能程序的第一条指令前面。4注释注释 注释是为了便于阅读该条指令所作的说明,注释项是可选项,注释是为了便于阅读该条指令所作的说明,注释项是可选项,即可有可无。但为提高程序可读性,多数程序需要进行适当注即可有可无。但为提高程序可读性,多数程序需要进行适当注释。释。5其他其他由指令格式可见,操作码与操作数之间必须用空格分隔;操作由指令格式可见,操作码与操作数之间必须用空格分隔;操作数与操作数之间必须用逗号数与操作数之间必须用逗号“,”分开;注释与指令之间必须用分开;注释与指令之间必须用“;”号分开。操作码和操作数有对应的二进制代码,指令代码号分开。操作码

7、和操作数有对应的二进制代码,指令代码由若干字节组成。不同的指令字节数不一定相同,由若干字节组成。不同的指令字节数不一定相同,51单片机的单片机的指令系统中有单字节、双字节和指令系统中有单字节、双字节和3字节指令。字节指令。6n寻址方式就是在指令中说明操作数所在地址的方法。寻址方式就是在指令中说明操作数所在地址的方法。AT89C51单片机的指令系统有以下单片机的指令系统有以下7种寻址方式,下面分别予种寻址方式,下面分别予以介绍。以介绍。n寄存器寻址方式寄存器寻址方式寄存器寻址方式就是操作数在寄存器中,因此指定了寄存器寄存器寻址方式就是操作数在寄存器中,因此指定了寄存器就能得到操作数。例如,指令就

8、能得到操作数。例如,指令MOV A,Rn;(Rn)A,n=07表示把寄存器表示把寄存器Rn的内容传送到累加器的内容传送到累加器A中,由于操作数在中,由于操作数在Rn中,因此在指令中指定了从寄存器中,因此在指令中指定了从寄存器Rn中取得源操作数,所中取得源操作数,所以称为寄存器寻址方式。寄存器寻址方式的寻址范围包括:以称为寄存器寻址方式。寄存器寻址方式的寻址范围包括:n(1)4组通用工作寄存器区,共组通用工作寄存器区,共32个工作寄存器。但只能寻个工作寄存器。但只能寻址当前工作寄存器区的址当前工作寄存器区的8个工作寄存器,因此指令中的寄存器个工作寄存器,因此指令中的寄存器名称只能是名称只能是R0

9、R7。n(2)部分特殊功能寄存器,如累加器)部分特殊功能寄存器,如累加器A、寄存器、寄存器B以及数据以及数据指针寄存器指针寄存器DPTR等。等。二、寻址方式二、寻址方式7n2直接寻址方式直接寻址方式在直接寻址方式中,指令中直接以单元地址的形式给出操在直接寻址方式中,指令中直接以单元地址的形式给出操作数。该单元地址中的内容就是操作数。例如,指令作数。该单元地址中的内容就是操作数。例如,指令MOV A,26H表示把内部表示把内部RAM的的26H字节单元的内容传送到寄存器字节单元的内容传送到寄存器A。源操作数采用的是直接寻址方式。需要区分源操作数采用的是直接寻址方式。需要区分8086直接寻址指令直接

10、寻址指令格式中直接地址要加格式中直接地址要加“”,如,如8086指令:指令:MOV AX,1000H。直接寻址的操作数在指令中以存储单元的形式出现,因为直接寻址的操作数在指令中以存储单元的形式出现,因为直接寻址方式只能使用直接寻址方式只能使用8位二进制表示的地址,因此,直接寻位二进制表示的地址,因此,直接寻址方式的寻址范围只限于:址方式的寻址范围只限于:(1)内部)内部RAM的的128个单元。个单元。(2)特殊功能寄存器。特殊功能寄存器除了以单元地址的)特殊功能寄存器。特殊功能寄存器除了以单元地址的形式给出外,还可以用寄存器符号的形式给出。形式给出外,还可以用寄存器符号的形式给出。8例如,指令

11、例如,指令MOV A,90H表示把表示把P1口(字节地址为口(字节地址为90H)的内容传送给)的内容传送给A。也可写为。也可写为MOV A,P1这也表示把这也表示把P1口(地址为口(地址为90H)的内容传送给)的内容传送给A,两条指令是等价的。应当说明的是,直接寻址,两条指令是等价的。应当说明的是,直接寻址方式是能对所有特殊功能寄存器读写的唯一寻址方式是能对所有特殊功能寄存器读写的唯一寻址方式。方式。93寄存器间接寻址方式寄存器间接寻址方式 前述的寄存器寻址方式,在寄存器中存放的是操作数前述的寄存器寻址方式,在寄存器中存放的是操作数,而寄存器间接寻址方式,在寄存器中存放的是操作数的,而寄存器间

12、接寻址方式,在寄存器中存放的是操作数的地址,即先从寄存器中找到操作数的地址,再按该地址找地址,即先从寄存器中找到操作数的地址,再按该地址找到操作数。由于操作数是通过寄存器间接得到的,因此称到操作数。由于操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。为了区别寄存器寻址和寄存器间接寻为寄存器间接寻址。为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志缀标志“”。例如,指令。例如,指令 MOV A,Ri;i=0或或1其中,其中,Ri中的内容为中的内容为26H,即从,即从Ri中找到源操作数所在单中找到源操作

13、数所在单元的地址元的地址26H,把该地址中的内容传送给,把该地址中的内容传送给A,即把内部,即把内部RAM中中26H单元的内容送到单元的内容送到A。104立即寻址方式立即寻址方式 立即寻址方式就是直接在指令中给出操作数。出现在指立即寻址方式就是直接在指令中给出操作数。出现在指令中的操作数也称立即数。为了与直接寻址指令中的直接令中的操作数也称立即数。为了与直接寻址指令中的直接地址加以区别,需在操作数前面加前缀标志地址加以区别,需在操作数前面加前缀标志“#”。例如,。例如,指令指令 MOV A,#55H 表示把立即数表示把立即数55H送给送给A,55H这个常数是指令代码的这个常数是指令代码的一部分

14、。采用立即寻址方式的指令是双字节的。第一个字一部分。采用立即寻址方式的指令是双字节的。第一个字节是操作码,第二个字节是立即数。因此,立即数就是放节是操作码,第二个字节是立即数。因此,立即数就是放在程序存储器内的常数。在在程序存储器内的常数。在8086的直接寻址中,源操作数的直接寻址中,源操作数前面没有前面没有“#”,如,如8086指令:指令:MOV AX,7A3BH。115基址寄存器加变址寄存器间接寻址方式基址寄存器加变址寄存器间接寻址方式基址寄存器加变址寄存器间接寻址方式用于读出程序基址寄存器加变址寄存器间接寻址方式用于读出程序存储器中的数据到累加器中。该寻址方式是以存储器中的数据到累加器中

15、。该寻址方式是以DPTR或或PC作为基址寄存器,以累加器作为基址寄存器,以累加器A作为变址寄存器,并以作为变址寄存器,并以两者内容相加形成的两者内容相加形成的16位地址作为操作数的地址,以达位地址作为操作数的地址,以达到访问数据表格的目的。例如,指令到访问数据表格的目的。例如,指令 MOVC A,A+DPTR假设假设A的原有内容为的原有内容为10H,DPTR的内容为的内容为0210H,该指,该指令执行的结果是把程序存储器令执行的结果是把程序存储器0220H单元的内容传送给单元的内容传送给A。12下面对该寻址方式做如下说明。下面对该寻址方式做如下说明。(1)该寻址方式只能对程序存储器进行寻址,)

16、该寻址方式只能对程序存储器进行寻址,寻址范围可达到寻址范围可达到64KB。(2)该寻址方式的指令只有)该寻址方式的指令只有3条:条:MOVC A,A+DPTRMOVC A,A+PCJMP A,A+DPTR其中,前两条指令是读程序存储器指令,最后一其中,前两条指令是读程序存储器指令,最后一条指令是无条件转移指令。条指令是无条件转移指令。136位寻址方式位寻址方式AT89C51单片机具有位处理功能,可以对数据位单片机具有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式,而进行操作,因此就有相应的位寻址方式,而8086指令系统不具备该寻址功能。位寻址指令中可以指令系统不具备该寻址功能。位寻

17、址指令中可以直接使用位地址,例如,指令直接使用位地址,例如,指令MOV C,55H其功能是把位地址为其功能是把位地址为55H的值送到进位位的值送到进位位C。位。位寻址的寻址范围包括如下两种情况。寻址的寻址范围包括如下两种情况。14(1)内部)内部RAM中的位寻址区中的位寻址区单元地址为单元地址为20H2FH,共,共16个单元,个单元,128位,位位,位地址是地址是00H7FH,对这,对这128个位的寻址使用直接个位的寻址使用直接地址表示。寻址位有两种表示方法,一种是位地地址表示。寻址位有两种表示方法,一种是位地址,如址,如55H;另一种是单元地址加上位,如(;另一种是单元地址加上位,如(2AH

18、).5,它指的是,它指的是2AH单元中的第五位。位地单元中的第五位。位地址址55H与位与位(2AH).5是同一个位,二者是等价的。是同一个位,二者是等价的。15(2)特殊功能寄存器中的可寻址位)特殊功能寄存器中的可寻址位可供位寻址的特殊功能寄存器有可供位寻址的特殊功能寄存器有11个,共有个,共有88位,其中位,其中有有5位没有定义,所以有可寻址位位没有定义,所以有可寻址位83位。这些可寻址位。这些可寻址位在指令中有如下位在指令中有如下4种表示方法。种表示方法。直接使用位地址。例如,直接使用位地址。例如,PSW寄存器位寄存器位5的位地址为的位地址为0D5H。位名称的表示方法。例如,位名称的表示方

19、法。例如,PSW寄存器位寄存器位5是是F0标志标志位,则可使用位,则可使用F0表示该位。表示该位。单元地址加位数的表示方法。例如,单元地址加位数的表示方法。例如,0D0H单元(即单元(即PSW寄存器)位寄存器)位5,表示为,表示为(0D0H).5。特殊功能寄存器符号加位数的表示方法。例如,特殊功能寄存器符号加位数的表示方法。例如,PSW寄存器的位寄存器的位5表示为表示为PSW.5。167相对寻址方式相对寻址方式相对寻址方式是为解决程序转移而专门设置的,为转移指相对寻址方式是为解决程序转移而专门设置的,为转移指令所采用。在相对寻址的转移指令中,给出了地址偏移量令所采用。在相对寻址的转移指令中,给

20、出了地址偏移量,以,以“Rel”表示,即表示,即PC的当前值加上偏移量就构成了程序的当前值加上偏移量就构成了程序转移的目的地址。但这里的转移的目的地址。但这里的PC当前值是紧接在转移指令后当前值是紧接在转移指令后的下一条指令的的下一条指令的PC值,即转移指令的值,即转移指令的PC值加上它的字节数值加上它的字节数。因此,转移的目的地址可用下式表示:。因此,转移的目的地址可用下式表示:目的地址目的地址=转移指令所在的地址转移指令所在的地址+转移指令的字节数转移指令的字节数+Rel其中,偏移量其中,偏移量Rel是一个带符号的是一个带符号的8位二进制数补码数,它位二进制数补码数,它所能表示的数的范围是

21、所能表示的数的范围是128+127。因此,相对转移是以。因此,相对转移是以转移指令的下一条指令所在地址为基点,向地址增加方向转移指令的下一条指令所在地址为基点,向地址增加方向最大可转移最大可转移127个单元地址,向地址减少方向最大可转移个单元地址,向地址减少方向最大可转移128个单元地址。个单元地址。17AT89C51单片机指令系统的单片机指令系统的7种寻址方式统计如表种寻址方式统计如表7-1所示。所示。序号寻址方式使用变量寻址空间1寄存器寻址R0R7,A,B,C(位),DPTR,AB4组通用工作寄存区部分特殊功能寄存器2直接寻址内部RAM 128B特殊功能寄存器3寄存器间接寻址R0,R1,S

22、P,DPTR内部RAM和片外数据存储器4立即寻址#data5基址寄存器加变址间接寻址A+DPTR,A+PC程序存储器6位寻址内部RAM 20H2FH的128个可寻址位,SFR中的83个可寻址位7相对寻址PC+偏移量程序存储器187.2 MCS-51指令介绍指令介绍n在汇编程序指令编写和程序注释过程中,会用到一些在汇编程序指令编写和程序注释过程中,会用到一些特殊符号,具体含义介绍如下。特殊符号,具体含义介绍如下。nRn:当前工作寄存器组中的任一寄存器(:当前工作寄存器组中的任一寄存器(n=07)。nRi:当前工作寄存器组中的:当前工作寄存器组中的R0和和R1(i=0,1),),Ri常常用作间接寻

23、址寄存器。用作间接寻址寄存器。n:寄存器间接寻址或变址寻址符号。:寄存器间接寻址或变址寻址符号。n(Ri):由):由Ri间接寻址指向的地址单元。(用间接寻址指向的地址单元。(用SP和和DPTR间接寻址时,表示方法相同)间接寻址时,表示方法相同)n(Ri):由):由Ri间接寻址指向的地址单元中的内容间接寻址指向的地址单元中的内容。(用。(用SP和和DPTR间址时,表示相同)间址时,表示相同)n(XXH):某片内):某片内RAM单元中的内容。单元中的内容。19nDirect:片内:片内RAM单元(包括单元(包括SFR区)的直接地址(区)的直接地址(也有的写成也有的写成dir)。)。n#Data:8

24、位数据。位数据。n#Data16:16位数据。位数据。nAddr16:16位地址。位地址。nAddr11:11位地址。位地址。nRel:由:由8位补码数构成的相对偏移量。位补码数构成的相对偏移量。nBit:位地址,内部:位地址,内部RAM和特殊功能寄存器的直接寻和特殊功能寄存器的直接寻址位。址位。n:数据流向指示。:数据流向指示。207.2.1 数据传送指令数据传送指令数据传送指令共有数据传送指令共有29条,是指令系统中数量最多、使用条,是指令系统中数量最多、使用非常频繁的指令。非常频繁的指令。一、以累加器一、以累加器A为目的操作数的指令(为目的操作数的指令(4条)条)MOV A,Rn;工作寄

25、存器工作寄存器 Rn(R0R7)的内容)的内容 AMOV A,Direct;直接地址直接地址 Direct 中的内容(中的内容(Direct)AMOV A,Ri;间接地址间接地址 Ri 中的内容(中的内容(Ri)A,Ri=R0,R1MOV A,#Data;立即数立即数#Data A 21【例【例7.1】已知】已知 R0=25H,(,(25H)=0AAH,下,下面指令执行后的结果分析如下。面指令执行后的结果分析如下。MOV A,25H;(25H)A,(,(A)=0AAHMOV A,#30H;#30HA,(,(A)=33HMOV A,R0;R0A,(,(A)=25HMOV A,R0;(R0)A即(

26、即(25H)A,(,(A)=AAH 22二、以寄存器二、以寄存器Rn为目的操作数的指令(为目的操作数的指令(3条)条)MOV Rn,A;累加器累加器A中内容中内容RnMOV Rn,Direct;直接地址直接地址Direct中的内容中的内容RnMOV Rn,#Data;立即数立即数#DataRn【例【例7.2】已知】已知A=26H,R5=75H,(,(62H)=0ACH,下面指令执行后其结果分析如下。,下面指令执行后其结果分析如下。MOV R5,A;AR5,R5=26HMOV R5,62H;(62H)R5,R5=0ACHMOV R5,#30H;30HR5,R5=30H 注意:当操作数中出现注意:

27、当操作数中出现16进制数据的高进制数据的高8位为位为AF等字母时,需要在前面加上数字等字母时,需要在前面加上数字“0”如如ACH时时,需要在前面加上,需要在前面加上0,写为:,写为:0ACH,否则出错。,否则出错。23三、以直接地址三、以直接地址 Direct 为目的操作数的指令(为目的操作数的指令(5条)条)MOV Direct,A;ADirectMOV Direct,Rn;RnDirect MOV Direct,Direct;(源(源Direct)目的目的Direct MOV Direct,Ri;(Ri)Direct MOV Direct,#Data;#DataDirect 【例【例7.3

28、】设】设A=36H,(,(40H)=19H,(,(25H)=11H,R0=24H,(,(24H)=62H。下来指令执行后,其结果。下来指令执行后,其结果分析如下。分析如下。MOV 25H,#22H;#22H25H,(,(25H)=22HMOV 25H,40H;(40H)25H,(,(25H)=19HMOV 25H,A;A25H,(,(25H)=36HMOV 25H,R0;R025H,(,(25H)=24HMOV 25H,R0;(R0)25H,(,(25H)=62H 24四、以间接地址四、以间接地址 Ri 为目的操作数的指令(为目的操作数的指令(3条)条)MOV Ri,A;A(Ri),Ri=R0

29、,R1 MOV Ri,Direct;(Direct)(Ri),Ri=R0,R1MOV Ri,#Data;#Data(Ri),Ri=R0,R1五、五、16位数据传送指令(位数据传送指令(1条)条)MOV DPTR,#Data16;DataHDPH,DataLDPL指令执行的操作是将指令执行的操作是将16位的立即数位的立即数#Data传送到传送到16位寄存位寄存器器DPTR中。其中高中。其中高8位的数据位的数据DataH送入送入DPH,低,低8位的位的数据数据DataL送入送入DPL。例如:例如:MOV DPTR,#12BAH;DPH=12H,DPL=0BAH25六、片外数据传送指令(六、片外数据

30、传送指令(4条)条)在在 MCS-51单片机指令系统中,下面单片机指令系统中,下面4条指令操作用于单条指令操作用于单片机对片外片机对片外RAM或者片外或者片外I/O接口的数据传送。接口的数据传送。MOVX A,Ri;(Ri)A,读操作,读操作,Ri=R0,R1 MOVX A,DPTR;(DPTR)A,读操作,读操作MOVX Ri,A;A(Ri),写操作),写操作,Ri=R0,R1 MOVX DPTR,A;A(DPTR),写操作),写操作上述四条指令中采用了两种指针对片外上述四条指令中采用了两种指针对片外RAM或或I/O接口接口进行间接寻址:进行间接寻址:8位的工作寄存器位的工作寄存器Ri和和1

31、6位的数据指针位的数据指针DPTR,Ri寻址片外寻址片外RAM的的00H0FFH单元共单元共256个字个字节单元;节单元;DPTR寻址片外寻址片外RAM或或I/O接口的接口的0000H0FFFFH单元共单元共64KB范围。范围。26七、访问七、访问ROM的指令(的指令(2条)条)MOVC A,A+PC;先先PC+1PC,后(,后(A+PC)AMOVC A,A+DPTR;先先PC+1PC,后(,后(A+DPTR)A这两条指令也称为查表指令。编程时,预先在程序存这两条指令也称为查表指令。编程时,预先在程序存储器储器ROM中建立起数据表格,以后程序运行时利用这中建立起数据表格,以后程序运行时利用这两

32、条指令查表。这两条指令都为单字节指令,不同的两条指令查表。这两条指令都为单字节指令,不同的是,第一条指令的基本地址为程序计数器是,第一条指令的基本地址为程序计数器PC,偏移地,偏移地址为址为A;而第二条指令中,;而第二条指令中,16位数据指针位数据指针DPTR和累加和累加器器A既可以作基本地址也可以作偏移地址,使用比较既可以作基本地址也可以作偏移地址,使用比较灵活。因此,可以看出第一条指令查找范围为灵活。因此,可以看出第一条指令查找范围为256B;而第二条指令查找范围可达整个而第二条指令查找范围可达整个ROM的的64KB。27八、数据交换指令(八、数据交换指令(5条)条)XCH A,Rn;A与

33、与Rn内容交换,内容交换,Rn=R0R7XCH A,Direct;A与与Direct 内容交换内容交换XCH A,Ri;A与(与(Ri)内容交换)内容交换XCHD A,Ri;A的低四位与(的低四位与(Ri)低四位内容交)低四位内容交换换SWAP A;A自身的低自身的低4位与高位与高4位交换位交换其中,进行的操作是累加器其中,进行的操作是累加器A与工作寄存器与工作寄存器Ri(Ri=R0R7)、直接地址)、直接地址Direct 和间接地址和间接地址Ri(Ri=R0、R1)所寻址的单元内容,以及自身半字节的内容进行)所寻址的单元内容,以及自身半字节的内容进行互换。其中,前三条为字节的交换,而后面一条

34、进行的互换。其中,前三条为字节的交换,而后面一条进行的是半字节的交换,是半字节的交换,XCHD完成低完成低4位的交换而高位的交换而高4位不变位不变,SWAP完成累加器完成累加器A自身的低自身的低4位与高位与高4位交换。位交换。28九、堆栈操作指令(九、堆栈操作指令(2条)条)PUSH Direct ;先先SP+1SP,后(,后(Direct)(SP)POP Direct ;先(先(SP)Direct,后,后SP-1SP上述两条指令中,上述两条指令中,PUSH为入栈指令,为入栈指令,POP为出为出栈指令,用于保护和恢复现场。它们都是双栈指令,用于保护和恢复现场。它们都是双字节指令,且都不影响标志

35、位。字节指令,且都不影响标志位。29 入栈操作时,栈指针入栈操作时,栈指针SP首先上移一个单元,首先上移一个单元,指向栈顶的上一个单元,接着将直接地址指向栈顶的上一个单元,接着将直接地址Direct单元内容压入当前单元内容压入当前SP指向的单元中。出栈操作时指向的单元中。出栈操作时,首先将栈指针,首先将栈指针SP所指向的单元的内容弹出到直所指向的单元的内容弹出到直接地址接地址Direct中,然后中,然后SP下移一个单元,指向新下移一个单元,指向新的栈顶。堆栈操作具体特殊性:的栈顶。堆栈操作具体特殊性:n 堆栈指令仅用于片内堆栈指令仅用于片内RAM的的128字节单元或字节单元或专用寄存器的操作;

36、专用寄存器的操作;n 堆栈操作必须遵循堆栈操作必须遵循“先进后出先进后出”或者或者“后后进先出进先出”的原则,否则堆栈中的数据会出现混乱的原则,否则堆栈中的数据会出现混乱。307.2.2 算术运算指令算术运算指令算术运算指令共有算术运算指令共有24条,包括执行加、减、乘、条,包括执行加、减、乘、除法四则运算的指令和执行加除法四则运算的指令和执行加1、减、减1、BCD码的码的运算和调整的指令。虽然运算和调整的指令。虽然MCS-51单片机的算术单片机的算术逻辑单元逻辑单元ALU仅能对仅能对8位无符号整数进行运算,位无符号整数进行运算,但利用进位标志但利用进位标志C,可进行多字节无符号整数的,可进行

37、多字节无符号整数的运算。此外,利用溢出标志,还可以对带符号数运算。此外,利用溢出标志,还可以对带符号数进行补码运算。需要指出的是,除加进行补码运算。需要指出的是,除加1、减、减1指令指令外,其它指令的执行对程序状态字外,其它指令的执行对程序状态字PSW有影响。有影响。31一、加法指令(一、加法指令(4条)条)ADD A,Rn;A+RnA,Rn=R0R7ADD A,Direct;A+(Direct)AADD A,Ri;A+(Ri)AADD A,#Data;A+#DataA加法指令执行是将工作寄存器加法指令执行是将工作寄存器Rn(R0R7)内容、直接)内容、直接地址地址Direct内容、间接地址内

38、容、间接地址Ri(Ri=R0、R1)的内容以)的内容以及立即数及立即数#Data,与累加器,与累加器A的内容相加,运算结果保存的内容相加,运算结果保存在累加器在累加器A中。上面中。上面4条指令的执行将影响标志位条指令的执行将影响标志位AC、CY、OV、P。当和的第。当和的第3位或第位或第7位有进位时,分别将位有进位时,分别将AC、CY标志位置标志位置1,否则为,否则为0。溢出标志位只有带符号。溢出标志位只有带符号数运算时才有用。数运算时才有用。OV=1也可以理解为:由于进位破坏了也可以理解为:由于进位破坏了符号位的正确性。符号位的正确性。32二、带进位加指令(二、带进位加指令(4条)条)ADD

39、C A,Rn;A+Rn+CYA,Rn=R0R7ADDC A,Direct;A+(Direct)+CYAADDC A,Ri;A+(Ri)+CYAADDC A,#Data;A+#Data+CYA这组指令完成的功能是将工作寄存器这组指令完成的功能是将工作寄存器Rn内容、直接地址内容、直接地址Direct内容、间接地址内容、间接地址Ri的内容以及立即数的内容以及立即数#Data,连,连同进位标志位同进位标志位CY,与累加器,与累加器A的内容相加,运算结果保的内容相加,运算结果保存到累加器存到累加器A。其他的功能与。其他的功能与ADD指令相同。指令相同。33三、带借位减法指令(三、带借位减法指令(4条)

40、条)SUBB A,Rn;A-CY-RnA,Rn=R0R7SUBB A,Direct;A-CY-(Direct)ASUBB A,Ri;A-CY-(Ri)A,Ri=R0,R1SUBB A,#Data;A-CY-#Data A注意:没有不带借位标志的减法指令,所以当两注意:没有不带借位标志的减法指令,所以当两个单字节或多字节最低位相减时,必须先清除借个单字节或多字节最低位相减时,必须先清除借位位CY。当两个不带符号位数相减时,溢出与否。当两个不带符号位数相减时,溢出与否与与OV状态无关,而根据状态无关,而根据CY是否有借位判断处理是否有借位判断处理。34四、十进制调整指令(四、十进制调整指令(1条)

41、条)十进制调整指令用于对十进制调整指令用于对BCD码十进制数加法码十进制数加法运算的结果的内容进行修正。其指令格式为运算的结果的内容进行修正。其指令格式为 DA A 该指令的功能是对压缩的该指令的功能是对压缩的BCD码(一个字节码(一个字节存放存放2位位BCD码)的加法结果进行十进制调整。码)的加法结果进行十进制调整。两个两个BCD码按二进制相加之后,必须经本指令的码按二进制相加之后,必须经本指令的调整才能得到正确的压缩调整才能得到正确的压缩BCD码。对于十进制数码。对于十进制数(BCD码)的加法运算,需借助于二进制加法指码)的加法运算,需借助于二进制加法指令。令。35五、增五、增1指令(指令

42、(5条)条)INC A;(A)+1AINC Rn;(Rn)+1Rn,Rn=R0R7,INC Direct;(Direct)+1DirectINC Ri;(Ri)+1(Ri),Ri=R0,R1INC DPTR;(DPTR)+1DPTR这这5条指令将指令中所指出的变量增条指令将指令中所指出的变量增1,且不影响程序状,且不影响程序状态字态字PSW中的任何标志。若变量原来为中的任何标志。若变量原来为0FFH,加,加1后将后将溢出为溢出为00H(前(前4条指令),标志也不会受到影响。第条指令),标志也不会受到影响。第5条条指令指令INC DPTR,是,是16位数增位数增1指令。指令首先对低指令。指令首先

43、对低8位位指针指针DPL的内容执行加的内容执行加1操作,当产生溢出时,就对操作,当产生溢出时,就对DPH的内容进行加的内容进行加1操作,也不影响标志操作,也不影响标志CY的状态。的状态。36六、减六、减1指令(指令(4条)条)DEC A;(A)-1ADEC Rn;(Rn)-1Rn,Rn=R0R7DEC Direct;(Direct)-1DirectDEC Ri;(Ri)-1(Ri),Ri=R0,R1这这4条指令的功能是将指定的变量减条指令的功能是将指定的变量减1。若原来为。若原来为00H,减,减1后下溢为后下溢为0FFH,不影响标志位(,不影响标志位(P标标志除外)。志除外)。37七、乘法指令

44、(七、乘法指令(1条)条)MUL AB;ABBA 这条指令的功能是把累加器这条指令的功能是把累加器A和寄存器和寄存器B中的无符号中的无符号8位整数相乘,其位整数相乘,其16位积的低位积的低8位字节在累加器位字节在累加器A中,高中,高8位位字节在字节在B中。如果积大于中。如果积大于255,则溢出标志位,则溢出标志位OV置置“1”,否则否则OV清清“0”。进位标志位。进位标志位Cy总是清总是清“0”。八、除法指令(八、除法指令(1条)条)DIV AB;A/B,商,商A,余数,余数B 该指令的功能是用累加器该指令的功能是用累加器A中中8位无符号整数(被除数位无符号整数(被除数)除以)除以B中中8位无

45、符号整数(除数),所得的商(为整数位无符号整数(除数),所得的商(为整数)存放在累加器)存放在累加器A中,余数存放在寄存器中,余数存放在寄存器B中,且中,且CY和和溢出标志位溢出标志位OV清清“0”。如果。如果B的内容为的内容为“0”(即除数为(即除数为“0”),则存放结果的),则存放结果的A、B中的内容不定,并溢出标志中的内容不定,并溢出标志位位OV置置“1”。38【例【例7.4】(A)=0FBH,(B)=12H,执行指令,执行指令 DIV AB结果为结果为(A)=0DH,(B)=11H,CY=0,OV=0。39 移位与逻辑运算指令共有移位与逻辑运算指令共有24条,有左条,有左/右移位右移位

46、、清零和取反、与、或、异或等逻辑操作。这类、清零和取反、与、或、异或等逻辑操作。这类指令一般会影响奇偶标志位指令一般会影响奇偶标志位P,但循环指令会影,但循环指令会影响响CY。一、移位操作(一、移位操作(4条)条)RL ARR ARLC ARRC A7.2.3 移位与逻辑运算指令移位与逻辑运算指令40第一条指令的功能是累加器第一条指令的功能是累加器A的的8位向左循环移位,位向左循环移位,位位7循环移入位循环移入位0,不影响标志位。,不影响标志位。第二条指令的功能是累加器第二条指令的功能是累加器A的内容向右循环移一的内容向右循环移一位,位位,位0移入到位移入到位7。第三条指令的功能是将累加器第三

47、条指令的功能是将累加器A的内容和进位标志的内容和进位标志位位CY一起向左循环移一位,一起向左循环移一位,A的第的第7位移入进位位位移入进位位CY,CY移入到移入到A的的0位,不影响其他标志位。位,不影响其他标志位。第四条指令的功能是累加器第四条指令的功能是累加器A的内容和进位标志的内容和进位标志CY一起向右循环移一位,一起向右循环移一位,A的的0位移入到位移入到CY,CY移入移入A的第的第7位。位。41二、清零和取反(二、清零和取反(2条)条)CLR ACPL A第一条指令的功能是累加器第一条指令的功能是累加器A清清“0”。不影响。不影响CY、OV等标志位。等标志位。第二条指令的功能是将累加器

48、第二条指令的功能是将累加器A的内容按位逻辑的内容按位逻辑取反,不影响标志位。取反,不影响标志位。42三、逻辑与指令(三、逻辑与指令(6条)条)ANL A,Rn;(A)(Rn)A,Rn=R0R7 ANL A,Direct;(A)(Direct)A ANL A,#Data;(A)#Data A ANL A,Ri;(A)(Ri)A,Ri=R0,R1ANL Direct,A;(Direct)(A)Direct ANL Direct,#Data;(Direct)#Data Direct 这组指令的功能是在指定的变量之间以位为基础这组指令的功能是在指定的变量之间以位为基础进行进行“逻辑与逻辑与”操作,结果

49、存放到目的变量所在操作,结果存放到目的变量所在的寄存器或存储器中。的寄存器或存储器中。43四、逻辑或指令(四、逻辑或指令(6条)条)ORL A,Rn;(A)(Rn)A,n=07ORL A,Direct;(A)(Direct)AORL A,#Data;(A)#DataAORL A,Ri;(A)(Ri)A,i=0,1ORL Direct,A;(Direct)(A)DirectORL Direct,#Data;(Direct)#DataDirect这组指令的功能是在所指定的变量之间执行以位这组指令的功能是在所指定的变量之间执行以位为基础的为基础的“逻辑或逻辑或”操作,结果存到目的变量寄操作,结果存到

50、目的变量寄存器或存储器中。存器或存储器中。44五、逻辑异或指令(五、逻辑异或指令(6条)条)XRL A,Rn;(A)(Rn)A,Rn=R0R7XRL A,Direct;(A)(Direct)AXRL A,Ri;(A)(Ri)A,i=0,1XRL A,#Data;(A)#DataAXRL Direct,A;(Direct)(A)DirectXRL Direct,#Data;(Direct)#DataDirect这组指令的功能是在所指定的变量之间执行以位为基础这组指令的功能是在所指定的变量之间执行以位为基础的的“逻辑异或逻辑异或”操作,结果存到目的变量寄存器或存储操作,结果存到目的变量寄存器或存储

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第七章MCS51单片机的指令与程序设计课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|