单片微机原理与应用 教学课件 素材包 第3章 51系列单片机的指令系统和程序设计方法_第1页
单片微机原理与应用 教学课件 素材包 第3章 51系列单片机的指令系统和程序设计方法_第2页
单片微机原理与应用 教学课件 素材包 第3章 51系列单片机的指令系统和程序设计方法_第3页
单片微机原理与应用 教学课件 素材包 第3章 51系列单片机的指令系统和程序设计方法_第4页
单片微机原理与应用 教学课件 素材包 第3章 51系列单片机的指令系统和程序设计方法_第5页
已阅读5页,还剩149页未读 继续免费阅读

下载本文档

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

文档简介

第3章51系列单片机的指令系统和程序设计方法(1)理解指令的寻址方式及相应的寻址空间。

(2)理解51系列单片机的111条基本指令的含义,熟练掌握其应用方法。

(3)了解机器语言、汇编语言和高级语言的特点、汇编语言程序设计步骤。

(4)掌握汇编语言的基本格式,熟练掌握汇编语言的程序设计思想和设计方法。

(5)理解子程序的特点,掌握子程序的设计方法和设计中应该注意的问题。

3.1指令系统概述

3.2寻址方式

3.3数据传送类指令

5.16位数据的传递指令(1条)

3.4算术运算类指令第3章51系列单片机的指令系统和程序设计方法(1)理解指第3章51系列单片机的指令系统和程序设计方法3.5逻辑运算类指令

3.6位操作类指令

3.7控制转移类指令

3.8汇编语言程序设计第3章51系列单片机的指令系统和程序设计方法3.5逻辑运3.1指令系统概述3.1.1指令分类

3.1.2指令格式

3.1.3指令中常用缩写符号的意义3.1指令系统概述3.1.1指令分类

3.1.2指令格3.1.1指令分类1.按指令功能可分为五类

2.按指令执行所需要的时间可分为三类

3.按指令所占的字节数可分为三类3.1.1指令分类1.按指令功能可分为五类

2.按指令执行1.按指令功能可分为五类1)数据传送类指令(29条):内部8位数据传送指令15条,内部16位数据传送指令1条,外部数据传送指令4条,交换、查表和堆栈操作指令9条。

2)算术传送类指令(24条):加法指令14条(包括BCD码调整指令1条),减法指令8条,乘/除法指令各1条。

3)逻辑运算类指令(24条):逻辑运算指令20条,循环移位指令4条。

4)位操作指令(12条):位传送指令2条,位置位、位清“0”和位取反指令6条,位运算指令4条。

5)控制转移类指令(22条):无条件转移指令4条,条件转移指令8条,调用和返回指令5条,位测试转移指令3条,判别CY标志转移指令2条。1.按指令功能可分为五类1)数据传送类指令(29条):内部82.按指令执行所需要的时间可分为三类1)单周期指令(64条)。

2)双周期指令(45条)。

3)四周期指令(2条)。2.按指令执行所需要的时间可分为三类1)单周期指令(64条)3.按指令所占的字节数可分为三类1)单字节指令(49条)。

2)双字节指令(46条)。

3)三字节指令(16条)。3.按指令所占的字节数可分为三类1)单字节指令(49条)。

3.1.2指令格式1.指令格式介绍

2.指令中数据的表示3.1.2指令格式1.指令格式介绍

2.指令中数据的表示1.指令格式介绍1)汇编语言语句由标号、操作码、操作数和注释四部分组成。

2)标号位于语句的开始,由1~8个ASCII字符组成,第一个字符必须是字母。

3)操作码是用英文缩写的指令功能助记符。

4)操作数在操作码之后,两者用空格分开。

5)注释在语句的最后,以分号“;”开始,是说明性的文字,与语句的具体功能无关,但是能增加程序的可阅读性,便于程序的调试与交流。1.指令格式介绍1)汇编语言语句由标号、操作码、操作数和注释2.指令中数据的表示1)十进制数以D结尾,也可以省略,如55D或55。

2)十六进制数以H结尾,如55H。

3)二进制数以B结尾,如00110011B。

4)八进制数以O或Q结尾,如55O或55Q。

5)字符串用“”括起来,如′M′表示字符M的ASCII码。2.指令中数据的表示1)十进制数以D结尾,也可以省略,如553.1.3指令中常用缩写符号的意义1)#data:8位立即数。

2)#data16:16位立即数。

3)Rn:工作寄存器,R0~R7,n=0~7。

4)Ri:工作寄存器,i=0或1。

5)@:间接地址符号。

6)direct:8位直接地址,可以是特殊功能寄存器(SFR)的地址或片内RAM单元地址。

7)addr11:11位目的地址。

8)addr16:16位目的地址。

9)rel:有符号的8位偏移地址,主要用于所有的条件转移指令和SJMP指令。

10)bit:位地址。

