第3章 MCS-51指令系统_第1页
第3章 MCS-51指令系统_第2页
第3章 MCS-51指令系统_第3页
第3章 MCS-51指令系统_第4页
第3章 MCS-51指令系统_第5页
已阅读5页,还剩139页未读 继续免费阅读

下载本文档

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

文档简介

第3章MCS-51指令系统实训3指令的应用3.1简介3.2寻址方式3.3指令系统本章小结习题3实训3指 令 的 应 用1.实训目的(1)掌握指令格式及表示方法:助记符表示和机器码表示。(2)了解人工汇编与机器汇编的方法。(3)了解寻址方式的概念。(4)掌握常用指令的功能及应用。

2.实训设备和器件(1)实训设备:单片机开发系统、微机等。(2)实训电路:同实训1电路。

3.实训步骤与要求(1)将表3.1中的助记符指令翻译成机器码。(2)将机器码分别输入到单片机开发系统中,或经机器汇编后分别下载到单片机开发系统中,单步运行,观察并记录实验板上的8个发光二极管的亮灭状态及相关单元的数据,填入表3.1中。

4.实训分析与总结1)指令形式从实训中可以看出,指令有两种形式:助记符指令和机器码指令(机器指令)。助记符指令只有翻译成机器码后,单片机才能直接执行。机器码指令分为以下三种:单字节指令:机器码只有一个字节的指令称为单字节指令。例如单字节指令CLRA的机器码是E4H。双字节指令:机器码包括两个字节的指令称为双字节指令。例如双字节指令MOVA,#55H的机器码是74H55H。三字节指令:机器码包括三个字节的指令称为三字节指令。例如三字节指令MOVP1,#55H的机器码是75H90H55H。单片机指令系统中,大多数指令是单字节指令和双字节指令。2)指令分析(1) MOVP1,#55H:将常数55H送入P1口。在助记符指令中,常数被称为立即数。发光二极管的状态为立即数55H: 01010101对应P1口各位:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0相应的LED状态:亮灭亮灭亮灭亮灭参照实训1的电路图,若P1口的某一位输出0(低电平),则经过反相后变为高电平,由外部电源VCC驱动发光二极管处于点亮状态;否则,二极管处于熄灭状态。(2) MOV20H,#0F0H:将立即数0F0H送到内部RAM的20H单元中。   MOVP1,20H:将20H单元的内容,即0F0H送到P1口。发光二极管的状态为0F0H:11110000P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:灭灭灭灭亮亮亮亮(3) MOVA,#0F0H:将立即数0F0H送到累加器A中。   MOVP1,A:将累加器A的内容,即0F0H送到P1口。发光二极管的状态同(2)。(4) MOVR4,#0FH:将立即数0FH送到寄存器R4中。MOVP1,R4:将寄存器R4的内容,即0FH送到P1口。发光二极管的状态如下:0FH:00001111P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:亮亮亮亮灭灭灭灭(5) MOV20H,#0AAH:将立即数0AAH送到内部RAM的20H单元中。   MOVR0,#20H:将立即数20H送到R0寄存器中。   MOVP1,@R0:将R0所指向的20H单元的内容,即0AAH送到P1口中。发光二极管的状态如下:0AAH:10101010P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:灭亮灭亮灭亮灭亮(6) MOVA,#55H:将立即数55H送到累加器A中。MOVP1,A:将累加器A的内容,即55H送到P1口。发光二极管的状态同(1)。ANLA,#0FH:将累加器A的内容55H与立即数0FH进行逻辑“与”操作,结果为05H,再送回累加器A中。MOVP1,A:将累加器A的内容,即05H送到P1口。发光二极管的状态如下:05H:00000101P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:亮亮亮亮亮灭亮灭   ORLA,#0F0H:将累加器A的内容05H与立即数0F0H进行逻辑“或”操作,结果为0F5H,再送回累加器A中。   MOVP1,A:将累加器A的内容,即0F5H送到P1口。发光二极管的状态如下:0F5H:11110101P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:灭灭灭灭亮灭亮灭(7) CLR  A:累加器清0。MOVP1,A:将累加器A的内容,即00H送到P1口。发光二极管的状态是全亮。CPL  A:将A的内容00H按位取反,结果为0FFH。MOVP1,A:将累加器A的内容,即0FFH送到P1口。发光二极管的状态是全灭。(8) MOVA,#01H:将立即数01H送到累加器A中。MOVP1,A:将累加器A的内容,即01H送到P1口。发光二极管的状态如下:01H:0000000 1P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:亮亮亮亮亮亮亮灭  RL A:移位指令,将A的内容01H循环左移一位,结果为02H。  MOVP1,A:将累加器A的内容,即02H送到P1口。发光二极管的状态如下:02H:00000 010P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:亮亮亮亮亮亮灭亮   RL A:将A的内容02H左移一位,结果为04H。   MOVP1,A:将累加器A的内容,即04H送到P1口。发光二极管的状态如下:02H:00000 100P1口:P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0LED状态:亮亮亮亮亮灭亮 亮3)现象分析从实训2中看到以下现象:往P1口传送数据的指令中,数据的来源不尽相同。数据是指令的操作对象,叫做操作数。指令必须给出操作数所在的地方,才能进行数据传送。寻找操作数地址的方法,称为寻址方式。下面是在实训中遇到的采用了不同寻址方式的指令:

