第3章 MCS-51指令系统 3.1 简 介 3.1.1 指令概述 一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明CPU的功能越强。例如,Z80 CPU中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快得多。

Slides:



Advertisements
Similar presentations
5.1 中断的概述 5.2 MCS - 51中断系统 5.3 中断系统的应用
Advertisements

主讲人:刘利 交通大学网络控制课程系列 上海交通大学机电控制研究所 交通大学网络控制课程系列 考试课、专业基础课、必修课
第7章 AT89S51单片机的 串行口 1.
项目二 中断应用系统设计 本项目学习目标: (1)制作一个单片机控制的彩灯电路。 (2) 理解中断的基本概念;
第5章 中断系统 5.1 中断的概念 5.2 MCS-51单片机的中断流程 5.3 MCS-51的中断响应条件和中断处理
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第四章 指令系统及汇编语言程序设计.
8051 指令.
第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
项目2 2个LED发光二极管控制 知识与能力目标 熟悉单片机的I/O口功能与特性。
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
单片机原理与应用.
第2章 MCS-51单片机指令系统与汇编语言程序设计
单片机原理与应用.
報告者:朱耿育 紀翔舜 組員:詹以群 張永傑 指導老師:梁新潁
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
单片机应用技术 项目一 循环彩灯装置 第6讲 指令功能及汇编语言程序设计(一) 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第四章 指令系统及汇编语言程序设计.
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第6章 MCS - 51单片机内部定时器/ 计数器 及串行接口 6.1 定时器/计数器的结构及工作原理 6.2 方式和控制寄存器
第3章 AT89C51指令系统 3.1基本概念内部结构和引脚功能 指令、指令系统、机器代码
逻辑运算类指令 包括与、或、非、异或、清0及移位等共24条;一般不影响PSW中的标志位;助记符有:ANL、ORL、XRL、RL、RLC、RR、RRC、CLR和CPL共9种。 一、逻辑与指令 ANL A,Rn ;A←(A)∧( Rn) ANL A,direct;A←(A)∧(direct)
单片机原理及应用 MCS-51系列单片机的基本硬件结构 MCS-51指令系统 MCS-51单片机的系统扩展与应用.
单片机原理及应用 ——基于Proteus与Keil C 哈工大出版社
第2章 单片机的结构原理与 简单应用 (课时:10学时).
第八章 MCS-51与数码显示器和键盘的接口 一、MCS-51与数码显示器接口 数码显示器是单片机应用产品中最常用的廉价的输 出设备,它由8个发光二极管按一定规律排列而成, 当某一发光二极管导通时,则会被点亮,控制不同 组合的二极管导通,就能显示出各种字符。 1.显示器的结构.
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第三章 指令系统.
第3章 指令系统及程序设计举例 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数
第10章 综合实训 课题一 水温控制系统设计 一、实训目的 二、课题要求 熟悉常用温度传感器AD590的特性及接口电路的设计方法;
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
单元五 MCS-51单片机内部资源 5.1 任务九 单片机计数并显示 5.2 任务十 单片机流水灯控制 5.3 任务十一 两台单片机数据互传
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第四章 指令系统及汇编语言程序设计.
第四章 指令系统及汇编语言程序设计.
第3章 MCS-51单片机指令系统 3.1 指令概述 3.2 寻址方式 3.3 MCS-51系列单片机的指令系统.
第4章 中断技术 一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。
数码管数字时钟电路的设计 1. 系统硬件电路的设计
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
第3章 MCS-51的指令系统 介绍MCS-51汇编语言的指令系统。 3.1 指令系统概述
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
第三章 MCS 51的硬件结构.
3.1 指令系统简介 一、几个概念 二、汇编语言指令格式 三、指令的分类 四、指令的符号说明 主讲:吴政江 下一页.
第三章 计算机系统的组成与工作原理.
任务五 学习、应用控制转移类指令 单片机应用技术 认知1 掌握无条件转移指令格式及应用
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
单片机原理与应用.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
循环程序设计 在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构性强、可读性好,从而大大提高了程序质量。
4.3 汇编语言程序设计 顺序程序设计 顺序程序设计是最基本的程序设计。它是按照指令排列的先后顺序依次执行,每条指令都必须执行,且只执行一遍。顺序程序设计一般比较单一、简单,常常作为复杂程序的一部分。
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第二章 MCS-51单片机程序设计 第一章 8086程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
认知1 掌握“与”、“或”和“异或”指令格式及应用
第3章 80C51单片机指令系统 教学基本要求: (1)、了解单片机的指令系统、编程语言等基本概念;
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第2章 80C51单片机的硬件结构 教学基本要求: (1)、熟悉单片机的定义、名称、分类方法;
第1章 微型计算机基础.
Presentation transcript:

第3章 MCS-51指令系统 3.1 简 介 3.1.1 指令概述 一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明CPU的功能越强。例如,Z80 CPU中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快得多。

一台微机能执行什么样的操作,是在微机设计时确定的。一条指令对应着一种基本操作。由于计算机只能识别二进制数,所以指令也必须用二进制形式来表示,称为指令的机器码或机器指令。 MCS-51单片机指令系统共有33种功能,42种助记符,111条指令。

3.1.2 指令格式 在实训中看到,不同指令翻译成机器码后字节数也不一定相同。按照机器码个数,指令可以分为以下三种:

MCS-51单片机指令系统包括49条单字节指令、46条双字节指令和16条三字节指令。 采用助记符表示的汇编语言指令格式如下: 标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。

