91
本本本本本本 本本本本本本本本 本本 本本本本本本本本本 本本本本本本本本本 7 本本本本本 本本本本本本本本本本本本本本 本本本本本本本本本本本本本 本 2 本 本本本本本本本

本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

  • Upload
    vondra

  • View
    316

  • Download
    17

Embed Size (px)

DESCRIPTION

第 2 章 单片机的指令系统. 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务. 2.1 指令系统概述与寻址方式. 什么是指令?. 2.1.1 指令系统概述. 1 .指令 单片机是靠软件和硬件结合起来完成控制功能的,软件的基础就是指令和指令系统。 指令是计算机设计人员预先设计好的用以完成某种操作的命令。 例如用计算机指令来完成 10+20 的加法运算,用机器代码表示如下: - PowerPoint PPT Presentation

Citation preview

Page 1: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

本章学习目标 :了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

第 2 章 单片机的指令系统

Page 2: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.1.1 指令系统概述

2.1 指令系统概述与寻址方式

1 .指令 单片机是靠软件和硬件结合起来完成控制功能的,软件的基础就是指令和指令系统。 指令是计算机设计人员预先设计好的用以完成某种操作的命令。 例如用计算机指令来完成 10+20 的加法运算,用机器代码表示如下: 01110100 00001010 ;把 10 送累加器 A 中 00100100 00010100 ; A 加 20 ,结果存 A 中

什么是指令?

机器语言指令

Page 3: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

用二进制编码表示的,能够被计算机直接识别和执行的语言称为机器语言。它不便于记忆、查错和修改。 用助记符、符号和数字来表示指令的程序语言,称为汇编语言。它与机器语言指令一一对应,便于理解和记忆。上面两条指令用汇编语言可表示为: MOV A , #10

ADD A , #20

查找附录 A ,可以得到这两条指令的十六进制机器代码如下: 74H 0AH

24H 14H

什么是机器语言?

Page 4: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

机器语言是计算机唯一能够识别和执行的语言,因而我们编写的汇编语言程序必须通过翻译将其转换为机器语言才能被计算机执行,这一翻译过程称为汇编。 汇编语言是一种面向机器的语言,它不能在不同类型的计算机上互相移植; 高级语言是独立于机器的,即用高级语言编写的程序可以方便地移植到不同的单片机上。针对单片机的主要有 C ( C51 )语言和 PLM 语言, 本教材我们只学习汇编语言。因汇编语言编写程序时是面向机器的,结合单片机的硬件资源来学习汇编语言,对初学者来说是最合适不过的了。下面我们给出典型的汇编语言指令的书写格式:

Page 5: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

[ 标号: ] 操作码 [ 操作数 1 ,操作数 2 ,操作数 3][ ;注释 ] NEXT : MOV A , R0 ; A← ( R0 )

合法字符举例: LOOP , NEXT_1 , START 非法字符举例: 2SUM , S+L , ADD , DB

方括号内的字段可以省略

标号是一个名字,用来标明指令的地址,由 1 ~ 6 个字符组成,首字符必须是字母,后面可跟数字和字母字符,也可以

是下划线,但系统保留字不能作标号,如操作码等。

MOV 是操作码,它表示指令的性质和功能,此处其功能是将 R0 中的内容送到累加器 A 中,

A 是数据传送的目的地,称为目的操作数

R0 是数据的来源,称为源操作数

Page 6: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2 .指令系统 一台计算机的 CPU 所能执行的全部指令的集合称为这个 CPU 的指令系统。指令系统是开发和生产厂商定义的,如要使用其单片机,用户就必须了解和遵循这些指令标准,要掌握某种(类)单片机,指令系统的学习是必须的。 80C51共有 111 条指令: 其指令字节少,单字节指令 49条,双字节指令 45 条,三字节指令 17条; 指令执行时间短,单机器周期指令 64条,双机器周期指令 45 条, 4机器周期指令 2 条, 该指令系统还有极为丰富的位操作指令,充分体现了单片机面向控制的特点。

Page 7: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

Rn 当前选中的工作寄存器组区的 8个寄存器 R0~R7( n=0~7)之一Ri 当前选中的工作寄存器组区中的寄存器 R0或 R1( i=0, 1)direct 8位片内 RAM单元的直接地址。包括特殊功能寄存器地址#dat

a指令中的 8位立即数

#data16

指令中的 16位立即数

addr11

用于 ACALL和 AJMP指令中的 11位目的地址,该地址必须放在与下条指令第一个字节同在一个 2KB的 ROM空间之中

addr16

用于 LCALL和 LJMP指令中的 16位目的地址,该地址在 64KB的 ROM空间内

rel 补码形式的 8位地址偏移量。用于所有的条件转移和 SJMP指令中,以下一条指令的第一个字节地址为基准,其值在 -128~+127范围内

@ 寄存器间接寻址或变址寻址的前缀bit 内部 RAM或 SFR中的可直接寻址位C 布尔处理器的累加器也就是进位 /借位标志 CY (×) 某地址单元或寄存器中的内容((×)) 以×单元或寄存器中的内容为地址间接寻址单元的内容← 将箭头右边的内容送入箭头左边的单元

3 .指令系统中常用符号说明

Page 8: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

对于一条汇编语言指令来说,有两个问题要解决: 一是要说明进行什么操作 二是要指出参与操作的数据的值是多少或者到何处取得,

以及操作结果放到何处。 寻址方式就是寻找操作数的方法。 在计算机中寻址方式越多,操作数的寻找越容易,程序

设计也就越方便。 51 系列单片机共有 7 种寻址方式,分别为立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。

对于两操作数指令,源操作数和目的操作数都有寻址方式,我们下面提到的都是源操作数的寻址方式。

2.1.2 寻址方式

由操作码指出

由寻址方式决定

Page 9: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1 .立即数寻址

在指令中直接给出参与操作的数据,这种寻址方式称为立即数寻址。这一直接给出的数据称为立即数,立即数前要加上“ #”符号,例如: MOV A , #0EH ; A←0EH

MOV DPTR , #2100H ; DPTR←2100H

将 8位的立即数 0EH送到累加器 A

将 16位的立即数 2100H 送到数据指针寄存器 DPTR ,立即数的高 8位 21H装入 DPH ,

低 8位 00H装入 DPL 。

Page 10: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2 .寄存器寻址

参与操作的数据由寄存器给出,这种寻址方式称为寄存器寻址。 由于寄存器在 CPU 的内部,所以采用该寻址方式可以获得较高的运算速度,可用于该寻址方式的寄存器有 R0~R7、 DPTR 、 A 、 B 。 如: MOV A , R1 ; A← (R1) 该指令将 R1 内的数据传送到累加器 A 中,源操作数 R1 和目的操作数均采用了寄存器寻址。 再比如: INC DPTR ; DPTR← ( DPTR ) +1