11)/:位操作数的前缀,表示对该位操作数取反,如/bit。3.1.3指令中常用缩写符号的意义1)#data:8位立即3.1.3指令中常用缩写符号的意义12):当前指令存放的地址。

13)(X):表示由X所指定的某寄存器或某单元中的内容。

14)((X)):表示由X间接寻址单元中的内容。

15)B:通用寄存器,常用于乘法MUL和除法DIV的指令。

16)C:进位标志位或者布尔处理器中的累加器。

17)←:表示指令的操作结果是将箭头右边的内容传送到左边。3.1.3指令中常用缩写符号的意义12):当前指令存放的地3.2寻址方式3.2.1立即寻址

3.2.2直接寻址

3.2.3寄存器寻址

3.2.4寄存器间接寻址

3.2.5变址寻址

3.2.6相对寻址

3.2.7位寻址3.2寻址方式3.2.1立即寻址

3.2.2直接寻址

3.2.1立即寻址立即寻址是指指令中直接给出操作数的寻址方式。立即数用前面加有#号的8位或16位数来表示。立即数是指令代码的一部分,只能作源操作数。这种寻址方式主要用于对特殊功能寄存器和指定的存储单元赋初值。3.2.1立即寻址立即寻址是指指令中直接给出操作数的寻址方3.2.2直接寻址1)特殊功能寄存器(SFR):直接寻址是唯一的访问形式。

2)片内RAM低128B单元(地址范围00H~7FH)。

3)221个位地址空间。3.2.2直接寻址1)特殊功能寄存器(SFR):直接寻址3.2.3寄存器寻址寄存器寻址是指操作数存放于寄存器中(Rn、A、B、DPTR、CY)的寻址方式。例如:MOV

A,R7;(A)←(R7)其功能是把寄存器R7内的操作数传送到累加器A中。由于操作数在R7中,因此在指令中指定了R7,就能从中取得操作数。3.2.3寄存器寻址寄存器寻址是指操作数存放于寄存器中(R3.2.4寄存器间接寻址图3-1寄存器间接寻址示意图3.2.4寄存器间接寻址图3-1寄存器间接寻址示意图3.2.5变址寻址图3-2变址寻址示意图3.2.5变址寻址图3-2变址寻址示意图3.2.6相对寻址1)当前PC值是指相对转移指令所在地址(一般称为源地址)加上转移指令字节数,即当前PC值=源地址+转移指令字节数。

2)偏移量rel是有符号的单字节数,以补码表示,其相对值的范围是-128~+127,负数表示从当前地址向地址减小的方向转移,正数表示从当前地址向地址增大的方向转移。3.2.6相对寻址1)当前PC值是指相对转移指令所在地址(图3-3相对寻址示意图

a)指令JZ08H寻址示意图b)指令JZ0F4H寻址示意图图3-3相对寻址示意图

a)指令JZ08H寻址示意图b3.2.7位寻址1)直接使用位地址。

2)位名称表示方法。

3)单元地址加位数的表示方法。

4)专用寄存器符号加位数的表示方法。3.2.7位寻址1)直接使用位地址。

2)位名称表示方法。表3-17种寻址方式及寻址空间序号寻址方式寻址空间范围1寄存器寻址R0~R7,A,B,CY,DPTR寄存器2立即寻址程序存储器3寄存器间址片内RAM的00H~0FFH,片外RAM4直接寻址片内RAM的00H~7FH,SFR5变址寻址程序存储器6相对寻址程序存储器7位寻址片内RAM的20H~2FH的128位,SFR中的93位表3-17种寻址方式及寻址空间序号寻址方式寻址空间范围13.3数据传送类指令3.3.1片内RAM数据传送类指令3.3数据传送类指令3.3.1片内RAM数据传送类指令3.3.1片内RAM数据传送类指令1.以累加器为目的操作数的指令(4条)

2.以寄存器Rn为目的操作数的指令(3条)

3.以直接地址为目的操作数的指令(5条)

4.以间接地址为目的操作数的指令(3条)3.3.1片内RAM数据传送类指令1.以累加器为目的操作数3.3.1片内RAM数据传送类指令图3-4片内RAM间数据传递关系3.3.1片内RAM数据传送类指令图3-4片内RAM间数1.以累加器为目的操作数的指令(4条)MOV

A,Rn;(A)←(Rn),(n=0~7)MOV

A,direct;(A)←(direct)MOV

A,@Ri;(A)←((Ri))(i=0、1)MOV

A,#data;(A)←data这组指令的目的操作数都是累加器A,源操作数的寻址方式采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。1.以累加器为目的操作数的指令(4条)MOVA,Rn2.以寄存器Rn为目的操作数的指令(3条)MOV

Rn,A;(Rn)←(A),(n=0~7)MOV

Rn,direct;(Rn)←(direct),(n=0~7)MOV