MOVP1,#55H;把操作数直接写在指令中,称为立即数寻址

MOVP1,20H ;把存放操作数的内存单元的地址直接写在指令 ;中,称为直接寻址MOVP1,A ;把操作数存放在寄存器中,称为寄存器寻址MOVP1,@R0 ;把存放操作数的内存单元的地址放在寄存器 ;R0中,这种寻址方式称为寄存器间接寻址除了以上4种寻址方式之外,MCS-51单片机还有变址寻址方式、相对寻址方式和位寻址方式等。思考:指出表3.1中每一条指令的寻址方式。注意:P1与寄存器R0~R7、累加器A不同,它是内部RAM单元90H的符号地址,只能作为内存单元直接寻址。3.1简介3.1.1指令概述3.1.2指令格式从实训2中看到,不同指令翻译成机器码后字节数也不一定相同。按照机器码个数,指令可以分为以下三种:

MCS-51单片机指令系统包括49条单字节指令、46条双字节指令和16条三字节指令。采用助记符表示的汇编语言指令格式如下:标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字母;标号后必须用冒号。操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,即操作数隐含在操作码中,如RET指令;只有一个操作数,如CPLA指令;有两个操作数,如MOVA,#00H指令,操作数之间以逗号相隔,前面的操作数称为目的操作数,后面的操作数称为源操作数;有三个操作数,如CJNEA,#00H,NEXT指令,操作数之间也以逗号相隔。注释是对指令的解释说明,用以提高程序的可读性。注释前必须加分号。3.2寻址方式1.寄存器寻址寄存器寻址是指将操作数存放于寄存器中。寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOVR1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。如果程序状态寄存器PSW的RS1RS0=01(选中第一组工作寄存器,对应地址为08H~0FH),设累加器A的内容为20H,则执行MOVR1,A指令后,内部RAM09H单元的值就变为20H,如图3.1所示。图3.1寄存器寻址示意图寄存器寻址的寻址范围包括如下两部分:(1)通用寄存器R0~R7。MCS-51单片机中共有4组32个通用寄存器,但寄存器寻址只能使用当前寄存器组,指令中的寄存器名称也只能是R0~R7。因此,在使用前,需要通过对PSW中的RS1、RS0位的状态进行设置,来选择当前寄存器组。单片机复位时,RS1RS0=00,选中第0组工作寄存器。(2)部分专用寄存器。例如累加器A、寄存器B以及数据指针DPTR等。实训3中,采用寄存器寻址的指令如下:MOV P1,A ;将累加器A的内容送到P1口MOV P1,R4 ;将寄存器R4的内容送到P1口CLR A ;将累加器A清0CPL A ;将累加器A中的内容取反RL A ;将累加器A的内容循环左移

2.直接寻址直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。例如,指令MOVA,3AH执行的操作是将内部RAM中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令采用的是直接寻址方式。设内部RAM3AH单元的内容是88H,那么指令MOVA,3AH的执行过程如图3.2所示。图3.2直接寻址示意图在直接寻址中,指令中直接给出了存放操作数的内部RAM地址,而不是操作数本身,其寻址范围只限于内部RAM中,包括如下两部分:(1)内部RAM的低128单元,地址范围为00H~FFH,在指令中直接以单元地址形式给出。例如:指令MOVA,3AH中,3AH表示内部RAM单元地址。(2)专用寄存器。专用寄存器除以单元地址形式给出外,还可以用寄存器符号形式给出。直接寻址是访问专用寄存器的惟一方法。实训3中,采用直接寻址的指令如下:MOVP1,20H ;将20H单元的内容传送到P1口图3.3立即数寻址示意图