Page 11: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

3 .直接寻址 在指令中直接给出操作数的地址的寻址方式称为直接寻址。 在该寻址方式中,操作数存放在片内数据存储器中,地址长度

为 8位。 这种寻址方式可以访问:内部数据 RAM低 128B (该空间还可

以采用寄存器间接寻址)和特殊功能寄存器 SFR( 该空间只能采用直接寻址 )。

例如:在片内 RAM60H 单元存放一个 8位二进制数 3CH ,执行指令 MOV A , 60H 后,结果为( A ) =3CH 。如图 2-1 所示。

Page 12: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

4 .寄存器间接寻址 在指令中以指定寄存器的内容作为操作数地址的寻址方

式称为寄存器间接寻址。 这种方式可用于访问内部 RAM 和外部数据存储器。 能够用于寄存器间接寻址方式的寄存器有: R0 、 R1 、

DPTR 和 SP 。 在间接寻址寄存器前加“@”表示间接寻址。例如: MOV A ,@R0 ; A← (( R0 ))

假定 R0 中的内容为 50H, 50H单元内容为 45H,图 2-2 给出了寄存器间接寻址方式的执行过程。

Page 13: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

寄存器间接寻址的寻址范围: ( 1 )片内 128B 的 RAM ,用 R0 , R1 作间址寄存器,如 MOV A ,@R0 ; ( 2 )片外 64KB 的数据存储器,用 DPTR 作间址寄存器,如 MOVX A ,@DPTR ; ( 3 )堆栈区域,用 SP 作间址寄存器,如 PUSH ACC ; ( 4)片外 256B 数据存储器,用 R0 , R1作间址寄存器,如 MOVX A ,@R0 ;

Page 14: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

5 .变址寻址 基址寄存器 (DPTR或 PC)的内容与变址寄存器(累加器 A )的内容相加,其和形成 16 位地址作为操作数的地址的寻址方式称为变址寻址。 该类寻址方式用于程序存储器的访问,多用于查表程序。 例如: MOVC A ,@A+DPTR ; A← ((A)+(DPTR)) 设 (A)=12H, (DPTR)=02E3H, (02F5H)=1EH,则结果为 (A)=1EH,执行情况见图 2-3 所示。 变址寻址指令只有 3 条,另外两条是: MOVC A ,@A+PC JMP @A+DPTR

Page 15: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

6 .相对寻址 相对寻址是以程序计数器 PC 的当前值(是指当前跳转指令的下一条指令的地址)为基准,加上指令中给出的相对偏移量 rel以得到程序执行地址的寻址方式。 这种寻址方式的目的是修改 PC 的值,从而实现程序的转移。 转移的目的地址可参见如下表达式: 目的地址 =转移指令地址 + 转移指令字节数 +rel 值得注意的是,偏移量 rel有正负之分,其取值范围是 -128~ +127。

Page 16: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

其中,操作码 80H 存放在3000H 单元中, 54H 是设定的相对偏移量 rel ,存放在 3001H 单元。指令的执行过程如图2-4 所示。

例如:有双字节相对转移指令

指令地址 操作码 操作数 指令 注释 3000H 80 54H SJMP rel ; PC← (PC)+2+rel

Page 17: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

7 .位寻址

位寻址是将 8 位二进制数中的某一位作为操作数,在指令中给出的是位地址,一般用 bit表示。 例如: CLR P1. 0 ;将 P1口的第0位清零

位寻址的范围为:

片内 RAM区的20 H ~2 FH的16个单元中的128位, 如 MOV C , 30H字节地址能被8整除的 SFR , 如 SETB P1. 0

Page 18: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

表2-2 寻址方式及寻址空间

寻址方式 描述方法 寻址空间

立即数寻址 #data 程序存储器

寄存器寻址 R0~R7、 A、 DPTR 工作寄存器

直接寻址 direct 内部 RAM和 SFR

寄存器间接寻址@R0、@R1、 SP 内部数据存储器

@R0、@R1、@DPTR

外部数据存储器

变址寻址 @A+DPTR、@A+PC

程序存储器

相对寻址 PC+rel 程序存储器

位寻址 Bit 位地址空间

Page 19: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.2 数据传送指令( 29 条)

2.2.1 通用传送指令 通用传送指令的助记符为 MOV ( Move),格式如下: MOV <目的操作数 >, <源操作数 > 此类指令的功能是把源操作数指定的数据传送到目的操

作数(目的地址)所指定的存储单元中。 MOV 指令的传送关系如图 2-5 所示。

Page 20: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 1 设内部 RAM 中 (50H)=40H, (40H)=10H, P1口作输入口, (P1)=0ABH,问程序执行后各存储器中的数据是什么 ? MOV R0 , #50H ;立即数 50H送 R0 中,( R0 ) =50H MOV A ,@R0 ; R0间接寻址,将 50H单元内容送 A ,( A ) =40H MOV R1 , A ; A 送 R1 ,( R1 ) =40H MOV B ,@R1 ; R1间接寻址,将 40H单元内容送 B ,( B ) =10H MOV @R1 , P1 ;将 P1 内容送 40H单元,( 40H) =0ABH MOV P2 , P1 ;将 P1 内容送 P2 ,( P2 ) =0ABH执行结果: (R0)=50H, (A)=40H, (R1)=40H (B)=10H, (P1)=0ABH, (40H)=0ABH (P2)=0ABH

任何不符合格式要求的“指令”都是不合法的。

Page 21: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

这类指令用于访问片外 RAM或扩展的 I/O口。

1 .读写片外 RAM 指令 MOVX ( 1 )用@DPTR 进行间接寻址的指令读: MOVX A , @DPTR ; A← ((DPTR))写: MOVX @DPTR , A ; (DPTR)← A DPTR 为 16 位数据指针,该指令可以寻址外部 RA

M 的 64KB范围 (0000H—0FFFFH),地址的低 8位由 P0口输出,高 8 位由 P2口输出,数据通过 P0口输入 /输出。

2.2.2 特殊传送指令

Page 22: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

( 2 )用@Ri进行间接寻址的指令 读: MOVX A , @Ri ; ( A )← ((Ri)) 写: MOVX @Ri, A ; (Ri) ←A 指令可寻址范围: 当片外 RAM小于或等于 256个单元,用@Ri 间接寻址进行数据传送时, 8 位地址线足够使用。

当片外 RAM 单元较多时, 8 位地址线不够用,此时低 8位地址在 R0或 R1 中, P0口分时作低 8位地址线和数据线;高 8 位地址由 P2口提供,因此 P2口应预先设置。