操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。 操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。 注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。

3.2 寻 址 方 式 操作数是指令的重要组成部分,指出了参与操作的数据或数据的地址。寻找操作数地址的方式称为寻址方式。一条指令采用什么样的寻址方式,是由指令的功能决定的。寻址方式越多,指令功能就越强。 MCS-51指令系统共使用了7种寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址等。实训中,我们初步接触了寄存器寻址、立即数寻址、直接寻址和寄存器间接寻址等4种寻址方式。

1. 寄存器寻址 寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。 如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H~0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM 09H单元的值就变为20H,如图3.1所示。

实训3中,采用寄存器寻址的指令如下: MOV P1,A ;将累加器A的内容送 到P1口 MOV P1,R4 ;将寄存器R4的内容送到P1口 CLR A ;将累加器A清0 CPL A ;将累加器A中的内容取反  RL A ;将累加器A的内容循环左移

图3.1 寄存器寻址示意图

图3.2 直接寻址示意图

2. 直接寻址 直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。 例如,指令MOV A,3AH执行的操作是将内部RAM 中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。 设内部RAM 3AH单元的内容是88H,那么指令MOV A,3AH的执行过程如图3.2所示。

实训3中,采用直接寻址的指令如下: MOV P1,20H ;将20H单元的内容传送到P1口 3. 立即数寻址 立即数寻址是指将操作数直接写在指令中。 例如,指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。注意:立即数前面必须加“#”号,以区别立即数和直接地址。该指令的执行过程如图3.3所示。

  图3.3 立即数寻址示意图

实训3中,采用立即数寻址的指令如下: MOV P1,#55H ;将立即数55H送P1口 MOV 20H,#55 ;将立即数55H送20H 单元 MOV A,#0F0H ;将立即数0F0H送累加器A MOV R4,#0FH ;将立即数0FH送寄存器R4中 MOV R0,#20H ;将立即数20H送寄存器R0口

AND A,#0FH ;累加器A的内容与立即数0FH进行逻辑与操作 OR A,#0F0H ;累加器A的内容与立即数0F0H进行逻辑或操作 MOV A,#01H ;将立即数01H送累加器A中 MOV A,#55H ;将立即数55H送累加器A中

4. 寄存器间接寻址    寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。 在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。 注意:间接寻址寄存器前面必须加上符号“@”。例如,指令MOV A,@R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中。

设R0=3AH,内部RAM 3AH中的值是65H,则指令 MOV A,@R0的执行结果是累加器A的值为65H,该指令的执 行过程如图3.4所示。 实训3中,采用寄存器间接寻址的指令如下: MOV P1,@R0 ;将R0所指的存 储 单元的内容送P1口

图3.4 寄存器间接寻址示意图

5. 变址寻址 变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。 例如,指令MOVC A,@A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。 设累加器A=02H,DPTR=0300H,外部ROM中,0302H单元的内容是55H,则指令MOVC A,@A+DPTR的执行结果是累加器A的内容为55H。该指令的执行过程如图3.5所示。

图3.5 变址寻址示意图

6. 相对寻址 相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。 例如,指令SJMP 54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。 设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。该指令的执行过程如图3.6所示。

图3.6 相对寻址示意图

7. 位寻址 位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。 位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,参见有关章节中位地址定义。

例如,指令SETB 3DH执行的操作是将内部RAM位寻址区中的3DH位置1。 设内部RAM 27H单元的内容是00H,执行SETB 3DH后,由于3DH对应内部RAM 27H的第5位,因此该位变为1,也就是27H单元的内容变为20H。该指令的执行过程如图3.7所示。

图3.7 位寻址示意图

3.3 指 令 系 统 MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类 数据传送指令(29条) 算术运算指令(24条) 3.3 指 令 系 统 MCS-51单片机指令系统包括111条指令,按功能可以划分为以下5类       数据传送指令(29条)    算术运算指令(24条)         逻辑运算指令(24条)      控制转移指令(17条)       位操作指令(17条)

3.3.1 指令系统中的符号说明 指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3.2的约定。 表3.2 指令描述约定 符 号 3.3.1 指令系统中的符号说明 指令的书写必须遵守一定的规则,为了叙述方便,我们采用表3.2的约定。 表3.2 指令描述约定 符 号 含 义 Rn 表示当前选定寄存器组的工作寄存器R0~R7 Ri 表示作为间接寻址的地址指针R0~R1 #data 表示8位立即数,即00H~FFH #data16 表示16位立即数,即0000H~FFFFH addr16 表示16位地址,用于64K范围内寻址 addr11 表示11位地址,用于2K范围内寻址 direct 8位直接地址,可以是内部RAM区的某一单元或某一专用功能寄存器的地址 Rel 带符号的8位偏移量(-128~+127) Bit 位寻址区的直接寻址位 (X) X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容 ← 将 ← 后面的内容传送到前面去

3.3.2 数据传送类指令 数据传送指令是MCS-51单片机汇编语言程序设计中使用最频繁的指令,包括内部 RAM、寄存器、外部RAM以及程序存储器之间的数据传送。 数据传送操作是指把数据从源地址传送到目的地址,源地址内容不变。 目的地址 源地址 数 据