3.立即数寻址立即数寻址是指将操作数直接写在指令中。例如,指令MOVA,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如图3.3所示。实训3中,采用立即数寻址的指令如下:MOV P1,#55H ;将立即数55H送P1口MOV 20H,#0F0H ;将立即数0F0H送20H单元MOV A,#0F0H ;将立即数0F0H送累加器A中MOV R4,#0FH ;将立即数0FH送寄存器R4中MOV R0,#20H ;将立即数20H送寄存器R0中ANL A,#0FH ;将累加器A的内容与立即数0FH进行逻辑与操作ORL A,#0F0H ;将累加器A的内容与立即数0F0H进行逻辑或操作MOV A,#01H ;将立即数01H送累加器A中MOV A,#55H ;将立即数55H送累加器A中

除了以上给出的8位立即数寻址的指令例子外,MCS-51指令系统中还有一条16位立即数寻址指令,该指令为

MOVDPTR,#2000H;把16位立即数2000H传送到数据指针DPTR中

4.寄存器间接寻址寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,它们被称为寄存器间接寻址寄存器。注意:间接寻址寄存器前面必须加上符号“@”。例如,指令MOVA,@R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。设R0=3AH,内部RAM3AH中的值是65H,则指令MOVA,@R0的执行结果是累加器A的值为65H,该指令的执行过程如图3.4所示。图3.4寄存器间接寻址示意图寄存器间接寻址的寻址范围如下:(1)内部RAM的低128字节。对内部RAM的低128字节单元的间接寻址,只能使用R0或R1作间接寻址寄存器,其通用形式为@Ri(i=0或1)。(2)外部RAM的64K字节。对外部RAM的64K字节的间接寻址,使用DPTR作间接寻址寄存器,其形式为@DPTR。例如:MOVXA,@DPTR,其功能是把由DPTR指定的外部RAM单元的内容送到累加器A中。(3)外部RAM的低256字节。外部RAM的低256字节是一个特殊的寻址区,除了可以使用DPTR作间接寻址寄存器外,还可以使用R0或R1作间接寻址寄存器,例如MOVXA,@R0,即把由R0指定的外部RAM单元的内容传送到累加器A中。实训3中,采用寄存器间接寻址的指令如下:MOVP1,@R0 ;将R0所指的存储单元的内容送P1口

5.变址寻址变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。例如,指令MOVCA,@A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再按照该地址将操作数取出来送到累加器A中。设累加器A=02H,DPTR=0300H,外部ROM中,0302H单元的内容是55H,则指令MOVCA,@A+DPTR的执行结果是累加器A的内容为55H。该指令的执行过程如图3.5所示。图3.5变址寻址示意图对变址寻址方式说明如下:(1)变址寻址是专门针对程序存储器的寻址方式,所以只能对程序存储器进行寻址,寻址范围为64K字节。(2)变址寻址的指令只有2条:MOVC A,@A+DPTRMOVC A,@A+PC(3)尽管变址寻址比较复杂,但变址寻址的指令都是一字节指令。6.相对寻址相对寻址是指将程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。例如,指令SJMP54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。设指令SJMP54H的机器码80H54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。该指令的执行过程如图3.6所示。相对寻址是专门为改变程序执行方向而设置的,程序执行的方向由程序计数器PC控制,在程序顺序执行过程中,PC自动加1,按照指令的存放顺序逐一执行;而相对寻址则会修改PC的值,从而使程序跳转到新的目的地址执行。图3.6相对寻址示意图

7.位寻址位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS-51单片机中,操作数不仅可以按字节进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。例如,指令SETB3DH执行的操作是将内部RAM位寻址区中的3DH位置1。设内部RAM27H单元的内容是00H,执行SETB3DH后,由于3DH对应内部RAM27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图3.7所示。图3.7位寻址示意图位寻址区包括专门安排在内部RAM中的如下两个区域:(1)内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,每个单元包括8个位,共计128个位,位地址为00H~7FH。对这128个位有两种表示方式:一是位地址,例如:SETB3DH;二是单元地址加位的方式,即点操作符写法,例如:SETB27H.5。(2)特殊功能寄存器SFR中的11个寄存器可以位寻址,包括83个位(相关内容可参见有关章节中位地址定义的内容)。对这些位在指令中有如下4种表示方法:直接使用位地址,例如:MOVC,0D0H。点操作符表示法,例如:MOVC,0D0H.0。位名称表示法,例如:MOVC,P。专用寄存器符号与点操作符表示法,例如:MOVC,PSW.0。