Rn,#data;(Rn)←data,(n=0~7)这组指令都是以工作寄存器为目的操作数,源操作数的寻址方式采用寄存器寻址、直接寻址和立即寻址。2.以寄存器Rn为目的操作数的指令(3条)MOVRn,A;3.以直接地址为目的操作数的指令(5条)MOV

direct,A;(direct)←(A)MOV

direct,Rn;(direct)←(Rn),(n=0~7)MOV

directl,direct2;(direct1)←(direct2)MOV

direct,@Ri;(direct)←((Ri)),(i=0、1)MOV

direct,#data;(direct)←data这组指令的目的操作数都是直接寻址单元,源操作数采用寄存器寻址、直接寻址、寄存器间接寻址和立即寻址。3.以直接地址为目的操作数的指令(5条)MOVdirect4.以间接地址为目的操作数的指令(3条)MOV

@Ri,A;((Ri))←(A)MOV

@Ri,direct;((Ri))←(direct)MOV

@Ri,#data;((Ri))←data这组指令的目的操作数都是间接寻址单元,源操作数可采用寄存器寻址、直接寻址和立即寻址方式。4.以间接地址为目的操作数的指令(3条)MOV@Ri,A5.16位数据的传递指令(1条)(1)MOVA,R0和MOVA,@R0

(2)MOVA,#40H和MOVA,40H

3.3.2片外RAM数据传送类指令

3.3.3程序存储器向累加器A传送数据类指令

3.3.4数据交换类指令

3.3.5堆栈操作类指令5.16位数据的传递指令(1条)(1)MOVA,R0和(2)MOVA,#40H和MOVA,40H解:它们的执行结果为

解:运行结果为

解:上述指令均是错误的。

解法一:MOV55H,15H

解法二:MOVR6,15H

解法三:MOVR1,#15H

解法四:MOVA,15H

解:30H和40H单元中都装有数据,要想把其中的内容相交换必须寻求第三个存储单元对其中的一个数进行缓冲,这个存储单元若选为累加器A,则相应程序如下:(2)MOVA,#40H和MOVA,40H解:它3.3.2片外RAM数据传送类指令1)要访问片外RAM,必须知道片外RAM单元的地址,在后两条指令中,地址是被直接放在DPTR中,可寻址片外RAM的64KB空间。

2)使用访问片外RAM数据传送指令时,应当首先将要读或写的地址送入DPTR或Ri中,然后再用读或者写命令。

3)也可以由P2与R0或P2与R1组成16位地址指针,寻址片外RAM的64KB空间。3.3.2片外RAM数据传送类指令1)要访问片外RAM,必3.3.3程序存储器向累加器A传送数据类指令1)MOVCA,@A+DPTR:这条指令的执行结果只与指针DPTR及累加器A的内容有关,与该指令存放的地址无关。

2)MOVCA,@A+PC:这条指令的优点是不改变SFR和PC的状态,只要根据A的内容就可以取出表格中的常数。3.3.3程序存储器向累加器A传送数据类指令1)MOVC3.3.3程序存储器向累加器A传送数据类指令图3-5查表指令3.3.3程序存储器向累加器A传送数据类指令图3-5查表图3-60~9二次方值表图3-60~9二次方值表3.3.4数据交换类指令1.字节交换指令(Exchange,XCH

2.半字节交换指令(1条)

3.累加器A高低半字节交换指令(1条)3.3.4数据交换类指令1.字节交换指令(Exchange1.字节交换指令(Exchange,XCHXCH

A,Rn;(A)←→(Rn)XCH

A,@Ri;(A)←→((Ri))XCH

A,direct;(A)←→(direct)指令功能:将累加器A的内容与源操作数(Rn、direct或@Ri)所指定单元的内容相互交换。1.字节交换指令(Exchange,XCHXCHA,Rn2.半字节交换指令(1条)XCHDA,@Ri;(A)3~0←→((Ri))3~0指令功能:将累加器A中的内容的低4位与Ri所指的片内RAM单元中的低4位互换,但它们的高4位均不变。例如,设(A)=0ABH,(R0)=30H,(30H)=12H,执行指令“XCHDA,@R0”后,(A)=0A2H,(30H)=1BH。2.半字节交换指令(1条)XCHDA,@Ri;(A)3.累加器A高低半字节交换指令(1条)解:本题是一个字节交换问题,故可以采用3条字节交换指令中的任何一条。若采用第三条字节交换指令,则相应程序为

解:0~9的ASCII码为30H~39H。进行比较后发现,两者之间仅相差30H,故可以利用半字节指令把0~9的数装配成相应的ASCII码。程序如下:3.累加器A高低半字节交换指令(1条)解:本题是一个字节交换3.3.5堆栈操作类指令1)PUSH称为压栈指令,将指定的直接寻址单元的内容压入堆栈。

2)POP称为出栈指令,它是将当前堆栈指针SP所指示的单元内容弹出到指定的片内RAM单元中,然后再将SP减1。3.3.5堆栈操作类指令1)PUSH称为压栈指令,将指定的图3-7堆栈指令执行过程

a)指令“PUSH40H”操作示意图b)指令“POP30H”操作示意图图3-7堆栈指令执行过程