内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本格式: 1. 内部8位数据传送指令(15条) 内部8位数据传送指令共15条,主要用于MCS-51单片机内部RAM与寄存器之间的数据传送。指令基本格式: MOV <目的操作数>,<源操作数> 1) 以累加器A为目的地址的传送指令(4条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV A,Rn 11101rrr A(Rn) n=0~7, rrr=000~111 1 MOV A,direct 11100101 direct A (direct)   MOV A,@Ri 1110011i A ((Ri)) i=0,1 MOV A,#data 01110100 data A #data

注意:以上传送指令的结果均影响程序状态字寄存器PSW的P标志。 例3.1 已知相应单元的内容如下,请指出每条指令执行后相应单元内容的变化。 例3.1 已知相应单元的内容如下,请指出每条指令执行后相应单元内容的变化。 累加器A 40H 寄存器R0 50H 内部RAM:40H 30H 内部RAM:50H 10H

(1) MOV A,#20H (2) MOV A,40H (3) MOV A,R0 (4) MOV A,@R0 解:(1) MOV A,#20H执行后A=20H。 (2) MOV A,40H执行后A=30H。 (3) MOV A,R0执行后A=50H。 (4) MOV A,@R0执行后A=10H。

2) 以Rn为目的地址的传送指令(3条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV Rn,A 11111rrr n=0~7, rrr=000~111 1 MOV Rn,direct 10101rrr direct Rn (direct) MOV Rn,#data 01111rrr data Rn #data

注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 3) 以直接地址为目的地址的传送指令(5条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV direct,A 11111010 direct (direct) A   1 MOV direct,Rn 10001rrr direct (direct )Rn n=0~7, rrr=000~111 MOV direct2,direct1 10000101 direct1 direct2 (direct2)  direct1 2 MOV direct,@Ri 1000011i direct (direct )(Ri) i=0,1 MOV direct,#data 01110101 direct data (direct)#data

注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 4) 以寄存器间接地址为目的地址的传送指令(3条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV @Ri,A 1111011i (Ri)A i=0,1 1 MOV @Ri,direct 1110011i direct ((Ri)) (direct)   2 MOV @Ri,#data 0111010i data (Ri)#data

注意:以上传送指令的结果不影响程序状态字寄存器PSW标志。 例3.2 已知相应单元的内容如下,请指出下列指令执行后各单元内容相应的变化。 例3.2 已知相应单元的内容如下,请指出下列指令执行后各单元内容相应的变化。 寄存器R0 50H 寄存器R1 66H 寄存器R6 30H 内部RAM:50H 60H 内部RAM:66H 45H 内部RAM:70H 40H

(1) MOV A,R6 (2) MOV R6,70H (3) MOV 70H,50H (4) MOV 40H,@R0 (5) MOV @R1,#88H 解:(1) MOV A,R6执行后A=30H。 (2) MOV R6,70H执行后R6=40H。 (3) MOV 70H,50H执行后(70H)=60H。 (4) MOV 40H,@R0执行后(40H)=60H。 (5) MOV @R1,#88H执行后(66H)=88H。  

2. 16位 数据传送指令(1条) #data16 入数据指针 助记符格式 机器码(B) 相应操作 指令说明 机器周期 2. 16位 数据传送指令(1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV DPTR,#data16 10010000 data15~8 data7~0 (DPTR)  #data16 把16位常数装入数据指针 2 #data16 入数据指针

注意:以上指令结果不影响程序状态字寄存器PSW标志。 3. 外部数据传送指令(4条) 助记符格式 机器码(B) 相应操作 指令说明 机器 周期 MOVX A,@DPTR 11100000 A((DPTR)) 把DPTR所对应的外部RAM地址中的内容传送给累加器A 2 MOVX A,@Ri 1110001i A ((Ri)) i=0,1 MOVX @DPTR,A 11110000 ((DPTR)) A 结果不影响P标志 MOVX @Ri,A ((Ri)) A i=0,1,结果不影响P标志

注意:① 外部RAM只能通过累加器A进行数据传送。 ② 累加器A与外部RAM之间传送数据时只能间接寻址方式,间接寻址寄存器为DPTR,R0,R1。 ③ 以上传送指令结果通常影响程序状态字寄存器PSW的P标志。 例3.3 把外部数据存储器2040H单元中的数据传送到外部数据存储器2560H单元中去。

解:MOV DPTR,#2040H MOVX A,@DPTR ;先将2040H单元的内容传送到累加器A中 MOV DPTR,#2560H MOVX @DPTR,A ;再将累加器A中的内容传送到2560H单元中

4. 交换和查表类指令(9条) 1) 字节交换指令(3条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XCH A,Rn 11001rrr ARn A与Rn内容互换 1 XCH A,direct 11000101 direct A(direct)   XCH A,@Ri 1100011i A((Ri)) i=0,1

注意:以上指令结果影响程序状态字寄存器PSW的P标志。 2) 半字节交换指令(1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XCHD A,@Ri 1101011i A3~0(Ri)3~0 低4位交换,高4位不变 1 注意:上面指令结果影响程序状态字寄存器PSW的P标志。

3) 累加器A中高4位和低4位交换(1条) 注意:上面指令结果不影响程序状态字寄存器PSW标志。 助记符格式 机器码(B) 相应操作 指令说明 机器周期 SWAP A 11000100 A 3~0A7~4 高、低4位互相交换 1 注意:上面指令结果不影响程序状态字寄存器PSW标志。 例3.4 设内部数据存储区2AH、2BH单元中连续存放有4个BCD码(1个BCD码占 a3 a2 a1 a0 a0 a1 a2 a3 2AH 2BH 2AH 2BH

解:MOV R0,#2AH ;将立即数2AH传送到寄存器R0中 MOV A,@R0 ;将2AH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与 低4位交换 MOV @R0,A ;将累加器A的内容传送到2AH单元中 MOV R1,#2BH

MOV A,@R1 ;将2BH单元的内容传送到累加器A中 SWAP A ;将累加器A中的高4位与低4位交换 XCH A,@R0 ;将累加器A中的内容与2AH单元的内容交换 MOV @R1,A ;累加器A的内容传送到2BH单元

注意:① 以上指令结果影响程序状态字寄存器PSW的P标志。 ② 查表指令用于查找存放在程序存储器中的表格。 4) 查表指令(2条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOVC A,@A+PC 10000011 A ((A+PC) A+PC所指外部程序存储单元的值送A 2 MOVC A,@A+DPTR 10010011 A((A+DPTR)) A+DPTR所指外部程序存储单元的值送A 注意:① 以上指令结果影响程序状态字寄存器PSW的P标志。 ② 查表指令用于查找存放在程序存储器中的表格。

注意:① 堆栈是用户自己设定的内部RAM中的一块专用存储区,使用时一定先设堆栈指针,堆栈指针缺省为SP=07H。 5) 堆栈操作指令(2条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 PUSH direct 11000000 direct SPSP+1 (SP)(direct) 将SP加1,然后将源地址单元中的数传送到SP所指示的单元中去 2 POP direct 11010000 (direct) (SP) SPSP-1 将SP所指示的单元中的数传送到direct地址单元中,然后SPSP-1 注意:① 堆栈是用户自己设定的内部RAM中的一块专用存储区,使用时一定先设堆栈指针,堆栈指针缺省为SP=07H。

② 堆栈遵循后进先出的原则安排数据。 ③ 堆栈操作必须是字节操作,且只能直接寻址。将累加器A入栈、出栈指令可以写成: PUSH/POP ACC 或 PUSH/POP 0E0H 而不能写成: PUSH/POP A ④ 堆栈通常用于临时保护数据及子程序调用时保护现场和恢复现场。 ⑤ 以上指令结果不影响程序状态字寄存器PSW标志。

例3.5 设堆栈指针为30H,把累加器A和DPTR中的内容压入,然后根据需要再把它们弹出,编写实现该功能的程序段。 解:MOV SP,#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-SP,SP=32H POP DPH ;(SP)→DPH,SP-SP,SP=31H POP ACC ;(SP)→ACC,SP-SP,SP=30H

3.3.3 算术运算类指令 1. 加、减法指令(22条) 1) 加法指令(8条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 3.3.3 算术运算类指令 1. 加、减法指令(22条) 1) 加法指令(8条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ADD A,Rn 00101rrr A(A+Rn) n=0~7, rrr=000~111 1 ADD A,direct 00100101 AA+(direct)   ADD A,@Ri 0010011i A(A+(Ri)) i=0,1 ADD A,#data 00100100 data AA+#data ADDC A,Rn 00111rrr AA+Rn+CY ADDC A,direct 00110101 direct AA+(direct)+CY ADDC A,@Ri 0011011i AA+(Ri)+CY ADDC A,#data 00110100 data AA+#data+CY

注意:① ADD与ADDC的区别为是否加进位位CY。 ② 指令执行结果均在累加器A中。 ③ 以上指令结果均影响程序状态字寄存器PSW的CY、OV、AC和P标志。 2) 减法指令(4条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 SUBB A,Rn 1001rrr AA-(Rn)-CY n=0~7 rrr=000~111 1 SUBB A,direct 10010101 direct AA- (direct)-CY   SUBB A,@Ri 1001011i AA- (Ri)-CY i=0,1 SUBB A,#data 10010100 data AA-(#data)-CY

注意:① 减法指令中没有不带借位的减法指令,所以在需要时,必须先将CY清0。 ② 指令执行结果均在累加器A中。 ③ 减法指令结果影响程序状态字寄存器PSW的CY、OV、AC和P标志。 例3.6 编写计算12A4H+0FE7H的程序,将结果存入内部RAM 41H和40H单元,40H存低8位,41H存高8位。 解:单片机指令系统中只提供了8位的加减法运算指令,两个16位数(双字节)相加可分为两步进行,第一步先对低8位相加,第二步再对高8位相加。

高8位 低8位 1 2 A 4 H ① A4H + E7H = 8BH 进位1 +   0 F E 7 H ② 12H + 0FH + 1 = 22H 2 2  8 B 进位 1 1 1 ② ① 加法指令 ADDC ADD 程序如下: MOV A,#0A4H ;被加数低8位→A

ADD A,#0E7H ;加数低8位E7H与之相加,A=8BH,CY=1 MOV 40H,A ;A→(40H),存低8位结果 MOV A,#12H ;被加数高8位→AADDC A,#0FH ;加数高8位+A+CY,A=22H MOV 41H,A ;存高8位运算结果 3) BCD码调整指令(1条) 助记符格式 机器码(B) 指令说明 机器周期 DA A 11010100 BCD码加法调整指令 1

注意:① 结果影响程序状态字寄存器PSW的CY、OV、AC和P标志。 ② BCD(Binary Coded Decimal)码是用二进制形式表示十进制数,例如十进制数45,其BCD码形式为45H。BCD码只是一种表示形式,与其数值没有关系。 BCD码用4位二进制码表示一位十进制数,这4位二进制数的权为8421,所以BCD码又称为8421码。十进制数码0~9所对应的二进制码如表3.3所示。

在表3.3中,用4位二进制数表示一个十进制数位,例如56D和87D的BCD码表示为 0101 0110 (56D) 十进制数码 1 2 3 4 5 6 7 8 9 二进制码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 在表3.3中,用4位二进制数表示一个十进制数位,例如56D和87D的BCD码表示为 0101 0110 (56D) 1000 0111 (87D) 0001 0100 0011 (143D)

③ DAA指令将A中的二进制码自动调整为BCD码。 ④DAA指令只能跟在ADD或ADDC加法指令后,不适用于减法。   例3.7 说明指令MOV A,#05H和ADD A,#08H及DA A的执行结果。 解:MOV A,#05H ;05H→A ADD A,#08H ;05H+08H→A,A=0DH DA A ;自动调整为BCD码,A=13H

4) 加1减1指令(9条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 INC A 00000100 AA+1 影响PSW的P标志 1 INC Rn 00001rrr RnRn+1 n=0~7, rrr=000~111 INC direct 0101 direct (direct)(direct)+1   INC @Ri 0000011i (Ri)(Ri)+1 i=0,1 INC DPTR 10100011 DPTRDPTR+1 2 DEC A 00010100 AA-1 DEC Rn 00011rrr RnRn-1 DEC direct 00010101 direct DEC @Ri 0001011i (Ri)(Ri)-1

注意:以上指令结果通常不影响程序状态字寄存器PSW。 例3.8 分别指出指令INC R0和INC @R0的执行结果。设R0=30H,(30H)=00H。 解: INC R0 ;R0+1=30H+1=31H→R0,R0=31H INC@R0 ;(R0)+1=(30H)+1→(R0),(30H)=01H,R0中内容不变 2. 乘、除法指令

注意:乘法结果影响程序状态字寄存器PSW的OV(积超过0FFH则置1,否则为0)和CY(总是清0)以及P标志。 2) 除法指令(1条) 1) 乘法指令(2条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MUL AB 10100100 BAA*B 无符号数相乘,高位存B,低位存A 4 注意:乘法结果影响程序状态字寄存器PSW的OV(积超过0FFH则置1,否则为0)和CY(总是清0)以及P标志。 2) 除法指令(1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 DIV AB 10000100 AA/B的商 BA/B的余数 无符号数相除,商存A,余数存B 4

注意:① 除法结果影响程序状态字寄存器PSW的OV(除数为0则置1,否则为0)和CY(总是清0)以及P标志。 ② 当除数为0时结果不能确定。

3.3.4 逻辑运算及移位类指令 1. 逻辑运算指令(20条) 1) 逻辑与指令(6条) 助记符格式 机器码(B) 相应操作 指令说明 3.3.4 逻辑运算及移位类指令 1. 逻辑运算指令(20条) 1) 逻辑与指令(6条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL A,direct 01010101 direct AA∧direct 按位相与 1 ANL A,Rn 01011rrr AA∧Rn n=0~7, rrr=000~111 ANL A,@Ri 0101011i AA∧(Ri) i=0,1 ANL A,#data 01010100 data AA∧#data   ANL direct,A 01010010 direct (direct)(direct)∧A 不影响PSW的P标志 ANL direct,#data 01010011 direct data (direct) (direct)∧#data 2

注意:① 以上指令结果通常影响程序状态字寄存器PSW的P标志。 ② 逻辑与指令通常用于将一个字节中的指定位清0,其它位不变。 2) 逻辑或指令(6条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ORL A,direct 01000101 direct AA∨direct 按位相或 1 ORL A,Rn 01001rrr AA∨Rn n=0~7, rrr=000~111 ORL A,@Ri 0100011i AA∨(Ri) i=0,1 ORL A,#data 01000100 data AA∨#data   ORL direct,A 01000010 direct (direct)(direct)∨A 不影响PSW的P标志 ORL direct,#data 01000011 direct data (direct) (direct)∨#data 2

注意:① 以上指令结果通常影响程序状态字寄存器PSW的P标志。 ② 逻辑或指令通常用于将一个字节中的指定位置1,其余位不变。 3) 逻辑异或指令(6条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 XRL A,direct 01100101 direct AA(direct) 按位相异或 1 XRL A,Rn 01101rrr AARn n=0~7, rrr=000~111 XRL A,@Ri 0110011i AA (Ri) i=0,1 XRL A,#data 01100100 data AA#data   XRL direct,A 01100010 direct (direct)(direct)A 不影响PSW的P标志 XRL direct,#data 01100011 direct data (direct) (direct)#data 2

注意:① 以上指令结果通常影响程序状态字寄存器PSW的P标志。 ② “异或”原则是相同为0,不同为1。 4) 累加器A清0和取反指令(2条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 CLR A 11100100 A00H A中内容清0,影响P标志 1 CPL A 11110100 A A中内容按位取反,影响P标志

注意:执行带进位的循环移位指令之前,必须给CY置位或清0。 2. 循环移位指令(4条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 RL A 00100011 ┌──────┐ └←A7←A0←┘ 循环左移 1 RLC A 00110011 └CY─A7←A0┘ 带进位循环左移,影响CY标志 RR A 00000011 └→A7→A0→┘ 循环右移 RRC A 00010011 └CY→A7→A0┘ 带进位循环右移,影响CY标志 注意:执行带进位的循环移位指令之前,必须给CY置位或清0。

控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。 3.3.5 控制转移类指令 控制转移类指令的本质是改变程序计数器PC的内容,从而改变程序的执行方向。控制转移指令分为:无条件转移指令、条件转移指令和调用/返回指令。 1. 无条件转移指令(4条) 1) 长转移指令(1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 LJMP addr16 00000010 addr15~8 addr7~0 PCaddr16 程序跳转到地址为addr16开始的地方执行 2

注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 该指令可以转移到64 KB程序存储器中的任意位置。 2) 绝对转移指令 (1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 AJMP addr11 a10a9a800001 addr7~0 PC10~0addr11 程序跳转到地址为PC15~11addr11开始的地方执行,2 KB内绝对转移 2

注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 该指令转移范围是2 KB。 例3.9 指令KWR: AJMP KWR1的执行结果。 解:设KWR标号地址=1030H,KWR1标号地址=1100H,该指令执行后PC首先加2变为1032H,然后由1032H的高5位和1100H的低11位拼装成新的PC值0001000100000000B,即程序从1100H开始执行。

注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 该指令的转移范围是以本指令的下一条指令为中心的-128~+127字节以内。 3) 相对转移指令 (1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 SJMP rel 10000000 rel PCPC+rel -80H(-128)~7FH(127)短转移 2 注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 该指令的转移范围是以本指令的下一条指令为中心的-128~+127字节以内。 ③ 在实际应用中,LJMP、AJMP和SJMP后面的addr16、addr11或rel都是用标号来代替的,不一定写出它们的具体地址。

注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 该指令通常用于散转(多分支)程序。 2. 条件转移指令(8条) 4) 间接寻址的无条件转移指令(1条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 JMP @A+DPTR 01110011 PCA+DPTR 64 KB内相对转移 2 注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 该指令通常用于散转(多分支)程序。 2. 条件转移指令(8条)

注意:① 以上指令结果不影响程序状态字寄存器PSW。 1) 累加器A判0指令(2条) 助记符格式 机器码(B) 相应操作 机器周期 JZ rel 0110000 若A=0, 则PCPC+rel, 否则程序顺序执行 2 JNZ rel 01110000 若A≠0, 则PCPC+rel, 否则程序顺序执行 注意:① 以上指令结果不影响程序状态字寄存器PSW。 ② 转移范围与指令SJMP相同。

注意:① 以上指令结果影响程序状态字寄存器PSW的CY标志。 ② 转移范围与SJMP指令相同。 2) 比较转移指令(4条) 助记符格式 机器码(B) 相应操作 机器周期 CJNE A,#data,rel 10110100 data rel 若A≠#data, 则PCPC+rel,否则顺序执行;若 A<#data,则CY=1,否则CY=0 2 CJNE Rn,#data,rel 10111rrr 若 Rn≠#data,则PCPC+rel,否则顺序执行;若Rn<#data,则CY=1,否则CY=0 CJNE @Ri,#data,rel 1011011i 若(Ri)≠#data,则PCPC+rel,否则顺序执行;若(Ri)<#data,则CY=1,否则CY=0 CJNE A,direct,rel 10110101 direct rel 若A≠(direct),则PCPC+rel,否则顺序执行;若A<(direct),则CY=1,否则CY=0 注意:① 以上指令结果影响程序状态字寄存器PSW的CY标志。 ② 转移范围与SJMP指令相同。