若设计循环程序,则 Ri被加到 0或减到 0 时必须考虑对 P2口高 8 位地址进位或借位的影响。

Page 23: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 2 把片外 RAM 的 36H单元中的数据送到片外 RAM 的 1200H单元。〈分析〉( 36H)→( 1200H)程序如下: MOV R1 , #36H MOVX A ,@R1 MOV DPTR , #1200H MOVX @DPTR , A< 想一想 >下面的程序可以实现吗? MOV DPTR , #1200H MOV R1 , #36H MOV @DPTR ,@R1注意:片外 RAM之间不能直接传送数据,必须经过累加器 A

Page 24: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2. 查表指令 MOVC MOVC A , @A+DPTR ; A← (( A ) + ( DPT

R )) MOVC A , @A+PC ; A← (( A ) + ( PC )) 这两条指令主要用于查表,可以完成从程序存储器中取得数据并送入累加器 A 的功能。

( 1 ) 第一条指令以 DPTR 为基址寄存器,查表时 DPTR用于存放表格的起始地址。表格起始地址可以设置在 64KB 程序存储器中的任何位置。

( 2 )第二条指令以 PC 为基址寄存器,因 A 为 8 位无符号数,故该指令的查找范围是从 PC当前值开始的 255 个地址单元内。

若( DPTR ) =3000H,( A ) =60H,执行指令“MOVC A ,@A+DPTR”后,将程序存储器 3060H单元的内容送 A 。

Page 25: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 3 已知累加器 A 中有一个 0~9 范围内的数,请用查表法编程求出该数的平方值。设平方表表头地址为 1000H。〈方法 1〉以 DPTR 为基址寄存器 MOV DPTR , #1000H ;表头地址 MOVC A ,@A+DPTR ;查表求出平方值送 A若原( A ) =3 ,查表后( A ) =9。〈方法 2〉以 PC 为基址寄存器 ORG 0FFBH 0FFBH ADD A , #data ;加修正量,此例 data=02H 0FFDH MOVC A ,@A+PC ;查表 0FFEH SJMP $ ;暂停

Page 26: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1000H DB 01001H DB 11002H DB 4 ┇1009H DB 81 END 修正量 =表头地址- PC当前值 =1000H- 0FFEH=02H所以 data=02H( SJMP 指令 2 字节)。 查表指令和被查表格通常在同一页内(页内地址 00H~ 0FFH即 0 ~ 255 )

例如,若( R1 ) =16H,( A ) =28H,执行“ XCH A , R1”后,( A ) =16H,( R1 ) =28H

Page 27: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

3. 数据交换指令 交换类指令完成的传送是双向的,是两个字节间或两个半

字节间的双向交换。 特点是只能与累加器 A 进行交换。 字节交换 XCH A , Rn ;( A )( Rn) XCH A , direct ;( A )( direct) XCH A ,@Ri ;( A )(( Ri))功能:字节数据交换,实现 3 种寻址操作数内容与 A 中内容

的互换。

Page 28: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

半字节交换 XCHD A ,@Ri ;( A3 ~ 0 )(( Ri) 3 ~ 0 ) SWAP A ;( A3 ~ 0 )( A7~ 4)

例如,若( R1 ) =50H,( 50H) =74H,( A )=26H。执行指令“ XCHD A ,@R1”后,( A ) =24H,(50)=76H。

再如,若( A ) =38H,执行指令“ SWAP A”后,

( A ) =83H。

Page 29: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

4.堆栈操作指令( PUSH 、 POP ) 堆栈操作指令只有两条: 入栈指令用于保护片内某个单元的内容, 出栈指令用于恢复片内某个单元的内容。 通常入栈指令和出栈指令是成对出现的。入栈: PUSH direct ; SP←(SP)+1 , (SP)← (direct)出栈: POP direct ; direct← ((SP)), SP← (SP) - 1 入栈操作:首先 (SP)+1 ,然后写入数据;出栈操作:首先读出数据,然后 (SP) - 1 。

Page 30: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

图 2- 6 堆栈存入 /取出数据的操作

如图 2-6所示,在堆栈的原始状态下执行一条“ PUSH ACC”后,堆栈的变化过程如图 2-6( b);在堆栈的原始状态下执行一条“ POP ACC”后,堆栈的变化过程如图 2-6 (c)

Page 31: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 4 设( 60H) =X ,( 70H) =Y,试用堆栈指令实现60H和 70H单元内容的互换。 MOV SP , #50H ;设栈底 PUSH 60H ; 51H← ( 60H), X压入 51H单元 PUSH 70H ; 52H← ( 70H), Y 压入 52H单元 POP 60H ; 60H← ( 52H), Y 弹出进入 60H单元 POP 70H ; 70H← ( 51H), X弹出进入 70H单元〈想一想〉 用数据交换指令如何实现 60H和 70H单元内容的互换?

Page 32: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.3 算术运算指令( 24条)

算术运算指令可以完成加、减、乘、除四则运算以及加 1 、减 1 和二 -十进制调整操作。

这类指令多与累加器 A 有关, A常作为目的操作数,即指令运算结果存放在 A 中。同时它也能充当源操作数。

这类指令大多影响标志位,因而分析指令运算结果和对标志位的影响是本小节的重点。具体影响见表 2-3

Page 33: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

表 2-3 算术运算指令对标志位的影响 指令标志 ADD ADDC SUBB DA MUL DIV

进位标志 CY √ √ √ √ 0 0

半进位标志AC √ √ √ √ × ×

溢出标志 OV √ √ √ × √ √

奇偶标志 P √ √ √ √ √ √说明: 1 .“√”表示对应的指令操作影响该标志位;“ 0”表示相应的指令操作对该标志位清 0 ;“×”表示相应的指令操作不影响该标志。 2. 累加器加 1 ( INC A )和减 1 ( DEC A )指令仅影响 P 标志。

Page 34: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1. 不带 CY 位的加法指令格式:ADD A , Rn ; A← ( A ) + ( Rn)ADD A , direct ; A← ( A ) + ( direct)ADD A ,@Ri ; A← ( A ) + ( (Ri))ADD A , #data ; A← ( A ) + data功能: 把源操作数与 A 中内容相加后再送入 A 中。 在上述 4条指令中,参与运算的操作数都是 8 位二进制数,且其中一个操作数必须是累加器 A 。

编程人员可以将参与运算的两个操作数视为无符号数( 0 ~255 ),也可以把它们看作是有符号数。若看作是有符号数,则通常采用补码形式( -128~ +127)。

2.3.1 加法指令

Page 35: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