a)指令“PUSH40H”操3.4算术运算类指令3.4.1加法指令

3.4.2减法指令

3.4.3乘法指令

3.4.4除法指令3.4算术运算类指令3.4.1加法指令

3.4.2减法3.4.1加法指令1.不带进位位的加法指令(Addition,ADD

100110100

2.带进位加法指令(Addition

3.增量指令(Increase,INC

4.十进制调整指令(Decimal3.4.1加法指令1.不带进位位的加法指令(Additio1.不带进位位的加法指令(Addition,ADD解:100001011.不带进位位的加法指令(Addition,ADD解:2.带进位加法指令(Addition解:参考程序如下:2.带进位加法指令(Addition解:参考程序如下:3.增量指令(Increase,INC解:3.增量指令(Increase,INC解:4.十进制调整指令(Decimal1)这条指令必须紧跟在ADD或ADDC指令之后,对加法指令的结果进行调整,且这里的ADD或ADDC的操作是对压缩的BCD码表示的数进行运算。

2)DA指令不影响溢出标志。4.十进制调整指令(Decimal1)这条指令必须紧跟在AD1W4.TIF1W4.TIF3.4.2减法指令1.带借位减法指令(Subtract

2.减1指令(Decrease,DEC3.4.2减法指令1.带借位减法指令(Subtract

21.带借位减法指令(Subtract图3-8例题3-19程序

流程图1.带借位减法指令(Subtract图3-8例题3-19程2.减1指令(Decrease,DEC解:首先要考虑到“DAA”指令只能对加法调整,故必须先化BCD减法为加法,关键是求两位十进制减数的补码(9AH-减数),如图3-8所示。2.减1指令(Decrease,DEC解:首先要考虑到“DA1W5.TIF1W5.TIF1W6.TIF1W6.TIF3.4.3乘法指令1)若乘积大于255,(OV)=1;否则(OV)=0。

2)CY总是为“0”。

3)P受累加器A中的内容影响。3.4.3乘法指令1)若乘积大于255,(OV)=1;否则图3-9例题3-20

程序流程图图3-9例题3-20

程序流程图1W7.TIF1W7.TIF3.4.4除法指令1)CY、OV,清“0”。

2)若(B)=0,(OV)=1。

3)P受累加器A中的内容影响。

1)将要转换的二进制数除以100,商即为百位数,余数再除以10,商和余数分别为十位和个位数。

2)通过SWAP、ADD指令组成一个压缩的BCD数,其中十位数放在A7~4,个位数放在A3~0。

1)乘法指令和除法指令需要4个机器周期,是指令系统中执行时间最长的指令。

2)在进行8位数乘除法运算时,必须将相应的被乘数和乘数、被除数和除数分别放入累加器A和寄存器B中,才能进行计算。

3)在51单片机中,乘法和除法指令仅适用于8位数乘法和除法运算。3.4.4除法指令1)CY、OV,清“0”。

2)若(B3.4.4除法指令图3-10例3-21流程图3.4.4除法指令图3-10例3-21流程图3.5逻辑运算类指令3.5.1累加器A的逻辑运算指令

3.5.2两个操作数的逻辑操作运算指令3.5逻辑运算类指令3.5.1累加器A的逻辑运算指令

33.5.1累加器A的逻辑运算指令1.累加器清“0”2.累加器按位取反指令

3.循环移位指令(4条)3.5.1累加器A的逻辑运算指令1.累加器清“0”1W8.TIF1W10.TIF1W8.TIF1W10.TIF3.循环移位指令(4条)1W11.TIF1W9.TIF3.循环移位指令(4条)1W11.TIF1W9.TIF3.5.2两个操作数的逻辑操作运算指令1.逻辑“与”操作指令(And

2.逻辑“或”操作指令(Or

3.逻辑“异或”指令(6条)3.5.2两个操作数的逻辑操作运算指令1.逻辑“与”操作指1.逻辑“与”操作指令

ANL

A,Rn;(A)←(A)∧(Rn)ANL

A,direct;(A)←(A)∧(direct)ANL

A,@Ri;(A)←(A)∧((Ri))ANL

A,#data;(A)←(A)∧dataANL

direct,A;(direct)←(direct)∧(A)ANL

direct,#data;(direct)←(direct)∧data指令功能:将两个操作数的内容按位进行逻辑“与”操作,并将结果送回目的操作数的单元中。利用“与”操作可屏蔽一些位或影响标志位。例如,要将一个字节中的高4位清“0”,可用0FH进行“与”操作。1.逻辑“与”操作指令

ANLA,Rn;(A2.逻辑“或”操作指令ORL

A,Rn;(A)←(A)∨(Rn)ORL

A,direct;(A)←(A)∨(direct)ORL

A,@Ri;(A)←(A)∨((Ri))ORL

A,#data;(A)←(A)∨dataORL

direct,A;(direct)←(direct)∨(A)ORL

direct,#data;(direct)←(direct)∨data指令功能:将两个操作数的内容按位进行逻辑“或”操作,并将结果送回目的操作数的单元中。利用“或”操作可进行数位的组合。例如,要把数字转换成ASCII码,可用30H进行或操作。2.逻辑“或”操作指令ORLA,Rn;(A)3.逻辑“异或”指令(6条)解:完成本题有多种求解方法,现介绍其中两种。

(1)利用MOVX

(2)利用MOVX3.逻辑“异或”指令(6条)解:完成本题有多种求解方法,现介(1)利用MOVX1W12.TIF(1)利用MOVX1W12.TIF(2)利用MOVX1)选用工作寄存器组中0区为工作区。

2)利用移位指令实现累加器A的内容乘6。

1)ANLPSW,#11100111B;PSW的D4、D3位为00

2)CLRC(2)利用MOVX1)选用工作寄存器组中0区为工作区。

2)3.6位操作类指令3.6.1位变量传送指令

3.6.2位变量修改指令

3.6.3位变量逻辑操作指令3.6位操作类指令3.6.1位变量传送指令

3.6.23.6.1位变量传送指令位变量传送指令有互逆的2条,可实现进位位C与某直接寻址位bit间内容的传送。MOV

C,bit;(CY)←(bit)MOV

bit,C;(bit)←(CY)指令功能:把源操作数的布尔变量送到目的操作数指定的位地址单元,其中一个操作数必须为进位标志CY,另一个操作数可以是任何可直接寻址位。3.6.1位变量传送指令位变量传送指令有互逆的2条,可实现3.6.2位变量修改指令位变量修改指令共有6条,分别是对位进行清“0”、置“1”和取反指令,不影响其他标志。CLR

C;(CY)←0CLR

bit;(bit)←0CPL

C;(CY)←(/CY)CPL

bit;(bit)←(/bit)SETB

C;(CY)←1SETB

bit;(bit)←13.6.2位变量修改指令位变量修改指令共有6条,分别是对位3.6.3位变量逻辑操作指令位变量逻辑操作指令包括位变量逻辑“与”和逻辑“或”,共有4条指令。ANL

C,bit;(CY)←(CY)∧(bit)ANL

C,/bit;(CY)←(CY)∧(/bit)ORL

C,bit;(CY)←(CY)∨(bit)ORL

C,/bit;(CY)←(CY)∨(/bit)【注意】位变量逻辑运算指令中无逻辑“异或”(XRL)。3.6.3位变量逻辑操作指令位变量逻辑操作指令包括位变量逻3.6.3位变量逻辑操作指令图3-11例3-29硬件逻辑电路3.6.3位变量逻辑操作指令图3-11例3-29硬件逻辑3.7控制转移类指令3.7.1无条件转移指令

3.7.2条件转移指令

3.7.3调用与返回指令3.7控制转移类指令3.7.1无条件转移指令

3.7.23.7.1无条件转移指令1.绝对转移指令(Absolute

2.相对转移指令(Short

3.长转移指令(Long

4.间接转移指令(散转指令)3.7.1无条件转移指令1.绝对转移指令(Absolute1.绝对转移指令(Absolute1W13.TIF1.绝对转移指令(Absolute1W13.TIF1.绝对转移指令(Absolute1W14.TIF1.绝对转移指令(Absolute1W14.TIF2.相对转移指令

SJMP

rel;(PC)←(PC)+2+rel转移范围为当前PC值的-128~+127范围内,共256个单元。若偏移量rel取值为0FEH(-2的补码),则目标地址等于源地址,相当于动态停机,程序终止在这条指令上,停机指令在调试程序时很有用。51系列单片机没有专用的停机指令,若要求动态停机可用SJMP指令来实现:HERE:SJMP

HERE;动态停机2.相对转移指令

SJMPrel;(PC)←(PC)+23.长转移指令

LJMP

addr16;(PC)←addr16执行该指令时,将16位目标地址addr16装入PC,程序无条件转向指定的目标地址。转移指令的目标地址可在64KB程序存储器地址空间的任何地方,不影响任何标志。4.间接转移指令(散转指令)JMP

@A+DPTR;(PC)←(A)+(DPTR)3.长转移指令

LJMPaddr16;(PC)←addr4.间接转移指令(散转指令)JMP

@A+DPTR;(PC)←(A)+(DPTR)指令功能:把累加器A中的8位无符号数与数据指针DPTR的16位数相加,其和作为下一条指令的地址送入PC,不影响标志位。间接转移指令采用变址方式实现无条件转移,其特点是转移地址可以在程序运行中加以改变。例如,把DPTR作为基地址时,根据A的不同值就可以实现多分支转移,故一条指令可完成多条条件判断转移指令功能。这种功能称为散转功能,所以间接指令又称为散转指令。4.间接转移指令(散转指令)JMP@A+DPTR;(PC3.7.2条件转移指令1.进位/无进位转移指令

2.累加器内容为零/非零转移指令3.比较不相等转移指令4.减1不为零转移指令5.位测试指令3.7.2条件转移指令1.进位/无进位转移指令

2.累加器1.进位/无进位转移指令JC

rel;(CY)=1,则(PC)←(PC)+2+rel

;(CY)=0,则(PC)←(PC)+2JNC

rel;(CY)=0,则(PC)←(PC)+2+rel

;(CY)=1,则(PC)←(PC)+2指令功能:第一条指令执行时,先判断CY中的值。若CY=1,则程序发生转移;若(CY)=0,则程序不转移,继续执行原程序。第二条指令执行时的情况与第一条指令恰好相反:若(CY)=0,则程序发生转移;若(CY)=1,则程序不转移,继续执行原程序。1.进位/无进位转移指令JCrel;(CY)=1,则2.累加器内容为零/非零转移指令图3-12JZ和JNZ指令执行示意图

a)JZrel指令b)JNZrel指令2.累加器内容为零/非零转移指令图3-12JZ和JNZ指令3.比较不相等转移指令1)这4条指令都是三字节指令,指令执行时PC3次加1,然后再加地址偏移量rel。

2)指令执行过程中的比较操作实际上是减法操作,但不保存两数之差,产生CY标志。

3)若参加比较的两个操作数X和Y是无符号数,则可以直接根据指令执行后产生的CY来判断两个操作数的大小。

4)若参加比较的两个操作数X和Y是有符号数补码。3.比较不相等转移指令1)这4条指令都是三字节指令,指令执图3-13带符号数的比较方法图3-13带符号数的比较方法4.减1不为零转移指令DJNZ

Rn,rel;两字节指令DJNZ

direct,rel;三字节指令,direct可以是片内RAM任意字节地址指令功能:把源操作数减1,结果回送到源操作数中去,如果结果不为0则转移。【注意】这两条指令均可以构成循环结构程序。4.减1不为零转移指令DJNZRn,rel;两字节指令5.位测试指令JB

bit,rel;(bit)=1,则(PC)←(PC)+3+rel

;(bit)=0,则(PC)←(PC)+3JNB

bit,rel;(bit)=0,则(PC)←(PC)+3+rel

;(bit)=1,则(PC)←(PC)+3JBC

bit,rel;(bit)=1,则(PC)←(PC)+3+rel且(bit)←0

;(bit)=0,则(PC)←(PC)+3指令功能:当某一特定条件满足时,执行转移操作指令(相当于一条相对转移指令);条件不满足时,顺序执行下面的一条指令。5.位测试指令JBbit,rel;(解:程序如下:图3-14按键连接图及流程图解:程序如下:图3-14按键连接图及流程图解:程序如下。图3-15主程序与子程序结构

a)二次调用b)二级子程序嵌套解:程序如下。图3-15主程序与子程序结构

a)二次调用3.7.3调用与返回指令1.绝对调用指令(Absolute

2.长调用指令(Long

3.返回指令(2条)

4.空操作指令(1条)3.7.3调用与返回指令1.绝对调用指令(Absolute3.7.3调用与返回指令图3-16二级子程序嵌套及断点地址存放

a)二级子程序嵌套示意图b)转入子程序2时的堆栈3.7.3调用与返回指令图3-16二级子程序嵌套及断点地1.绝对调用指令(Absolute1)(PC)+2→(PC),并压入堆栈,先压入PC低8位,后压入PC高8位。

2)PC15~11a10~0→PC,获得子程序起始地址。1.绝对调用指令(Absolute1)(PC)+2→(P图3-17例3-36图图3-17例3-36图2.长调用指令(Long1)(PC)+3→(PC),并压入堆栈,先压入PC的低8位,后压入PC的高8位。

2)addr16→PC,获得子程序起始地址。

3)可调用64KB地址范围内的任意子程序。