注意: ① DJNZ指令通常用于循环程序中控制循环次数。 ② 转移范围与SJMP指令相同。 ③ 以上指令结果不影响程序状态字寄存器PSW。 3) 减1非零转移指令(2条) 助记符格式 机器码(B) 相应操作 机器周期 DJNZ Rn,rel 11011rrr rel RnRn-1,若Rn≠0,则PCPC+rel, 否则顺序执行 2 DJNZ direct,rel 11010101 direct rel (direct)(direct)-1,若(direct)≠0,则PCPC+rel,否则顺序执行 注意: ① DJNZ指令通常用于循环程序中控制循环次数。 ② 转移范围与SJMP指令相同。 ③ 以上指令结果不影响程序状态字寄存器PSW。

注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 调用范围与AJMP指令相同。 3. 调用和返回指令(5条) 1) 绝对调用指令(1条) 助记符格式 机器码(B) 相应操作 机器周期 ACALL addr11 a10a9a810001 addr7~0 PC PC+2 SP  SP+1,(SP)PC0~7 SP  SP+1,(SP)PC8~15 PC0~10  addr11 2 注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 调用范围与AJMP指令相同。

注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 调用范围与LJMP指令相同。 2) 长调用指令(1条) 助记符格式 机器码(B) 相应操作 机器周期 LCALL addr16 00010010 addr15~8 addr7~0 PCPC+3 SP SP+1,SPPC0~7 SP SP+1,SPPC8~15 PC addr16 2 注意:① 该指令结果不影响程序状态字寄存器PSW。 ② 调用范围与LJMP指令相同。