计算机总是把操作数当作有符号数(补码形式)看待并影响 PSW的相关标志位。影响情况如下: 进位 /借位标志 CY: 两数和的 D7 位有进位时,( CY) =1 ,否则,( CY)=0 。 半进位 /借位标志 AC : 两数和的 D3位有进位时,( AC ) =1 ,否则,( AC )=0 。 溢出标志 OV : 两数和的 D7, D6 位只有一位有进位时,( OV ) =1 ;否则,( OV ) =0 ,即 OV=C6⊕C7。奇偶标志 P : 当累加器 A 中“ 1”的个数为奇数时,( P ) =1 ;为偶数时( P ) =0 。

Page 36: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 5 试分析 80C51 单片机执行下述指令后,累加器 A 和 PSW各标志位的变化。 MOV A , #0A5H ADD A,#0CFH解: ( A ) =10100101B + Data=11001111B CY 01110100B C7 C6 AC( CY) =C7=1 ;( AC ) =1 ;溢出标志( OV ) =C7⊕C6=1⊕0=1,有溢出;( P ) =0 。执行结果:( A ) =74H。 若为无符号数运算, ( CY) =1 ,表示结果超出( 0 ~ 25

5 )范围。若为带符号数运算,因( -49) + ( -91 ) =-140 ,超出了( -128~ +127)的范围,所以 OV=1溢出。

Page 37: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.带 CY 位加法指令带 CY 位加法指令常用于多字节加法运算,格式如下: ADDC A , Rn ; A← ( A ) + ( Rn) + ( CY) ADDC A , direct ; A← ( A ) + ( direct) +( CY) ADDC A ,@Ri ; A← ( A ) + ( (Ri)) + ( CY) ADDC A , #data ; A← ( A ) + data + ( CY)功能:把源操作数与 A 中内容相加后再加上标志位 CY的当前值,将和送入 A 中。 这组指令的操作影响 PSW的 CY、 AC 、 OV 和 P 标志。 假设当前( CY) =1 ,( A ) =85H,( R0 ) =97H,执行指令“ ADDC A , R0”后,则使( A ) =1DH,( CY) =1 ,( AC ) =0 ,( OV ) =1 ,( P ) =0 。

Page 38: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

3. 加 1 指令格式: INC A ; A← ( A ) + 1 INC direct ; direct← ( direct) + 1 INC Rn ; Rn← ( Rn) + 1 INC @Ri ; (Ri)← ( (Ri)) + 1 功能: 把源操作数的内容加 1 ,结果再送回原来的单元。 这些指令仅“ INC A”影响奇偶标志 P,其余指令都不影响标志位的状态。

Page 39: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

4. 十进制调整指令格式: DA A ;若 AC=1或 A3 ~ A0> 9,则 A← ( A ) +06H

;若 CY=1或 A7~ A4 > 9,则 A← ( A ) +60H功能: 通常跟在 BCD 码加法运算之后,用来对累加器 A 中刚刚进

行的两个 BCD 码的相加结果进行十进制调整。 使用该指令时应注意以下几点: 本指令使用时跟在 ADD或 ADDC 指令之后。 不能用 DA A 指令对 BCD 码减法操作进行直接调整,如需调整可采用十进制补码相加后,再用 DA 指令调整。

本指令不影响溢出标志位 OV 借助标志位可实现多位 BCD 码加法结果的调整。

Page 40: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 6 分析下面程序段运行后的结果。 MOV A , #78H ADD A , #93H DA A解:列竖式分析过程如下: ( A ) =01111000B + data=10010011B 1 00001011B + 00000110B 低四位> 9,加 06H调整 1 00010001B + 01100000B CY=1 ,加 60H调整 1 01110001B 结果为 171 则( A ) =71H,考虑进位 /借位标志( CY) =1 ,操作结果为 171 。

Page 41: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.3.2 减法指令1.带 CY 位减法指令 与加法指令不同,减法运算中只有带 CY 位的减法指令,其格式如下: SUBB A , Rn ; A← ( A ) -( Rn) -( CY) SUBB A , direct ; A← ( A ) -( direct) -( CY) SUBB A ,@Ri ; A← ( A ) -( (Ri)) -( CY) SUBB A , #data ; A← ( A ) - data -( CY)功能: 把累加器 A 中内容减去指令指定的单元的内容,再减去标志位 CY的值,将结果再送回累加器 A 中。 SUBB 指令对 PSW中标志位的影响类似于 ADDC 加法指令。

Page 42: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 7 已知( A ) =78H,( CY) =1 ,问执行完“ SUBB A , #0C5H”后 A 和各标志位的状态。解:列竖式为: ( A ) = 01111000B - data= 11000101B 1 10110011B - 1 减 CY 1 10110010B 则( A ) =0B2H,( OV ) =C7⊕C6=1⊕0=1 ,有溢出,( P ) =0 ,( AC ) =0 。< 想一想 > 不带借位的减法操作如何实现?

Page 43: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2 .减 1 指令格式: DEC A ; A← ( A ) - 1 DEC direct ; direct← ( direct) - 1 DEC Rn ; Rn← ( Rn) - 1 DEC @Ri ; (Ri)← ( (Ri)) - 1 DEC DPTR ; DPTR← ( DPTR ) - 1功能: 把源操作数的内容减 1 ,结果再送回原来的单元。 这组指令仅“ DEC A”影响奇偶标志 P,其余指令都不影响标志位的状态。

Page 44: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

格式: MUL AB ;累加器 A 与 B寄存器相乘功能: 将累加器 A 与寄存器 B 中的 2 个无符号 8 位二进制数相乘,乘积的低 8位留在累加器 A 中,高 8 位存放在寄存器 B 中。运算结果将对 OV 、 CY、 P 标志位产生影响: 当乘积大于 0FFH,即 255 ( B 中内容不为 0 )时,溢出标志位( OV ) =1 ;否则( OV ) =0 ; 标志位 CY 总是被清 0 ; P 的状态由 A 中的内容决定。 例如:( A ) =36H,( B ) =03H,执行指令“MUL AB”之后,( A ) =0A2H,( B ) =00H,( CY) =0 ,( OV ) =0 ,( P ) =1 。

2.3.3 乘法指令

Page 45: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.3.4 除法指令

格式: DIV AB ;累加器 A除以寄存器 B功能:累加器 A 中的8位无符号数除以寄存器 B 中的8位无符号数,所得的商存在 A 中,余数存在 B 中。对标志位的影响: 对 CY和 P 标志位的影响与乘法相同; 当除数为 0 时,除法没有意义,( OV ) =1 ,否则( OV ) =0 。例如:( A ) =0FBH(十进制是 251 ),( B ) =12H(十进制是 18),执行指令“ DIV AB”之后,( A )=0DH,( B ) =11H,( OV ) =0 ,( CY) =0 。