1)转移指令不保存返回地址,而子程序调用指令在转向目的地址的同时,必须保留返回地址(也称为断点地址),以便执行返回指令时回到主程序断点的位置。

2)堆栈是片内RAM中一片存储区,采用先进后出的原则存取数据,调用时保护断点的工作由调用指令完成,调用后恢复断点的工作由返回指令完成。2.长调用指令(Long1)(PC)+3→(PC),并压3.返回指令(2条)(1)子程序的返回

(2)中断返回指令3.返回指令(2条)(1)子程序的返回

(2)中断返回指(1)子程序的返回RET;PC15~PC8←(SP),(SP)←(SP)-1

;PC7~PC0←(SP),(SP)←(SP)-1指令功能:RET(Return)指令从堆栈中取出16位断点地址送回PC,使子程序返回主程序。(1)子程序的返回RET;PC15~PC8←(SP),(2)中断返回指令RETI;PC15~PC8←(SP),(SP)←(SP)-1

;PC7~PC0←(SP),(SP)←(SP)-1指令功能:RETI(ReturnforInterrupt)将堆栈顶部2字节的内容送到PC中,该指令用于中断服务程序的末尾。与RET指令不同之处:RETI指令还具有清除中断优先级触发器状态、恢复中断逻辑等功能。(2)中断返回指令RETI;PC15~PC8←(SP),((2)中断返回指令图3-18红绿灯和P1口连接图(2)中断返回指令图3-18红绿灯和P1口连接图4.空操作指令(1条)1)该指令不执行任何操作,仅仅将PC加1,使程序继续向下执行。