注意:该指令结果不影响程序状态字寄存器PSW。 3) 返回指令(2条) 助记符格式 机器码(B) 相应操作 机器周期 RET 00100010 PC8~15  (SP), SP SP-1 PC0~7  (SP), SP SP-1 子程序返回指令 2 RETI 00110010 PC8~15  SP, SP SP-1 PC0~7  SP, SP SP-1 中断返回指令 注意:该指令结果不影响程序状态字寄存器PSW。

注意:该指令结果不影响程序状态字寄存器PSW。 4) 空操作(1条) 助记符格式 机器码(B) 相应操作 指令说明 NOP 00000000 空操作 消耗1个机器周期 注意:该指令结果不影响程序状态字寄存器PSW。

3.3.6 位操作类指令 位操作指令的操作数是“位”,其取值只能是0或1,故又称之为布尔操作指令。位操作指令的操作对象是片内RAM的位寻址区(即20H~2FH)和特殊功能寄存器SFR中的11个可位寻址的寄存器。片内RAM的20H~2FH共16个单元128个位,我们为这128个位的每个位均定义一个名称:00H~7FH,称为位地址,如表3.4所示。对于特殊功能寄存器SFR中可位寻址的寄存器的每个位也有名称定义,如表3.5所示。

表3.4 片内RAM位寻址区的位地址分布 位地址/位名称 字节地址 D7 D6 D5 D4 D3 D2 D1 D0 7F 7E 7D 7C 7B 7A 79 78 2FH 77 76 75 74 73 72 71 70 2EH 6F 6E 6D 6C 6B 6A 69 68 2DH 67 66 65 64 63 62 61 60 2CH 5F 5E 5D 5C 5B 5A 59 58 2BH 57 56 55 54 53 52 51 50 2AH 4F 4E 4D 4C 4B 4A 49 48 29H 47 46 45 44 43 42 41 40 28H