8. MCS-51单片机寻址方式小结以上介绍了MCS-51单片机的7种寻址方式,每一种寻址方式都有各自不同的寻址区域和特点,在此归纳总结如表3.2所示。表3.2MCS-51单片机寻址方式小结注:指令举例中,寻址方式是指源操作数的寻址方式。3.3指令系统MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类:数据传送指令(29条)。算术运算指令(24条)。逻辑运算及移位指令(24条)。控制转移指令(17条)。位操作指令(17条)。3.3.1指令系统中的符号说明指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3.3的约定。表3.3指令描述约定3.3.2数据传送类指令数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部RAM、寄存器、外部RAM以及程序存储器之间的数据传送。数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变,即数据传送类指令分类如图3.8所示.图3.8数据传送指令分类

1.内部8位数据传送指令(15条)内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本格式:MOV<目的操作数>,<源操作数>1)以累加器A为目的地址的传送指令(4条)例3.1

已知相应单元的内容如下,请指出每条指令执行后相应单元内容的变化。(1)MOVA,#20H(2)MOVA,40H(3)MOVA,R0(4)MOVA,@R0解:(1)MOVA,#20H执行后A=20H。(2)MOVA,40H执行后A=30H。(3)MOVA,R0执行后A=50H。(4)MOVA,@R0执行后A=10H。2)以Rn为目的地址的传送指令(3条)3)以直接地址为目的地址的传送指令(5条)注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。4)以寄存器间接地址为目的地址的传送指令(3条)注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。例3.2

已知相应单元的内容如下,请指出下列指令执行后各单元内容相应的变化。(1)MOVA,R6(2)MOVR6,70H(3)MOV70H,50H(4)MOV40H,@R0(5)MOV@R1,#88H解:(1)MOVA,R6执行后A=30H。 (2)MOVR6,70H执行后R6=40H。(3)MOV70H,50H执行后 (70H)=60H。(4)MOV40H,@R0执行后 (40H)=60H。(5)MOV@R1,#88H执行后 (66H)=88H。注意:以上指令结果不影响程序状态字寄存器PSW标志。

2.16位数据传送指令(1条)3.外部数据传送指令(4条)注意:①外部RAM只能通过累加器A进行数据传送。②累加器A与外部RAM之间传送数据时只能用间接寻址方式,间接寻址寄存器为DPTR、R0、R1。③以上传送指令结果(未注明的)通常影响程序状态字寄存器PSW的P标志。例3.3

把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去。解:MOVDPTR,#2040H MOVXA,@DPTR ;先将2040H单元的内容传送到累加器A中 MOVDPTR,#2560H MOVX@DPTR,A ;再将累加器A中的内容传送到2560H单元中注意:以上指令结果影响程序状态字寄存器PSW的P标志。4.交换和查表类指令(9条)1)字节交换指令(3条)例3.4设内部数据存储区2AH、2BH单元中连续存放有4个BCD码(1个BCD码占4位),试编写一程序把这4个BCD码倒序排序,即解:MOVR0,#2AH ;将立即数2AH传送到寄存器R0中 MOVA,@R0 ;将2AH单元的内容传送到累加器A中 SWAPA ;将累加器A中的高4位与低4位交换 MOV@R0,A ;将累加器A的内容传送到2AH单元中 MOVR1,#2BH

MOVA,@R1 ;将2BH单元的内容传送到累加器A中

SWAPA ;将累加器A中的高4位与低4位交换XCHA,@R0 ;将累加器A中的内容与2AH单元的内容交换MOV@R1,A ;将累加器A的内容传送到2BH单元注意:①以上指令结果影响程序状态字寄存器PSW的P标志。②查表指令用于查找存放在程序存储器中的表格。4)查表指令(2条)5)堆栈操作指令(2条)注意:①堆栈是用户自己设定的内部RAM中的一块专用存储区,使用时一定先设堆栈指针,堆栈指针缺省为SP=07H。②堆栈遵循后进先出的原则安排数据。③堆栈操作必须是字节操作,且只能直接寻址。将累加器A入栈、出栈指令可以写成:PUSH/POPACC或PUSH/POP0E0H而不能写成:PUSH/POPA④堆栈通常用于临时保护数据及子程序调用时保护现场和恢复现场。⑤以上指令结果不影响程序状态字寄存器PSW标志。例3.5