Page 46: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.4 逻辑运算与循环类指令( 24 条)

逻辑运算指令可以完成与、或、异或、取反、清 0 操作; 循环指令是对累加器 A 进行循环移位操作,包括向左、向右以及带 CY位的移位操作。

Page 47: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.4.1 逻辑与运算指令 格式 1 :

ANL direct, A ; direct←(direct)∧A ANL direct, #data ; direct←(direct)∧data功能: 源操作数与直接地址指示的单元内容相与,结果送入直接地址指示的单元。格式 2 : ANL A, #data ; A← ( A )∧data ANL A, direct ; A← ( A )∧ (direct) ANL A, Rn ; A← ( A )∧ (Rn) ANL A, @Ri ; A← ( A )∧ ((Ri))功能: 源操作数与 A 相与,结果送入 A 中。 例如:( A ) =8CH,( R1 ) =0ABH,执行指令“ ANL A , R1”后,( A ) =88H,( R1 ) =0ABH。

Page 48: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.4.2 逻辑或运算指令 格式 1 : ORL direct, A ; direct←(direct)∨A ORL direct, #data ; direct←(direct)∨data 功能: 源操作数与直接地址指示的单元内容相或,结果送入直接地址指示的单元。格式 2 : ORL A,#data ; A← ( A )∨data ORL A,direct ; A← ( A )∨ (direct) ORL A,Rn ; A← ( A )∨ (Rn) ORL A,@Ri ; A← ( A )∨ ((Ri))功能: 源操作数与 A 相或,结果送入 A 中。 例如:( A ) =0C5H,( R2 ) =67H,执行指令“ ORL A , R2”后,( A ) =0E7H。

Page 49: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

格式 1 : XRL direct, A ; direct←(direct)⊕A XRL direct, #data ; direct←(direct)⊕data功能: 源操作数与直接地址指示的单元内容相异或,结果送入直接地址指示的单元。格式 2 : XRL A,#data ; A← ( A )⊕data XRL A,direct ; A← ( A )⊕ (direct) XRL A,Rn ; A← ( A )⊕ (Rn) XRL A,@Ri ; A← ( A )⊕ ((Ri))功能:源操作数与 A 相异或,结果送入 A 中。

2.4.3 逻辑异或运算指令

Page 50: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

格式: CLR A ; A← 0 CPL A ; A← 功能: 分别对 A 中内容清 0 和取反,结果仍存入 A 中。 例如:( A ) =7FH,执行指令“ CLR A”和“ CPL A”后, A 中内容分别为 00H和 80H。

A

2.4.4 累加器清 0 和取反指令

Page 51: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

逻辑运算指令除了可以进行逻辑运算外,还能完成一些特殊的操作。例如: 1 .清 0 “CLR A”只能对 A清 0 ,若要对某一单元如 60H单元清0 可以有以下几种方法:〈方法 1〉 MOV 60H,#00H〈方法 2〉 MOV A,60H XRL A , A MOV 60H,A〈方法 3〉 ANL 60H, #00H

2.4.5逻辑运算指令的典型应用

Page 52: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.屏蔽

将某一存储单元的某几位清 0 ,其它位保持不变,称为屏蔽。被屏蔽的位,原来的数值将被取消,被 0取代。屏蔽通常用 ANL 操作实现。 例 8 编程实现将 P1口低 4位的值存入 30H单元,屏蔽高 4 位。 MOV A,P1 ANL A,#0FH MOV 30H,A3.置 1 将某一存储单元的某几位变为高电平 1 ,其它位保持不变。通常用 ORL 操作实现。

Page 53: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 9 编程实现将 P1口低 4位的值保持不变,而高 4 位置 1 。结果存入 30H单元。 MOV A,P1 ORL A,#0F0H MOV 30H,A4.求反 CPL A 只能对 A 的所有位取反,如果需要对某一寄存器的某些位取反,则通常是利用异或指令来实现。例 10 编程实现将 P1口的高 4 位取反,而低 4位保持不变,结果存入 40H单元。 MOV A , P1 XRL A,#0F0H MOV 40H, A

Page 54: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.4.6累加器循环移位指令 格式: RL A ;累加器左环移 RLC A ;带 CY的累加器左环移 RR A ;累加器右环移 RRC A ;带 CY的累加器右环移每条指令的操作过程如图 2-7 所示。

图 2-7 移位操作示意图

Page 55: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

累加器每左移一位相当于乘以 2 。同理,累加器右移一位相当于除以 2 ,大家可以自己验证。例 11 已知( A ) =0ACH=10101100B ,( CY) =0 ,问执行以下程序后( A ) =?,( CY) =?。 RL A ;左移 A←01011001B RRC A ;带 CY 右移 A←00101100B , CY=1则( A ) =2CH,(CY)=1说明: 1. 所有对 A 操作的指令都对标志位 P 有影响。 2.逻辑运算指令不影响 CY、 OV 、 AC 。 3 .“ RLC A”和“ RRC A”指令对 CY和 A都有影响。

Page 56: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.4.7课题与实训 3 流水灯及系统脱机运行

一.实训目的 1 .进一步熟悉单片机 I/O 接口的线路连接。 2 .学习数据传送指令和移位指令的应用。 3 .学习单片机输出口的控制 4.进一步熟悉仿真器的使用方法。 5 .学习程序固化及脱机运行的方法。 二.课题要求 1 .用单片机的 P1口控制 8只 LED灯,每次点亮两只,作 P1.0 P1.1→P1.2 P1.3→P1.4 P1.5→P1.6 P1.7→P1.0 P1.1 的循环闪烁,间隔 0.2秒。 2 .将程序固化到一片 AT89C51芯片中,连接线路,使其脱机工作。

Page 57: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

三.背景知识 通过单灯点亮程序,我们已经知道。只要保证每次从P1 口送出的数据中有两个保持低电平(就图 2-8电路而言)就可以将相应的灯点亮。

四.硬件电路

图 2-8 流水灯电路

Page 58: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

五.软件设计 软件设计略,相信大家有了单灯点亮的基础,完全可以自己设计出来。设计有难度的同学可以参考3.4.4 节的流水灯程序。六.总结与提高 实现本实训的思路比较清楚,但程序的书写相对较长,其中重复性的功能较多,这些可以在后续知识的学习中进行优化改进。仍采用该实训电路,你能设计出效果更好的流水灯吗?试试看。

Page 59: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