2)该指令为单周期指令,所以在时间上占用一个机器周期,常用于程序的等待或时间的延迟。4.空操作指令(1条)1)该指令不执行任何操作,仅仅将PC3.8汇编语言程序设计3.8.1汇编语言程序设计概述

3.8.2常用伪指令

3.8.3顺序结构程序设计

3.8.4分支结构程序设计

3.8.5循环结构程序设计

3.8.6子程序设计

3.8.7综合编程举例3.8汇编语言程序设计3.8.1汇编语言程序设计概述

33.8.1汇编语言程序设计概述1.程序设计的三种语言

2.汇编语言程序设计思路3.8.1汇编语言程序设计概述1.程序设计的三种语言

2.1.程序设计的三种语言(1)机器语言

(2)汇编语言

(3)高级语言1.程序设计的三种语言(1)机器语言

(2)汇编语言

((1)机器语言在计算机中,用二进制代码表示的指令、数字和符号简称为机器语言。直接用机器语言编写的程序称为机器语言程序。但是用机器语言编制的程序不易看懂,难于编写、难于查错和难于交流,容易出错。(1)机器语言在计算机中,用二进制代码表示的指令、数字和符(2)汇编语言汇编语言是一种面向机器的程序设计语言,它用英文字符来代替对应的机器语言。例如,用ADD代替机器语言中的加法运算,这些英文字符被称为助记符。(2)汇编语言汇编语言是一种面向机器的程序设计语言,它用英(3)高级语言计算机高级语言是一种面向算法、过程和对象的程序设计语言,它采用更接近人们习惯的自然语言和数学语言描述算法、过程和对象,如BASIC、C、Java等都是常用的高级语言。(3)高级语言计算机高级语言是一种面向算法、过程和对象的程2.汇编语言程序设计思路(1)分析问题,确定算法

(2)画程序流程图

(3)编写源程序

(4)汇编和调试2.汇编语言程序设计思路(1)分析问题,确定算法

(2)(1)分析问题,确定算法先对所需解决的问题进行分析,明确目的和任务,了解现有条件和目标要求后再确定解决该问题的方法和步骤,即通常所说的算法。对于一个问题,一般有多种不同的解决方案,通过比较从中挑选最优方案。(1)分析问题,确定算法先对所需解决的问题进行分析,明确目(2)画程序流程图把算法用流程图描述出来,即用流程图中的各种图形、符号、流向线等来描述程序设计的过程,它可以清晰表达程序的设计思路。起止框:开始和结束框,在程序的开始和结束时使用。判断框:进行条件判断,以决定程序的流向。处理框:表示各种处理和运算。流向线:表示程序执行的流向。连接点:圈中标注相同数字或符号的,表示连接在一起。(2)画程序流程图把算法用流程图描述出来,即用流程图中的(3)编写源程序根据流程图中各部分的功能,选取合适的指令和结构编写出具体程序。(3)编写源程序根据流程图中各部分的功能,选取合适的指令和(4)汇编和调试对已编写好的程序,先进行汇编。在汇编过程中,若还有语法错误,需要对源程序进行修改。汇编工作完成后,上机调试运行。先输入给定的数据,运行程序,检查运行结果是否正确,若发现错误,通过分析,再对源程序进行修改。(4)汇编和调试对已编写好的程序,先进行汇编。在汇编过程中3.8.2常用伪指令1.汇编起始地址伪指令

2.汇编结束伪指令

3.定义字节数据伪指令

4.定义字数据伪指令

5.赋值伪指令

6.数据地址赋值伪指令

7.位地址符号定义伪指令3.8.2常用伪指令1.汇编起始地址伪指令

2.汇编结束伪1.汇编起始地址伪指令对已编写好的程序,先进行汇编。在汇编过程中,若还有语法错误,需要对源程序进行修改。汇编工作完成后,上机调试运行。先输入给定的数据,运行程序,检查运行结果是否正确,若发现错误,通过分析,再对源程序进行修改。1.汇编起始地址伪指令对已编写好的程序,先进行汇编。在汇编过2.汇编结束伪指令格式:END指令功能:END是汇编源程序的结束标志,在整个源程序中只能有一条END命令,且位于程序的最后。如果END命令出现在中间,则其后的源程序汇编时将不予处理。2.汇编结束伪指令格式:3.定义字节数据伪指令格式:[标号:]DB

8位字数据表指令功能:DB(DefinitionByte)命令用于定义从指定的地址开始,在程序存储器的连续单元中定义字数据。常用于存放数据表格。说明:字节数据可以是一字节常数或字符,或用逗号分开的字符串,或用引号括起来的字符串。3.定义字节数据伪指令格式:4.定义字数据伪指令格式:[标号:]DW

16位字数据表指令功能:DW(DefinitionWord)命令用于定义从指定地址开始,在程序存储器的连续单元中定义16位的字数据。说明:存放时,数据的高8位在前(低地址),低8位在后(高地址)。4.定义字数据伪指令格式:5.赋值伪指令格式:字符名称EQU赋值项指令功能:EQU(Equate)用于给字符名称赋值。赋值后,其符号值在整个程序中有效。说明:赋值项可以是常数、地址、标号或表达式。其值为8位或16位二进制数。赋值以后的字符名称既可以作立即数使用,也可以作地址使用。必须先定义后使用,放在程序开头。5.赋值伪指令格式:6.数据地址赋值伪指令1)EQU指令可以把一个汇编符号赋给一个字符名称,而DATA指令不能。