设堆栈指针为30H,把累加器A和DPTR中的内容压入,然后根据需要再把它们弹出,编写实现该功能的程序段。解:MOVSP,#30H ;设置堆栈指针,SP=30H为栈底地址PUSH ACC;SP+1→SP,SP=31H,ACC→(SP)PUSH DPH;SP+1→SP,SP=32H,DPH→(SP)PUSH DPL;SP+1→SP,SP=33H,DPL→(SP)POP DPL;(SP)→DPL,SP-1→SP,SP=32HPOP DPH ;(SP)→DPH,SP-1→SP,SP=31HPOP ACC ;(SP)→ACC,SP-1→SP,SP=30H3.3.3算术运算类指令算术运算类指令分类如图3.9所示。图3.9算术运算类指令分类

1.加、减法指令(22条)1)加法指令(8条)2)减法指令(4条)注意:①减法指令中没有不带借位的减法指令,所以在需要时,必须先将CY清0。②指令执行结果均在累加器A中。③以上指令结果均影响程序状态字寄存器PSW的CY、OV、AC和P标志。例3.6编写计算12A4H+0FE7H的程序,将结果存入内部RAM41H和40H单元,40H存低8位,41H存高8位。解:单片机指令系统中只提供了8位的加减法运算指令,两个16位数(双字节)相加可分为两步进行,第一步先对低8位相加,第二步再对高8位相加。程序如下:MOVA,#0A4H ;被加数低8位→AADDA,#0E7H ;加数低8位E7H与之相加,A=8BH,CY=1MOV40H,A ;A→(40H),存低8位结果MOVA,#12H;被加数高8位→AADDCA,#0FH ;加数高8位+A+CY,A=22HMOV41H,A ;存高8位运算结果注意:①该指令结果影响程序状态字寄存器PSW的CY、OV、AC和P标志。3)BCD码调整指令(1条)②BCD(BinaryCodedDecimal)码是用二进制形式表示十进制数,例如十进制数45的BCD码形式为45H。BCD码只是一种表示形式,与其数值没有关系。BCD码用4位二进制码表示一位十进制数,这4位二进制数的权为8421,所以BCD码又称为8421码。十进制数码0~9所对应的BCD码如表3.4所示。表3.4十进制数码与BCD码的对应表在表3.4中,用4位二进制数表示一个十进制数位,例如56D和87D的BCD码表示为01010110 (56D) 10000111(87D)000101000011(143D)③ DAA指令将A中的二进制码自动调整为BCD码。④ DAA指令只能跟在ADD或ADDC加法指令后,不适用于减法。例3.7说明指令MOVA,#05H和ADDA,#08H及DAA的执行结果。解:MOVA,#05H ;05H→A ADDA,#08H ;05H+08H→A,A=0DH DA A ;自动调整为BCD码,A=13H4)加1减1指令(9条)注意:以上指令结果通常不影响程序状态字寄存器PSW。例3.8分别指出指令INCR0和INC@R0的执行结果。设R0=30H,(30H)=00H。解:INCR0 ;R0+1=30H+1=31H→R0,R0=31HINC@R0 ;(R0)+1=(30H)+1→(R0),(30H)=01H, ;R0中内容不变