续表(2) 3F 3E 3D 3C 3B 3A 39 38 27H 37 36 35 34 33 32 31 30 26H 2F 2E 2D 2C 2B 2A 29 28 25H 27 26 25 24 23 22 21 20 24H 1F 1E 1D 1C 1B 1A 19 18 23H 17 16 15 14 13 12 11 10 22H 0F 0E 0D 0C 0B 0A 09 08 21H 07 06 05 04 03 02 01 00 20H  

表3.5 SFR中的位地址分布 SFR 位地址/位名称 字节 地址 D7 D6 D5 D4 D3 D2 D1 D0 B F7H F6H F5H F4H F3H F2H F1H F0H F0H ACC E7H E6H E5H E4H E3H E2H E1H E0H E0H ACC.7 ACC.6 ACC.5 ACC.4 ACC.3 ACC.2 ACC.1 ACC.0 PSW D7H D6H D5H D4H D3H D2H D1H D0H D0H CY AC F0 RS1 RS0 OV F1 P

续表(2) IP BFH BEH BDH BCH BBH BAH B9H B8H B8H — — — PS PT1 PX1 PT0 PX0 P3 B7H B6H B5H B4H B3H B2H B1H B0H B0H P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0 IE AFH AEH ADH ACH ABH AAH A9H A8H A8H EA — — ES ET1 EX1 ET0 EX0 P2 A7H A6H A5H A4H A3H A2H A1H A0H A0H P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