2)EQU指令应先定义后使用,而DATA指令可以先使用后定义。6.数据地址赋值伪指令1)EQU指令可以把一个汇编符号赋给7.位地址符号定义伪指令格式:字符名称BIT位地址指令功能:用于给字符名称赋以位地址。说明:位地址可以是绝对地址,也可以是符号地址(即位符号名称)。例如:KEY0

BIT

P1.0表示把P1.0的位地址赋给变量KEY0,在其后的编程过程中,KEY0就可以作为位地址(P1.0)使用。7.位地址符号定义伪指令格式:3.8.3顺序结构程序设计解:两位压缩BCD码转换成二进制数的算法为:(a1a0)BCD=10×a1+a0,程序流程图如图3-19所示。3.8.3顺序结构程序设计解:两位压缩BCD码转换成二进制3.8.3顺序结构程序设计图3-19例3-38流程图3.8.3顺序结构程序设计图3-19例3-38流程图3.8.4分支结构程序设计1)建立测试条件。

2)选用合适的条件转移指令。

3)在转移的目的地址处设定标号。

1.单分支程序

2.多分支程序3.8.4分支结构程序设计1)建立测试条件。

2)选用3.8.4分支结构程序设计图3-20分支结构图3.8.4分支结构程序设计图3-20分支结构图图3-21分支程序结构图