2.乘、除法指令1)乘法指令(1条)注意:乘法指令结果影响程序状态字寄存器PSW的OV(积超过0FFH则置1,否则为0)和CY(总是清0)以及P标志。2)除法指令(1条)注意:①除法指令结果影响程序状态字寄存器PSW的OV(除数为0则置1,否则为0)和CY(总是清0)以及P标志。②当除数为0时结果不能确定。3.3.4逻辑运算及移位类指令逻辑运算及移位类指令逻辑运算指令循环移位指令(4条):RL、RLC、RR、RRC逻辑与指令(6条):ANL逻辑或指令(6条):ORL逻辑异或指令(6条):XRL累加器A清0和取反指令(2条):CLR、CPL逻辑运算及移位类指令分类如图3.10所示。图3.10逻辑运算及移位类指令分类1.逻辑运算指令(20条)1)逻辑与指令(6条)注意:①以上指令结果通常影响程序状态字寄存器PSW的P标志。②逻辑与指令通常用于将一个字节中的指定位清0,其它位不变。2)逻辑或指令(6条)注意:①以上指令结果通常影响程序状态字寄存器PSW的P标志。②逻辑或指令通常用于将一个字节中的指定位置1,其余位不变。3)逻辑异或指令(6条)注意:①以上指令结果通常影响程序状态字寄存器PSW的P标志。② “异或”原则是相同为0,不同为1。4)累加器A清0和取反指令(2条)例3.9利用逻辑指令完成下面的操作:(1)将累加器A中的数据高4位清0,低4位不变(该操作也称为屏蔽掉累加器A的高4位)。(2)将累加器A中的数据高4位置1,低4位不变。(3)将累加器A中的数据低4位取反,高4位不变。解:(1) ANLA,#00001111B或者ANLA,#0FH(2) ORLA,#11110000B或者ORLA,#0F0H(3) XRLA,#00001111B或者XRLA,#0FH2.循环移位指令(4条)注意:执行带进位的循环移位指令之前,必须给CY置位或清0。例3.10已知累加器A的内容为01H,请指出下列指令执行后累加器A的值各是多少。(1) RRA (2)RLA(3) SETBC (4) SETBC   RRC A  RLC A解:累加器A为8位寄存器,可以将其内容01H写成8位二进制形式:000000001B,记为D7D6D5D4D3D2D1D0。(1)指令RRA执行的操作是将累加器A的内容循环右移一位,移位过程如下:D7→D6、D6→D5、D5→D4、D4→D3、D3→D2、D2→D1、D1→D0、D0→D7所以指令执行后累加器A的内容为80H。(2)指令RLA执行的操作是将累加器A的内容循环左移一位,移位过程如下:D0→D1、D1→D2、D2→D3、D3→D4、D4→D5、D5→D6、D6→D7、D7→D0所以指令执行后累加器A的内容为02H。(3)指令SETBC执行后,进位标志位CY=1;指令RRCA执行的操作是将累加器A的内容带CY循环右移一位,移位过程如下:D7→D6、D6→D5、D5→D4、D4→D3、D3→D2、D2→D1、D1→D0、D0→CY、CY→D7所以指令执行后累加器A的内容为80H,CY=1。(4)指令SETBC执行后,进位标志位CY=1;指令RLCA执行的操作是将累加器A的内容带CY循环左移一位,移位过程如下:D0→D1、D1→D2、D2→D3、D3→D4、D4→D5、D5→D6、D6→D7、D7→CY、CY→D0所以指令执行后累加器A的内容为03H,CY=0。3.3.5控制转移类指令控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移类指令分为:无条件转移指令、条件转移指令及调用和返回指令。具体分类如图3.11所示。图3.11控制转移类指令分类

1.无条件转移指令(4条)1)长转移指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②该指令可以转移到64KB程序存储器中的任意位置。例3.11假定在某程序中存在如下指令:

NEXT:MOVA,#00H ;NEXT为指令的标号,代表该指令在 ;程序存储器中存放的地址,假定该 ;指令的存储地址为2000H

请写出指令LJMPNEXT执行后PC的值。

解:执行指令LJMPNEXT之后,PC=2000H,即程序从NEXT标号所指向的指令开始执行。2)绝对转移指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②该指令转移范围是2KB。

例3.12指令KWR:AJMPKWR1的执行结果。解:设KWR标号地址=1030H,KWR1标号地址=1100H,该指令执行后PC首先加2变为1032H,然后由1032H的高5位和1100H的低11位拼装成新的PC值0001000100000000B,即程序从1100H开始执行。3)相对转移指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②该指令的转移范围是以本指令的下一条指令为中心的-128~+127字节以内,属于相对寻址方式。该指令的执行过程是:先执行完本指令,PC自动增2,然后再与rel相加得到新的转移地址。在PCPC+2+rel中,第一个PC表示新的转移地址,第二个PC表示本指令所在地址。③在实际应用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用标号来代替的,不一定写出它们的具体地址。例3.13假定某程序中有如下指令:

SJMPNEXTNEXT: INCR1在指令SJMPNEXT中,NEXT为相对偏移量,假定该偏移值为20H,本指令所在地址为1000H,请计算执行完SJMPNEXT指令后PC的值。解:指令SJMPNEXT所在地址为1000H,执行完该指令后PC=1002H,再利用指令中的偏移量计算新的PC值:PC=1002H+20H=1022H4)间接寻址的无条件转移指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②该指令通常用于散转(多分支)程序。例3.14假定DPTR=2000H,指出当累加器A的内容分别为02H、04H、06H、08H时,执行指令JMP@A+DPTR后,PC的值分别为多少。解:当累加器A=02H时,执行指令JMP@A+DPTR后,PC=2000H+02H=2002H。当累加器A=04H时,执行指令JMP@A+DPTR后,PC=2000H+04H=2004H。当累加器A=06H时,执行指令JMP@A+DPTR后,PC=2000H+06H=2006H。当累加器A=08H时,执行指令JMP@A+DPTR后,PC=2000H+08H=2008H。