程序的顺序执行是由 PC自动加 1实现的,要改变程序的执行顺序,实现分支转向,应通过强迫改变 PC值的方法来实现,这就是控制转移类指令的基本功能。 80C51 的控制转移指令有无条件转移、条件转移及子程序调用与返回等。

2.5.1无条件转移 不规定条件的程序转移称之为无条件转移。这类指令共 4条:

2.5 控制转移类指令( 17条)

Page 60: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1.长转移 LJMP addr16 ; PC←addr16 这是一条 3 字节指令,指令执行后能把 16 位地址( addr16)送 PC ,从而实现程序转移。因转移范围大,可达 64KB ,因此称之为“长转移”。 例如“ LJMP 2600H”就表示程序要转移到 2600H单元去。 在修改或调试程序时,常常要插入或删除部分指令或对当前指令所处的位置进行调整,因此,在实际编写程序时通常采用符号地址。如“ LJMP NEXT”。

Page 61: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.短转移

AJMP addr11 ; PC← ( PC ) +2,PC10 ~ 0←addr11

这是一条 2 字节指令,指令执行时,先将 PC 的内容加 2 (这时 PC 指向的是 AJMP 的下一条指令),然后把指令中的 11位地址码传送到 PC10 ~ 0 ,保持 PC15 ~ 11原来的内容不变。 由于转移的地址是 11位( 211=2K),故 AJMP指令的转移范围是包含 AJMP 下一条指令在内的 2K空间。 与 LJMP 指令类似, AJMP 指令后面最好也用符号地址,但必须保证该符号所处的地址在 2KB 的寻址范围内。

Page 62: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

3. 相对转移 SJMP rel ; PC← ( PC ) +2 , PC← ( PC ) +rel 这是一条 2 字节指令,其功能是先计算目的地址,并按计算得到的目的地址实现程序的相对转移。计算公式为: 目的地址 =( PC ) +2+rel 其中 rel为相对偏移量,它本身是一个带符号的 8 位二进制数的补码形式,取值范围为 -128~ +127( 00H~ 7FH对应 0 ~ +127, 80H~ FFH对应表示 -128~ -1 )。因此所能实现的转移是双向的: 如果 rel为正数表示正向转移;如果 rel为负数则表示反向转移。

Page 63: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例如: ┇LOOP: MOV R1 , 60H SJMP NEXT ; rel> 0

┇ NEXT: MOV A,#30H SJMP LOOP ; rel< 0

Page 64: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

4.散转移 JMP @A+DPTR ; PC← ( A ) + ( DPTR ) 这是一条 1 字节转移指令,指令的目的地址由 A 的内容和 DPTR 内容之和来确定,即目的地址 =( A ) +( DPTR )。 例如:有一段程序如下: MOV DPTR , #TABLE JMP @A+DPTR TABLE : AJMP NEXT0 AJMP NEXT1 AJMP NEXT2 AJMP NEXT3 当( A ) =00H时,程序将转到 NEXT0 处执行;当( A ) =02H时,程序将转到 NEXT1 处执行;其余类推。

Page 65: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

条件转移就是说程序的转移是有条件的。执行条件转移指令时,如果指令中规定的条件满足,则进行程序转移,否则程序顺序执行。条件转移有如下形式:

1. 累加器判 0 转移 JZ rel    ;若( A ) =0 ,则 PC← ( PC ) +rel JNZ rel ;若( A )≠ 0 ,则 PC← ( PC ) +rel 功能: 对累加器 A 的内容是否为 0 进行判断并转移。如图 2-9

所示。

2.5.2 条件转移

Page 66: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

图 2-9 累加器判 0转移流程图 指令中目标地址的计算与 SJMP 指令相同,且最好以地址符号形式出现,指令执行时对标志位无影响。 例如:若累加器的原始内容为 00H,则: JNZ LOOP1 ;由于( A ) =0 ,所以程序往下执行 INC A ;( A ) =1 JNZ LOOP2 ;由于( A )≠ 0 ,所以程序转向 LOOP2处执行

Page 67: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2 。数值比较转移 数值比较转移指令把两个操作数进行比较,比较结果作

为条件来控制程序是否转移。共有 4种形式: CJNE A , direct,rel ;若( A )≠( direct), 则 PC← ( PC ) +3+rel

CJNE A , #data,rel ;若( A )≠ data, 则 PC← ( PC ) +3+rel

CJNE Rn, #data,rel ;若( Rn)≠ data, 则 PC← ( PC ) +3+rel

CJNE @Ri, #data,rel ;若( (Ri))≠ data, 则 PC← ( PC ) +3+rel

数值比较指令是 3 字节指令,这是 80C51 指令系统中仅有的 4条 3 个操作数的指令,在程序设计中非常有用。

Page 68: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

( 1 )指令功能—程序转移 若左操作数 = 右操作数,则程序顺序执行 PC← ( PC ) +3进位标志清 0 CY←0

若左操作数>右操作数,则程序转移 PC← ( PC ) +3+rel进位标志清 0 CY←0

若左操作数<右操作数,则程序转移 PC← ( PC ) +3+rel进位标志置 1 CY←1

Page 69: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

( 2 )指令应用—数值比较 在 80C51 中没有专门的数值比较指令,两个数的数值比较可以利用这 4条指令来实现,如:

程序顺序执行,则 左操作数 = 右操作数 程序转移且( CY) =0 ,则 左操作数>右操作数 程序转移且( CY) =1 ,则 左操作数<右操作数

例如:若( R5 ) =68H,执行指令“ CJNE R5 ,#60H, L1”后,程序将转移到标号 L1 处。

Page 70: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

3 。减 1 不为 0 转移 这是一组把减 1 与条件转移两种功能结合在一起的指令,共 2 条:

( 1 )寄存器减 1 不为 0 转移 DJNZ Rn, rel

这是一条 2 字节指令,非常有用。其功能如下: 寄存器内容先减 1 ,如所得结果为 0 ,则程序顺序执行;

如减 1 结果不为 0 ,则程序转移。具体表示如下:

Rn← ( Rn) -1 ;若( Rn)≠ 0 ,则 PC← ( PC ) +2+rel

;若( Rn) =0 ,则 PC← ( PC ) +2

Page 71: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

( 2 )直接寻址单元减 1 条件转移 DJNZ direct,rel 这是一条 3 字节指令,其功能为: 直接寻址单元内容减 1 ,如所得结果为 0 ,则程序顺序执

行;如减 1 结果不为 0 ,则程序转移。具体表示如下: Direct← ( Direct) -1 ;若( Direct)≠ 0 ,则 PC← ( PC ) +3+rel ;若( Direct) =0 ,则 PC← ( PC ) +3 这两条指令主要用于控制程序循环。如预先把寄存器或内