a)单分支结构图b)双分支结构图c)多支结构图图3-21分支程序结构图

a)单分支结构图b)双分支结构1.单分支程序单分支程序是通过条件转移指令实现的,即根据条件对程序的执行结果进行判断,条件满足则进行程序转移,条件不满足则程序顺序执行。在51系列单片机指令系统中,可利用JZ、JNZ、CJNE、DJNZ、JC、JNC、JB、JNB、JBC等指令,完成为0、为1、为正、为负以及相等、不相等各种条件判断。1.单分支程序单分支程序是通过条件转移指令实现的,即根据条件解:根据题意,程序流程如图3-22所示。图3-22例3-39流程图解:根据题意,程序流程如图3-22所示。图3-22例3-32.多分支程序1)使用多条CJNE指令,通过逐次比较,实现多分支程序转移。

2)使用查地址表方法实现多分支程序转移。2.多分支程序1)使用多条CJNE指令,通过逐次比较,实现图3-23例题3-41程序流程图图3-23例题3-41程序流程图3.8.5循环结构程序设计1)循环初始化。

2)循环体。

3)循环控制。

4)循环结束。

1.单重循环程序

2.多重循环程序3.8.5循环结构程序设计1)循环初始化。

2)循环体图3-24循环程序结构

a)先处理后控制b)先控制后处理图3-24循环程序结构

a)先处理后控制b)先控制后处理图3-25例3-42流程图图3-25例3-42流程图图3-26例3-43流程图图3-26例3-43流程图图3-27例3-44图

a)硬件连线图b)程序流程图图3-27例3-44图

a)硬件连线图b)程序流程图3.8.6子程序设计1.子程序的调用与返回

2.保存与恢复寄存器内容

3.子程序的参数传递

4.子程序的嵌套

5.典型子程序设计

0123456789ABCDEF3.8.6子程序设计1.子程序的调用与返回

2.保存与恢复1.子程序的调用与返回(1)子程序的调用

(2)子程序的返回1.子程序的调用与返回(1)子程序的调用

(2)子程序的2.保存与恢复寄存器内容(1)保护现场

温馨提示

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

评论

0/150

提交评论