2.条件转移指令(8条)1)累加器A判0指令(2条)注意:①以上指令结果不影响程序状态字寄存器PSW。②转移范围与指令SJMP相同。③ PCPC+2+rel中,第一个PC表示新的转移地址,第二个PC表示本指令所在地址。④在实际应用中,rel用标号代替,无需计算出具体的偏移量。2)比较转移指令(4条)注意:①以上指令结果影响程序状态字寄存器PSW的CY标志。②转移范围与SJMP指令相同。③ PCPC+3+rel中,第一个PC表示新的转移地址,第二个PC表示本指令所在地址。④在实际应用中,rel用标号代替,无需计算出具体的偏移量。例3.15假定累加器A=20H,在程序中有如下两条指令,请指出指令执行完后PC的值分别为多少。(1) CJNEA,#20H,NEXT ;假定本指令所在地址为1000H,偏移量为20H(2) CJNEA,#30H,NEXT1 ;假定本指令所在地址为1000H,偏移量为20H解:(1)在指令CJNEA,#20H,NEXT中,A=20H,则顺序执行程序,PC=1000H+3=1003H。(2)在指令CJNEA,#30H,NEXT1中,A≠30H,则指令转移到相应标号地址处执行,新地址的计算方法是:执行完本指令后,PC的值自动增3,然后再与偏移量相加。PC=1000H+3+20H=1023H。同时由于A<#30H,所以CY=1。注意:①DJNZ指令通常用于循环程序中控制循环次数。②转移范围与SJMP指令相同。③以上指令结果不影响程序状态字寄存器PSW。3)减1非零转移指令(2条)

3.调用和返回指令(5条)1)绝对调用指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②调用范围与AJMP指令相同。2)长调用指令(1条)注意:①该指令结果不影响程序状态字寄存器PSW。②调用范围与LJMP指令相同。3)返回指令(2条)注意:该指令结果不影响程序状态字寄存器PSW。注意:该指令结果不影响程序状态字寄存器PSW。4)空操作(1条)3.3.6位操作类指令位操作指令的操作数是“位”,其取值只能是0或1,故又称之为布尔操作指令。位操作指令的操作对象是片内RAM的位寻址区(即20H~2FH)和特殊功能寄存器SFR中的11个可位寻址的寄存器。片内RAM的20H~2FH共16个单元128个位,我们为这128个位的每个位均定义一个名称:00H~7FH,称为位地址,如表3.5所示。对于特殊功能寄存器SFR中可位寻址的寄存器的每个位,也有名称定义,如表3.6所示。表3.5片内RAM位寻址区的位地址分布表3.6SFR中的位地址分布对于位寻址,有以下四种不同的写法。第一种是直接地址写法,如MOVC,0D2H,其中,0D2H表示PSW中的OV位地址。第二种是点操作符写法,如MOVC,0D0H.2。第三种是位名称写法,即在指令格式中直接采用位定义名称,这种方式只适用于可以位寻址的SFR,如MOVC,OV。第四种是专用寄存器符号与点操作符表示法,如MOVC,PSW.0。位操作类指令分为以下五组:位传送指令(2条):MOV。位置位和位清0指令(4条):SETB、CLR。位运算指令(6条):ANL、ORL、CPL。位转移指令(3条):JB、JNB、JBC。判CY标志指令(2条):JC、JNC。1.位传送指令(2条)注意:位传送指令的操作数中必须有一个是进位位C,不能在其它两个位之间直接传送。进位位C也称为位累加器。2.位置位和位清0指令(4条)3.位运算指令(6条)注意:以上指令结果通常影响程序状态字寄存器PSW的CY标志。4.位转移指令(3条)注意:① JBC与JB指令的区别是:前者转移后把寻址位清0,后者只转移而不把寻址位清0。②以上指令结果不影响程序状态字寄存器PSW。

5.判CY标志指令(2条)注意:以上结果不影响程序状态字寄存器PSW。例3.16用位操作指令编程计算逻辑方程P1.7=ACC.0×(B.0+P2.1)+,其中“+”表示逻辑或,“×”表示逻辑与。解:程序段如下:

MOVC,B.0 ;B.0→CORLC,P2.1 ;C或P2.1→CANLC,ACC.0 ;C与ACC.0→C,即ACC.0×(B.0+P2.1)→CORLC,/P3.2 ;C或/P3.2,即ACC.0×(B.0+P2.1)+→CMOVP1.7,C ;C→P1.7

3.3.7常用伪指令1.定位伪指令ORG格式:[标号:]ORG地址表达式功能:规定程序块或数据块存放的起始位置。例如:ORG1000H ;表示下面的指令MOVA, ;#20H存放于1000H开始的单元 MOVA,#20H2.定义字节数据伪指令DB格式:[标号:]DB字节数据表功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。例如:ORG1000HTAB:DB2BH,0A0H,'A',2*4;表示从1000H单元开始的地方存放数据2BH,;0A0H,41H(字母A的ASCII码),08H

3.定义字数据伪指令DW格式:[标号:]DW字数据表功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。例如:  ORG1000HDATA:DW324AH,3CH;表示从1000H单元开始;的地方存放数据32H,;4AH,00H,3CH(3CH;以字的形式表示为;003CH)

4.定义空间伪指令DS格式:[标号:]DS表达式功能:从指定的地址开始,保留多少个存储单元作为备用的空间。例如:  ORG1000H BUF:DS50 TAB:DB22H;表示从1000H开始的地方预留;50(1000H~1031H)个存储字节;空间,22H存放在1032H单元

5.符号定义伪指令EQU或=格式:符号名EQU表达式或符号名=表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,并且必须遵循先定义后使用的原则,因此该语句通常放在源程序的开头部分。例如: LEN=10 SUMEQU21H MOVA,#LEN;执行指令后,累加器A中的值;为0AH

6.数据赋值伪指令DATA格式:符号名DATA表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据时可以放在程序末尾。例如: MOVA,#LEN

LENDATA10尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。7.数据地址赋值伪指令XDATA格式:符号名XDATA表达式功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,可用于双字节数据定义。例如: DELAYXDATA0356H LCALLDELAY ;执行指令后,程序转到;0356H单元执行8.汇编结束伪指令END格式:[标号:]END功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。本章小结程序由指令组成。一台计算机能够提供的所有指令的集合称为指令系统。指令有机器码指令和助记符指令两种形式。计算机能够直接执行的指令是机器码指令。寻找操作数地址的方式称为寻址方式。MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类:数据传送指令(29条)、算术运算指令(24条)、逻辑运算指令(24条)、控制转移指令(17条)和位操作指令(17条)。习题33.1单项选择题。(1)单片机在与外部I/O口进行数据传送时,将使用

指令。A. MOVX B. MOV C. MOVC D.视具体I/O口器件而定(2)在寄存器间接寻址方式中,Ri是指

。A. R0~R7 B. R0~R1 C.操作码 D.操作数地址(3)下列指令中,影响堆栈指针的指令是

。A. LJMPaddr16B. DJNZRn,relC. LCALLaddr16D. MOVXA,@Ri(4) MCS-51单片机有七种寻址方式,其中:MOVA,direct指令的源操作数属于

寻址方式。A.间接 B.变址 C.相对 D.直接(5)指令JZNEXT的作用是

。A.当CY标志为0时跳转到NEXT语句执行B.当累加器A内容不为全0时跳转到NEXT语句执行C.当累加器A内容为全0时跳转到NEXT语句执行D.当CY标志为1时跳转到NEXT语句执行(6)将外部数据存储单元的内容传送到累加器A中的指令是

。A.MOVXA,@A+DPTRB. MOVA,@R0C.MOVCA,@A+DPTRD. MOVXA,@DPTR(7)在指令MOV30H,#55H中,30H是

。A.指令的操作码 B.操作数 C.操作数的目的地址 D.机器码(8)在下列指令中,属判位转移的指令是

。A. AJMPaddr11 B. CJNEA,direct,relC. DJNZRn,rel D. JNCrel(9) 8031有4组工作寄存器区,将当前工作寄存器设置为第2组应使用的指令是

。A. SETBRS0和CLRRS1 B. SETBRS0和SETBRS1C. CLRRS0和CLRRS1 D. CLRRS0和SETBRS1(10) MCS-51单片机中,下一条将要执行的指令地址存放在

中。A. SP B. DPTR C. PCD. PSW(11)当执行DAA指令时,CPU将根据

的状态自动调整,使ACC的值为正确的BCD码。A. CY B. MOV20H,R4C. C

温馨提示

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

评论

0/150

提交评论