部 RAM 单元赋值循环次数,利用减 1 条件转移指令,以减1 后结果是否为 0 作为转移条件,即可实现按次数控制循环。

Page 72: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

例 12 分析以下程序的功能MOV 50H, #10CLR A

LOOP : ADD A , 50HDJNZ 50H, LOOPSJMP $

解: 该程序执行结果为 ( A ) =10+9+8+7+6+5+4+3+2+1=37H

Page 73: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1.调用( 1 )长调用 LCALL addr16 这是一条 3 字节指令,调用地址在指令中直接给出,通常以标号形式出现。指令执行后,断点进栈保存,以 addr16作地址调用子程序。因此本指令的操作内容可表示为:

PC← ( PC ) +3SP← ( SP ) +1 ,( SP )←( PC ) 7~ 0SP← ( SP ) +1 ,( SP )←( PC ) 15 ~ 8PC← addr16

2.5.3 调用与返回

Page 74: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

LCALL 指令的子程序调用范围是 64KB 。 addr16就是被调用子程序的入口地址,使用比较方便,但 3 字节指令较长,占用存储空间较多。 例如:( SP ) =50H,标号地址 START 为 0200H,标号 MM 为 6000H,执行指令“ START : LCALL MM”后( SP ) =52H,( 51H) =03H,( 52H) =02H,( PC ) =6000H( 2 )短调用 ACALL addr11 这是一条 2 字节指令,被调用子程序的首地址必须设在包含 ACALL 下一条指令的第一个字节在内的 2KB范围内的片内 ROM 中。

Page 75: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2.返回 RET ;子程序返回 RETI ;中断服务子程序返回( 1 ) RET RET 指令与调用指令成对出现,只是调用指令出现在主程序中,而 RET 指令则出现在子程序的最后一行。 RET 指令执行子程序返回功能,从堆栈中自动取出断点地址送给程序计数器 PC ,使程序在主程序断点处继续向下执行,可表示为: PC15 ~ 8← ( SP ), SP← ( SP ) -1 PC7~ 0← ( SP ), SP← ( SP ) -1 例如:( SP ) =57H,( 57H) =12H,(56H)=50H,执行指令“ RET”后,( SP ) =55H,( PC ) =1250H,CPU从 1250H单元开始执行程序。

Page 76: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

( 2 ) RETI RETI指令除具有与 RET 指令相同的功能外,还有清除中断响应时被置位的优先级状态,开放较低级中断和恢复中断逻辑等功能。 3.空操作 NOP ; PC←(PC)+1 这条指令不产生任何控制操作,只是将程序计数器 PC的内容加 1 。该指令在执行时间上要消耗 1 个机器周期,在存储空间上占用 1 个字节。因此常用来实现较短的延时。

Page 77: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

位操作指令的操作数是字节中的某一位,每位取值只能是 0或 1 ,故又称之为布尔变量操作指令。 进行位操作时,以进位标志 CY作为位累加器。与字节操作指令中累加器 ACC 用字符“ A”表示相类似,在位操作指令中,位累加器 CY要用字符“ C”表示。

2.6.1位传送 MOV C , bit ; CY← ( bit) MOV bit, C ; bit← ( CY) 这两条指令可以实现指定位地址的内容与位累加器 CY内容的相互传送。执行结果不影响其它标志位。 例如: MOV C , 07H ; CY← ( 20H.7)

2.6 位操作指令

Page 78: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1 .清零:CLR C ; CY←0CLR bit ; bit←02 .置位:SETB C ; CY←1SETB bit ; bit←13 .取反:CPL C ; CY←( )CPL bit ; bit← ( ) 这组指令分别完成位清“ 0”、置“ 1”及取反操作,执行结果不影响其它标志位。例如: CLR 06H ; 20H.6←0 SETB P1.0 ; P1.0←1 CPL 36H ; ←

CY