续表(3) SCON 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 98H SM0 SM1 SM2 REN TB8 RB8 TI RI P1 97H 96H 95H 94H 93H 92H 91H 90H 90H P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 TCON 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H 88H TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 P0 87H 86H 85H 84H 83H 82H 81H 80H 80H P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0

第一种是直接地址写法, 如 MOV C,0D2H,其中,0D2H表示PSW中的OV位地址。 对于位寻址,有以下三种不同的写法。 第一种是直接地址写法, 如 MOV C,0D2H,其中,0D2H表示PSW中的OV位地址。 第二种是点操作符写法,如 MOV C , 0D0H.2。 第三种是位名称写法,在指令格式中直接采用位定义名称,这种方式只适用于可以位寻址的SFR,如MOV C,OV。 1. 位传送指令(2条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 MOV C,bit 10100010 CY bit 位传送指令,结果影响CY标志 2 MOV bit,C 10010010 bit CY 位传送指令,结果不影响PSW

注意:位传送指令的操作数中必须有一个是进位位C,不能在其它两个位之间直接传送。进位位C也称为位累加器。 2. 位置位和位清零指令(4条) 助记符格式 机器码(B) 相应操作 指令说明 机器周期 CLR C 11000011 CY 0 位清0指令,结果影响CY标志 1 CLR bit 11000010 bit bit 0 位清0指令,结果不影响PSW SETB C 11010011 CY1 位置1指令,结果影响CY标志 SETB bit 11010010 bit bit 1 位置1指令,结果不影响PSW

注意:① JBC与JB指令的区别是:前者转移后并把寻址位清0,后者只转移不清0寻址位。 ② 以上指令结果不影响程序状态字寄存器PSW。 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit 10000010 bit CY CY∧bit 位与指令 2 ANL C/bit 10110010 bit CY CY∧ ORL C,bit 01110010 bit CY CY∨bit 位或指令 ORL C/bit 10100010 bit CY CY∨ CPL C 10110011 CY 位取反指令 CPL bit 10110010 bit 位取反指令,结果不影响CY c 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit 10000010 bit CY CY∧bit 位与指令 2 ANL C/bit 10110010 bit CY CY∧ ORL C,bit 01110010 bit CY CY∨bit 位或指令 ORL C/bit 10100010 bit CY CY∨ CPL C 10110011 CY 位取反指令 CPL bit 10110010 bit 位取反指令,结果不影响CY 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit 10000010 bit CY CY∧bit 位与指令 2 ANL C/bit 10110010 bit CY CY∧ ORL C,bit 01110010 bit CY CY∨bit 位或指令 ORL C/bit 10100010 bit CY CY∨ CPL C 10110011 CY 位取反指令 CPL bit 10110010 bit 位取反指令,结果不影响CY 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit 10000010 bit CY CY∧bit 位与指令 2 ANL C/bit 10110010 bit CY CY∧ ORL C,bit 01110010 bit CY CY∨bit 位或指令 ORL C/bit 10100010 bit CY CY∨ CPL C 10110011 CY 位取反指令 CPL bit 10110010 bit 位取反指令,结果不影响CY 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit 10000010 bit CY CY∧bit 位与指令 2 ANL C/bit 10110010 bit CY CY∧ ORL C,bit 01110010 bit CY CY∨bit 位或指令 ORL C/bit 10100010 bit CY CY∨ CPL C 10110011 CY 位取反指令 CPL bit 10110010 bit 位取反指令,结果不影响CY 助记符格式 机器码(B) 相应操作 指令说明 机器周期 ANL C,bit 10000010 bit CY CY∧bit 位与指令 2 ANL C/bit 10110010 bit CY CY∧ ORL C,bit 01110010 bit CY CY∨bit 位或指令 ORL C/bit 10100010 bit CY CY∨ CPL C 10110011 CY 位取反指令 CPL bit 10110010 bit 位取反指令,结果不影响CY 3. 位运算指令(6条) 助记符格式 机器码(B) 相应操作 机器周期 JB bit,rel 00100000 bit rel 若bit=1,则PCPC+rel,否则顺序执行 2 JNB bit,rel 00110000 bit rel 若bit=0,则PCPC+rel,否则顺序执行 JBC bit,rel 00010000 bit rel 若 bit=1,则PCPC+rel,bit0,否则顺序执行 注意:①  JBC与JB指令的区别是:前者转移后并把寻址位清0,后者只转移不清0寻址位。 ② 以上指令结果不影响程序状态字寄存器PSW。

注意:以上结果不影响程序状态字寄存器PSW。 5. 判CY标志指令(2条) 助记符格式 机器码(B) 相应操作 机器周期 JC rel 01000000 若CY=0,则PCPC+rel,否则顺序执行 2 JNC rel 01010000 若CY≠0,则PCPC+rel,否则顺序执行 注意:以上结果不影响程序状态字寄存器PSW。 例3.10 用位操作指令编程计算逻辑方程P1.7=ACC.0×(B.0+P2.1)+ ,其中“+”表示逻辑或,“×”表示逻辑与。

解: 程序段如下: MOV C,B.0 ;B.0→C ORL C,P2.1 ;C或P2.1→C ANL C,ACC.0 ;C与ACC.0→C,即ACC.0×(B.0+P2.1) →C ORL C,/P3.2 ;C 或/P3.2, 即ACC.0×(B.0+P2.1)+ →C MOV P1.7,C ;C →P1.7

3.3.7 常用伪指令 单片机汇编语言程序设计中,除了使用指令系统规定的指令外,还要用到一些伪指令。伪指令又称指示性指令,具有和指令类似的形式,但汇编时伪指令并不产生可执行的目标代码,只是对汇编过程进行某种控制或提供某些汇编信息。下面对常用的伪指令作一简单介绍。

1. 定位伪指令ORG 格式:[标号:] ORG 地址表达式 功能:规定程序块或数据块存放的起始位置。 例如:ORG 1000H ;表示下面指令MOV A,#20H存放于1000H开始的单元 MOV A,#20H 2. 定义字节数据伪指令DB 格式:[标号:] DB 字节数据表 功能:字节数据表可以是多个字节数据、字符串或表达式,它表示将字节数据表中的数据从左到右依次存放在指定地址单元。

例如: ORG 1000H TAB:DB 2BH,0A0H,'A',2*4 ;表示从1000H单元开始的地方存放数据2BH,0A0H,    ;41H(字母A的ASCII码),08H 3. 定义字数据伪指令DW 格式:[标号:] DW 字数据表 功能:与DB类似,但DW定义的数据项为字,包括两个字节,存放时高位在前,低位在后。 例如:ORG 1000H DATA:DW 324AH,3CH ;表示从1000H单元开始的地方存放数据32H,4AH,00H,    ;3CH(3CH以字的形式表示为003CH)

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

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

6. 数据赋值伪指令DATA 格式:符号名 DATA 表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,只能定义单字节数据,但可以先使用后定义,因此用它定义数据可以放在程序末尾进行数据定义。 例如: … MOV A,#LEN … LEN DATA 10 尽管LEN的引用在定义之前,但汇编语言系统仍可以知道A的值是0AH。

7. 数据地址赋值伪指令XDATA 格式:符号名 XDATA 表达式 功能:将表达式的值或某个特定汇编符号定义为一个指定的符号名,可以先使用后定义,并且用于双字节数据定义。 例如:DELAY XDATA 0356H … LCALL DELAY ;执行指令后,程序转到0356H单元执行 8. 汇编结束伪指令END 格式:[标号:] END 功能:汇编语言源程序结束标志,用于整个汇编语言程序的末尾处。

ACALL DELAY MOV P1,#0FFH MOV P1,#55H MOV P1,#0AAH AJMP MAIN ORG 0000H MAIN: MOV P1,#00H ACALL DELAY MOV P1,#0FFH MOV P1,#55H MOV P1,#0AAH AJMP MAIN

DELAY: MOV R6,#250 DEL1: MOV R7,#200 DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 RET END

ORG. 0000H MAIN:. MOV P1,#01H. ACALL DELAY. MOV. P1,#02H. ACALL DELAY ORG 0000H MAIN: MOV P1,#01H ACALL DELAY MOV P1,#02H ACALL DELAY MOV P1,#04H ACALL DELAY MOV P1,#08H ACALL DELAY MOV P1,#10H ACALL DELAY AJMP MAIN

ORG 0000H MAIN: MOV A,#01H LOOP: MOV P1,A ACALL DELAY RL A AJMP LOOP