bit

)26H.6(

2.6.2 位变量修改指令

Page 79: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1 .逻辑“与”ANL C , bit ; CY←(CY)∧( bit)ANL C , /bit ; CY←(CY)∧( )2 .逻辑“或”ORL C , bit ; CY←(CY)∨( bit)ORL C , /bit ; CY←(CY)∨( ) 这组指令将位累加器 CY与直接位地址进行逻辑与、逻辑或,操作结果再送回 CY。斜杠“ /”表示该位取反后再参与运算,但不改变其原值,也不影响其它标志位。

bit

bit

2.6.3 位逻辑运算指令

Page 80: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1 .判 CY转移 JC rel ; 若 CY=1 ,则转移( PC←PC+2+rel),否则程序顺序执行 JNCrel ; 若 CY=0 ,则转移( PC←PC+2+rel),否则程序顺序执行 上述 2 条指令分别检测进位 /借位标志位 CY是 1还是 0 ,若条件符合,则 CPU 转向指定的目标地址去执行程序;否则,顺序执行下条指令。2 .判位变量转移 JB bit, rel ; 若 (bit)=1 ,则转移( PC←PC+3+rel),否则程序顺序执行 JNB bit, rel ; 若 (bit)=0 ,则转移( PC←PC+3+rel),否则程序顺序执行

2.6.4 条件转移类指令

Page 81: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

上述两条指令分别检测指定位是 1还是 0 ,若条件符合,则 CPU 转向指定的目标地址去执行程序;否则,顺序执行下条指令。对该位进行检测时,不影响原变量值,也不影响标志位。 3 .判位变量并清 0 转移 JBC bit, rel ; 若 (bit)=1 ,则 PC←PC+3+rel,( bit)← 0 ;否则程序顺序执行 该指令对指定位进行检测,若该位是“ 1”,将其清 0 ,同时 CPU 转向指定的目标地址去执行程序;否则,顺序执行下条指令。 该指令常用于对定时 /计数器查询方式的操作。

Page 82: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1 .用位操作指令实现电机控制的特点 80C51 的位操作指令,又称布尔代数指令,用作交流电机控制具有如下优点: 程序设计简单:将电工图转化为逻辑图,以指令的形式实现。串联使用“ ANL C , bit”指令,并联使用“ ORL C ,bit”指令,类似于 PLC (可编程序控制器)的写法。 容易除错:所用的指令少,因而便于除错。 速度较快:程序较短,占用的字节少,所以执行速度会比较快。 使用的位操作指令都采用直接寻址方式,执行效率较高。

2.6.5 位操作指令用于交流电机的启、停控制

Page 83: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

2 .电动机启、停的基本控制⑴控制功能接上电源时,电动机不动作。按下启动按钮 ON 时,则电动机起动运转。超载时,热继电器 KR跳脱,电动机停止运转,此时需将 KR复位后,按 ON 才有效。按下停止按钮 OFF时,则电动机立刻停止运转。输入输出口的控制 :

Page 84: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

⑵电工图

图 2- 10 电动机启、停的电工图 ⑶单片机引脚功能分配P1.0 :接启动按钮 ON ,当按钮按下时 P1.0=1 ;P1.1 :接停止按钮 OFF,当按钮按下时 P1.1=0 ;P1.2 :接热继电器 KR 的常闭触头,当电机超载时KR断开, P1.2=0 ;P2.0 :接交流接触器 M1 的线圈,当线圈M1 有电时, P2.0=0 。

Page 85: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

⑷软件设计参考程序如下: ORG 0000H ANL P2 , #00HSTART : MOV C , P1.0 ORL C , /P2.0 ANL C , /P1.1 ANL C , /P1.2 CPL C MOV P1.0 , C AJMP START END

图 2-11 等效逻辑电路

Page 86: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

学习和应用单片机的一个很重要的环节就是理解和熟练掌握它的指令系统。 80C51 单片机的指令系统共有 111 条指令,其指令字节少,执行时间短,位操作指令极为丰富。 指令由操作码和操作数组成。操作码用来规定操作的性质,操作数用于给指令的操作提供数据和地址。单片机寻找操作数地址并将其提取出来的方法称为寻址方式。 80C51 单片机有 7种寻址方式:立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。 本章的学习重点是熟悉和掌握 80C51五大类指令的形式、功能和简单应用。前提是记忆。不主张死记硬背,建议“在理解基础上记忆,在多练过程中熟悉,在思考比较下掌握”。可以结合指令助记符的英文含义、书写形式的格式规律来帮助记忆,通过多做习题的方法来熟悉指令。

本 章 小 结

Page 87: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

1 . 80C51 有哪几种寻址方式?试述各种寻址方式所能访问的存储空间。2 .访问特殊功能寄存器 SFR 可以采用哪几种寻址方式?3 .指出下列指令中划线操作数的寻址方式。 ⑴MOV A , #30H ⑵MOV A , 90H ⑶MOV @R1 , A ⑷MOVC A ,@A+DPTR ⑸PUSH ACC ⑹MUL AB ⑺CJNE A , #46H, 30H ⑻SETB P1.24.请按下列要求传送数据: ⑴将立即数 30H传送到 R2 ; ⑵将 30H中的数据传送到 56H; ⑶将立即数 30H传送到以 R0 中内容为地址的存储单元中;

思考题与习题

Page 88: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

⑷将 R2 中的内容传送到 P1口; ⑸将内 RAM60H 单元的数据传送到外 RAM60H 单元; ⑹将内 RAM60H 单元的数据传送到外 RAM2060H 单元; ⑺将外 RAM2060H 单元的数据传送到内 RAM60H 单元; ⑻将 ROM2000H 单元的数据传送到内 RAM60H 单元;5 .何为堆栈指针、栈底和栈顶?对堆栈有些什么样的操作?6 .下列指令中哪些是合法的?哪些是非法的? ⑴MOV R5 , R1 ; ⑵MOV @R2 , #70H ; ⑶MOVX @R1 , PSW ; ⑷ POP A ; ⑸SWAP R0 ; ⑹ XCH 80H , A ; ⑺ADDC A , 20H ; ⑻ DEC @R1 ; ⑼INC DPTR ; ⑽ ORL 70H , #40H ; ⑾RL 36H ; ⑿ CLR DPTR ; ⒀LJMP DEC ; ⒁ JC ABC ; ⒂JBC B , ASE ; ⒃ CPL C ; ⒄CLR PSW.3 ; ⒅ ANL C , 31H ;

思考题与习题

Page 89: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

7.若( R1 ) =30H,( A ) =40H,( 30H) =60H,( 40H) =08H。试分析执行下列程序段后上述各单元内容的变化。MOV A ,@R1MOV @R1 , 40HMOV 40H, AMOV R1 , #7FH8.请写出下列指令执行后, A 、 B 、 R0 的内容分别是什么?MOV SP , #58HMOV A , #12HMOV B , #56HMOV R0 , APUSH ACCPUSH BPOP ACCPOP B

思考题与习题

Page 90: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

9.若( A ) =9DH,( R0 ) =36H,( R1 ) =60H,( R7)=50H,( 36H) =3FH,( 60H) =0AH,试写出下列各条指令独立执行后有关寄存器和存储单元的内容,若该指令影响标志位,试写出 CY、 AC 和 OV 的值。 ⑴MOV A ,@R0 ⑵ORL 36H, #0FH⑶ADD A , R7 ⑷SWAP A⑸INC @R1 ⑹XCH A ,@R010 .已知( A ) =41H,试分析下面指令的执行结果。 ⑴ANL A , #0FFH; ⑵ ORL A , #0FH;⑶ANL A , #0F0H ⑷XRL A , #0FFH11 .下列各小题中的 NEXT 、 LOOP 、 ABC 、 ONE均为地址标号,试编写一段程序分别完成下述功能。 ⑴若 60H单元内容为 0 ,程序转移到 NEXT 。⑵若 60H单元内容为 68H,程序转移到 LOOP 。⑶若 60H单元内容为 3 ,程序转移到 NEXT ;若不等于 3 ,程序转移到 ABC 。 ⑷若 60H单元内容为 7,程序转移到 NEXT ;若大于 7,程序转移到 ABC ;若小于 7,程序转移到 ONE 。

思考题与习题

Page 91: 本章学习目标 : 了解指令及指令系统常识 熟悉指令中常用符号 在理解的基础上牢记 7 种寻址方式 熟悉各类指令的功能及应用范围 能使用指令完成各种常规任务

12 .使用位操作指令完成下述逻辑功能,要求不改变未涉及位的内容。⑴使 ACC.7置位; ⑵使累加器低 4位清 0 ;⑶使 CY 清 0 ; ⑷ P1.0 与 CY相与 ,结果送 CY13 .下面指令中 20H所表示的含意相同吗?为什么?MOV A , #20H ;MOV 30H , 20H ;MOV C , 20H.0 ;MOV C ,20H ;14.试用位操作指令求下列逻辑方程。( 1 ) P1.0=ACC.0 ╳ (PSW.7+P1.3) + /P3.3( 2 ) B.6 = P1.0 ╳ ACC.6 + PSW.0 ╳ /P2.2( 3 ) P2.1 = P1.2 ╳ /B.5 +/ACC.7 ╳ P1.015 .编程实现将内 RAM30H为起始地址的 3 个无符号数相加 ,并将结果 ( 假设结果小于 100H)存放到 60H单元。16.编程实现 36+63 的 BCD 加法。

思考题与习题