第四章 指令系统及汇编语言程序设计.

Slides:



Advertisements
Similar presentations
2017年3月5日 单片机原理与应用 背景知识调查.
Advertisements

第四章 指令系统及汇编语言程序设计.
8051 指令.
第4章 MCS-51程序设计 4.1 汇编语言的格式与伪指令 4.2 汇编语言程序设计步骤 4.3 查表程序设计 4.4 循环程序设计
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 4.1 程序编制的方法和技巧 4.2 源程序的编辑和汇编 4.3 基本程序结构 4.4 常用程序举例.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
本章小结 C51单片机指令系统概述 C51单片机寻址方式 C51单片机指令系统
第3章 MCS-51指令系统 3.1 简 介 指令概述 一台微机所具有的所有指令的集合,就构成了指令系统。指令系统越丰富,说明CPU的功能越强。例如,Z80 CPU中,没有乘法和除法指令,乘法和除法运算必须用软件来实现,因此执行速度相对较慢;而MCS-51单片机提供了乘法和除法指令,实现乘法和除法运算时就要快得多。
单片机原理与应用.
逆向工程-汇编语言
第2章 MCS-51单片机指令系统与汇编语言程序设计
第四章 典型CPU及指令系统举例.
第2章 汇编语言与汇编程序 ——8086/8088指令系统 mov ax,12h call display Jmp 1234h.
单片机原理与应用.
報告者:朱耿育 紀翔舜 組員:詹以群 張永傑 指導老師:梁新潁
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
单片机应用技术 项目一 循环彩灯装置 第6讲 指令功能及汇编语言程序设计(一) 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
第四章 指令系统及汇编语言程序设计.
本章分为七节,主要介绍: 3.1 指令格式及常用符号 C51的寻址方式 3.3 数据传送类指令(29条) 3.4 算术运算类指令(24条)
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第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单片机的系统扩展与应用.
7.1 机器指令 7.2 操作数类型和操作类型 7.3 寻址方式 7.4 指令格式举例 7.5 RISC 技术.
第2章 单片机的结构原理与 简单应用 (课时:10学时).
第八章 MCS-51与数码显示器和键盘的接口 一、MCS-51与数码显示器接口 数码显示器是单片机应用产品中最常用的廉价的输 出设备,它由8个发光二极管按一定规律排列而成, 当某一发光二极管导通时,则会被点亮,控制不同 组合的二极管导通,就能显示出各种字符。 1.显示器的结构.
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第三章 指令系统.
第3章 指令系统及程序设计举例 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数
逆向工程-汇编语言
CPU结构和功能.
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
第四章 指令系统及汇编语言程序设计.
第四章 指令系统及汇编语言程序设计.
第3章 MCS-51单片机指令系统 3.1 指令概述 3.2 寻址方式 3.3 MCS-51系列单片机的指令系统.
C语言程序设计 主讲教师:陆幼利.
单片机应用技术 项目一 循环彩灯装置 第3讲 8051单片机的存储器 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
第3章 MCS-51的指令系统 介绍MCS-51汇编语言的指令系统。 3.1 指令系统概述
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
第三章 MCS 51的硬件结构.
第二章 补充知识 2.1 总线和三态门 一、总线(BUS) 三总线结构 数据总线DB(Data Bus)
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
3.1 指令系统简介 一、几个概念 二、汇编语言指令格式 三、指令的分类 四、指令的符号说明 主讲:吴政江 下一页.
第三章 计算机系统的组成与工作原理.
任务五 学习、应用控制转移类指令 单片机应用技术 认知1 掌握无条件转移指令格式及应用
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
College of Computer Science & Technology
单片机应用技术 项目一 循环彩灯装置 第5讲 MCS-51单片机指令系统及指令格式 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
得技通电子 问题 三 判断题:.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
循环程序设计 在程序中包含重复执行的程序段称为循环程序设计。循环程序可以使程序结构性强、可读性好,从而大大提高了程序质量。
数据表示 第 2 讲.
4.3 汇编语言程序设计 顺序程序设计 顺序程序设计是最基本的程序设计。它是按照指令排列的先后顺序依次执行,每条指令都必须执行,且只执行一遍。顺序程序设计一般比较单一、简单,常常作为复杂程序的一部分。
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第二章 MCS-51单片机程序设计 第一章 8086程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
认知1 掌握“与”、“或”和“异或”指令格式及应用
第3章 80C51单片机指令系统 教学基本要求: (1)、了解单片机的指令系统、编程语言等基本概念;
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第三章 CPU子系统 西南石油大学计算机科学学院 主讲教师 杨 梅 联系电话:
Presentation transcript:

第四章 指令系统及汇编语言程序设计

任课教师:刘忠国 山东大学课程中心网站: http://course.sdu.edu.cn/G2S/stcmcu.cc 网站:http://www.mcu001.com keil μvision软件下载及指导手册(Help→μvision Help) http://www.keil.com/ 何宾STC单片机原理及应用 > http://www.gpnewtech.com/study/stc/

第四章 指令系统及汇编语言程序设计 本章学习目标 了解助记符、指令格式 掌握单片机寻址方式 掌握单片机指令系统 掌握单片机汇编语言程序设计及开发环境 13:42:57

第四章 指令系统及汇编语言程序设计语言 4.1 编程语言 4.2 指令格式及其分类 4.3 寻址方式 4.4 数据传送类指令 4.4 数据传送类指令 4.5 逻辑操作类指令 4.6 算术运算类指令 4.7 位操作指令 4.8 控制类转移指令 4.9 汇编语言程序设计 4.10 汇编语言程序调试 4.11利用ISP工具将程序下载到单片机中验证程序 13:42:57

§4.1 编程语言 1、指令及指令系统 指令是计算机完成某种指定操作的命令,程 序是以完成一定任务为目的指令的有序组合。 指令的集合构成指令系统。 2、指令两种形式 (在CPU的同一指令系统中) 汇编指令的形式:人们进行编写、调试程序使 用的形式; 机器指令的形式:是机器所能识别的二进制数 或十六进制数的形式。 13:42:57

§4.1编程语言 编写计算机程序有三种不同层次的计算机语言: 机器语言, 汇编语言和高级语言(不针对具体cpu)。 机器语言 缺点是不直观,不易识别、理解和记忆,因此 编写、调试程序时都不采用这种形式的语言。 13:42:57

汇编语言(Assembly Language) 是用英文缩写形式的助记符书写的指令,地址、数据也可用符号表示。 优缺点:与机器语言程序相比,编写、阅读和修改都比较方便,不易出错。但用汇编语言编写的源程序必须进行汇编。 目前,常用计算机软件自动完成汇编工作。 不同的CPU具有不同的汇编语言,一般不能通用。 在实际系统中,对程序执行速度要求较高而软件处理功能有限的场合,以及对硬件操作有较强的针对性的场合,常用汇编语言编程。 13:42:57

高级语言(High Level Language) 优缺点:不针对某种具体的计算机,通用性强。用 高级语言编程不需了解计算机内部的结构和原理, 这种语言的形式更接近英语,对于非计算机专业的 人员比较易于掌握。 高级语言程序易读、易编写,程序结构比较简洁, 大量用于科学计算和事务处理。 用高级语言编写的源程序同样必须编译后,计算机 才能执行。编译程序比汇编程序复杂得多,需要占 用较大容量的存储器,编译的过程也要花费更多的 时间。 13:42:57

4.1.1 助记符语言 4.1.2 操作码 汇编语言的指令由操作码和操作数组成。 操作码用规定的英文缩写字母组成,称为助记符。例如: 4.1.1 助记符语言 汇编语言的指令由操作码和操作数组成。 操作码用规定的英文缩写字母组成,称为助记符。例如: MOV A, #76H 表示将十六进制的数据76H送到累加器A中, 二进制机器语言是:01110100和01110110 十六进制数是:74H,76H。 74H: 操作码, 将一个数据传送到累加器A; 76H: 操作数。 4.1.2 操作码 操作码功能:表示对操作数进行什么操作。 表示形式:由英文缩写字母组成,容易理解和记忆。 例, MOV: 数据的传送; ADD:数据相加; ANL: 逻辑与 13:42:57

4.1.3 操作数 操作数功能:指出对什么数进行操作以及将操作的结 果放到何处。 4.1.3 操作数 操作数功能:指出对什么数进行操作以及将操作的结 果放到何处。 操作数的表示形式:可以是参与操作的数据,也可以 是参与操作的数据所在存储器的地址,还可以是数据 所在的寄存器等不同形式。 寻找这些不同形式的操作数的方式称为寻址方式。 立即数 定义:汇编语言指令中, 直接参与操作的数据。 表示方法:十进制格式、十六进制格式、二进制格式。 数据进制区分是在数据后面加后缀:十进制数后缀为D或省略,十六进制数后缀为H, 二进制数后缀为B。 MOV A, #76H 13:42:57

立即数 注意 参与操作的数据的位数要与参与操作的环境相匹配。 例如,指令MOV A, #71H,立即数71H是8位二进制 数01110001B的十六进制格式,而A是8位的寄存器, 所以给8位寄存器送的数据不能超出8位。 同理,给十六位寄存器送的数据不能超出16位。 MOV DPTR, #1234H 数据只能是整数的格式,不能是小数的格式。逻辑 数据也和二进制数据的表示一样,可以用十进制、 十六进制、二进制的数据格式表示。 13:42:57

立即数 当汇编指令中的数据是十六进制且是以字母开头时, 该数据应加一个前导0,以表示后面的字母不是变量 而是数字。 MOV A, #0FFH, 在8051内核单片机中,一个数据的前面有前缀#号则 表示后面的数据是立即数,如果数据的前面没有#号, 则说明该数据表示的是直接地址。 13:42:57

§4.2 指令格式及其分类 4.2.1 汇编语言的一般格式 标号: 指令助记符 目的操作数, 源操作数 ; 注释 1、标号 4.2.1 汇编语言的一般格式 标号: 指令助记符 目的操作数, 源操作数 ; 注释 1、标号 标号也叫做标识符(或符号地址),放在指令之前,是 其后指令所在地址的名字,必须跟一冒号":"。 标号的作用 标号用于表示某条指令跳转时的目标地址。 程序在修改和调试时,指令所在的实际地址往往会 随之变化,而代表地址的名字可以不变。因此,使 用标号,可以给编程和修改带来极大的方便。 不是每条指令都需要标号,通常在该指令作为跳转 或调用的目的地址时需要标号。 13:42:57

标号的命名必须遵循下列规则: 标号由字母(a~z或A~Z)、数字(0~9)或某些特殊字符(下划线_、@、?等)组成; 标号长度不允许超过31个字符; 标号不能与指令助记符相同。 符合上述规则的标号: NEXT_1 AA1Q MCCl MODEL?? _DELAY 不符合上述规则的标号: 5FVM -F33G ? MOV ADD XOR 其中最后三个标号均为指令助记符,不能用做标号。 13:42:57

标号:指令助记符 目的操作数,源操作数 ;注释 标号:指令助记符 目的操作数,源操作数 ;注释 2、指令助记符 指令助记符也叫做操作码,是指令名称的代表符号, 是一条指令语句中必需的,表示本指令进行的操作。 例:MOV 表示传送 MOV A,#13H ADD A, #0AAH 3、操作数 操作数是指令参与操作的数据,有些指令不需要操作 数,只有操作码;有些指令需要2个或3个操作数。 在数据传送时,送出数据的叫做源操作数,接收数据 的叫做目的操作数。指令中,目的操作数写在前,源 操作数写在后,两操作数之间用逗号“,”分开。有些 操作数可以用表达式表示。 可以用不同的寻址方式得到操作数。 NOP CLR A CJNE A, direct, rel 13:42:57

标号:指令助记符 目的操作数,源操作数 ;注释 4.2.1 汇编语言的一般格式 标号:指令助记符 目的操作数,源操作数 ;注释 4、注释 注释是为了阅读程序方便由编程人员加上的,并不 影响程序的执行和功能,所以,注释部分不是必需 的。 注释部分必须用分号“;”开头,一般都写在它所注 释的指令的后面,注释本身只用于对指令功能加以 说明,使阅读程序时便于理解,所以注释可以用中 文或者英文甚至任何便于理解的字符表示。 13:42:57

A(地址为E0H)、B地址,见表3-2特殊功能寄存器(49页) 4.2.2 指令代码的存储格式 指令存储位置:程序存储器 指令由操作码和操作数组成,不同的指令所需要的操 作数的个数有可能是不同的,所以每条指令的实际字 节数不是固定的, 例如,程序中有如下两条连续存放的指令: MOV A,#68H ;将立即数68H送到累加器A中; 是两字节指令; 机器码:74H(操作码)和68H(操作数). MOV B, #73H ;将立即数73H送到寄存器B中; 是三字节指令; 机器码: 75H(操作码)、F0H和73H; B(地址为F0H) 和73H是操作数。 A(地址为E0H)、B地址,见表3-2特殊功能寄存器(49页) 13:42:58

指令存放格式 指令在存储器中以二进制数形式、以字节为单位按照地址递增的顺序存放。 从低地址开始,先存放操作码,然后是操作数。 “MOV A, #68H”, “MOV B, #73H” 地址 指令 … 1000H 74H 1001H 68H 1002H 75H 1003H F0H 1004H 73H 假设这两条指令存放起始地址是1000H, 则存放的格式为: 左边一列表示的是程序存储器的地址 右边一列是存放在该地址单元中的二 进制指令。 13:42:58

程序执行过程 程序执行时是依次逐条取出指令执行的。 单片机内有一程序计数器PC, 指向要执行的程序指令 代码存放的地址, 具有自动加一特点,因而指令被逐字 节取出, 然后译码执行。 首先取操作码74H,经译码得知这是一条两字节指令, 其操作是将立即数送到累加器A中,而操作数是以立 即数形式放在操作码的下一地址中,程序计数器自动 加一,将下一地址中数据68H取出来,送到累加器A 中。 地址 指令 1000H 74H 1001H 68H 1002H 75H 1003H F0H 1004H 73H … 13:42:58

程序执行过程 程序计数器PC再次自动加一, 指向下一条指令第一个 字节,取出75H, 经译码知这是一条三字节指令, 其操作 是将一立即数送到寄存器B中, B用该指令第二个字节F0H来表示, F0H是寄存器B的地 址, 该指令第三个字节内容就是要传送的立即数73H。 地址 指令 1000H 74H 1001H 68H 1002H 75H 1003H F0H 1004H 73H … 这样随着程序计数器逐次加 一, 指令被一个字节一个字 节地取出、译码和执行。 13:42:58

4.2.3 指令中的符号约定 在描述单片机指令系统时,经常使用各种缩写符号: 各种符号及含义如表4-1所示。 4.2.3 指令中的符号约定 在描述单片机指令系统时,经常使用各种缩写符号: 各种符号及含义如表4-1所示。 A: 累加器ACC(与A物理上相同, 分别用于不同寻址方式) B: 寄存器B CY: 进(借)位标志位, 在位操作指令中作为累加器使用 addr8(direct):直接地址, 代表8位内部RAM地址。SFR可用名字 bit: 位地址, 内部RAM中的可寻址位和SFR中的寻址位。 #data8: 8位常数(8位立即数), 取值范围#00H~#0FFH。 #data16:16位常数(16位立即数), 取值#0000H~#0FFFFH。 @: 间接寻址, @Ri: 寄存器间接寻址, i=0, 1。 @DPTR 13:42:58

4.2.3 指令中的符号约定 表4-1 rel: 8位带符号地址偏移量, -128~+127(补码)。常用符号表示, 偏移量在汇编时由程序计算。 Rn: 当前工作区(0~3区)的工作寄存器(n=0,1,…,7)。 Ri: 可作地址寄存器的工作寄存器R0和R1(i=0, 1)。 X: X寄存器内容。 (X): 由X寄存器寻址的存储单元的内容。 →:表示数据的传送方向。 / :表示对该位操作数取反,如:/bit。 ∧: 表示逻辑与 ∨: 表示逻辑或 ⊕: 表示逻辑异或 13:42:58

§4.3寻址方式 指令中寻找操作数的方式,称为寻址方式。 STC15F2K60S2单片机共有7种寻址方式 立即数寻址 寄存器寻址 直接寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址 13:42:58

1、立即数寻址 指令中,操作所需要操作数就在指令中,是指令的组成 部分,CPU在得到指令的同时也立即得到了操作数。 例如: M0V A,#28H ; 功能:将立即数28H送入累加器A中。指令执行后, A中为28H,A中原来数据被覆盖,记作:A←28H 源操作数是立即数28H, 目的操作数是累加器A。 指令的机器码为两个字节:74H,28H。 注意:因累加器A是8位的,立即数只能是8位的, 且只能是整数, 不能是小数、变量或其他类型数据。 立即数只能作为源操作数,且位数要与目的操作数一致。 #号表示其后所跟的数据是立即数而不是直接地址。 13:42:58

1、立即数寻址 MOV A, #28H (机器码74H,28H)执行过程示意图 执行顺序 程序存储器 地址 0100H 74H 0101H 28H 0102H ←操作码 加1 PC ←操作数 ← 下一条指令操作码 28H 累加器A 图4-1 MOV A,#28H 执行过程示意图 13:42:58

1、立即数寻址 立即数寻址方式优点 采用立即数寻址方式的指令主要用来对寄存 器或存储器赋值。因为操作数可以从指令中直 接取得,不需要再到其他地方去寻找操作数, 所以,立即数寻址方式的指令执行速度很快。 13:42:58

2、寄存器寻址 指令所用操作数在CPU的内部寄存器中, 指令中操作数 用寄存器名(A, R0~R7, B, DPTR)表示。一条指令中, 源 操作数和目的操作数, 都可采用寄存器寻址方式。 寄存器地址隐含在指令码中(也是隐含寻址方式)。 例如: MOV A, #45H ;A←立即数45H(机器码: 74H 45H) 其中,源操作数45H为立即寻址方式,目的操作数为寄存器寻址方式。 INC R0 ;R0 ←R0+1 (机器码: 08H) 该指令只有一个操作数,为寄存器寻址方式。 13:42:58

2、寄存器寻址 MOV A, R1 ;A←R1 源操作数为寄存器R1,目的操作数为A,两者都是 寄存器寻址方式。 在寄存器寻址方式中,操作数用寄存器表示时有两 种含义 寄存器用于表示目的操作数时,是寄存器名,表示 是某个寄存器,用于接收数据; 寄存器用于表示源操作数时,是表示该寄存器中的 数据。 13:42:58

其中,R5所在的内部 RAM单元地址与寄存器组的选择有关。 2. 寄存器寻址 INC Rn ; 机器码08H~0FH(00001rrrB) 例: INC R5 ;指令机器码为0DH (00001101B) ;把寄存器R5的内容加1后再送回R5 该指令的执行过程如图所示。 其中,R5所在的内部 RAM单元地址与寄存器组的选择有关。 RAM单元地址 寻址 寄存器R5 指令机器码0DH 0 0 1 05H 1 0 15H 图4-2 INC R5指令执行过程示意图 程序状态字(PSW) (41页,45页) 13:42:58

2、寄存器寻址 MOV A, R1 寄存器寻址方式优点 采用寄存器寻址方式的指令在执行时,操作数就在寄 存器中,对该操作数的存取操作在CPU内部进行,不 需使用总线周期读存储器,所以执行速度很快。 注意 数据传送之后, 源操作数中数据并不消失, 仍然存在。 例如, 用寄存器作源操作数时,数据传送出之后寄存器 中的内容仍然存在, 只有作为目的操作数的寄存器被写入数据后,原来的 数值会被新写入的数据所取代。这种性质,对于存储 器也是同样的。 13:42:58

3、直接寻址 指令的操作数在存储器中时,指令中给出的是该操作 数所在存储器的地址。 优点 直接寻址方式对存储器进行访问时最简单、最直接。 例如: MOV A, 45H 功能:将地址为45H的存储器单元中的内容取到A中。 源操作数寻址方式是直接寻址, 表示要送出的数据在直 接地址45H中;目的操作数寻址方式是寄存器寻址。 机器码: E5H, 45H, 其中, E5H是操作码, 45H是操作数。 13:42:58

MOV A, 45H (机器码E5H, 45H)执行过程 设机器码放在程序存储器地址0100H和 0101H两单元中, 指令执行前, 数据存储器的45H中的数据为34H, 则执行 后A=34H,将A中原来的数据覆盖。 执行顺序 程序存储器 地址 内部数据存储器RAM 地址 0100H E5H 0101H 45H 0102H 45H 34H 46H ←操作码 ←操作数 ← 下一条指令操作码 34H 累加器A 图4-3 MOV A, 45H 执行过程示意图 13:42:58

图4-4 MOV A,@R0 (机器码E6H) 指令执行过程示意图 4、寄存器间接寻址(简称寄存器间址) 操作数所在存储单元的有效地址在指定的寄存器中,指 令中给出的是存放这个地址的寄存器。 用作寄存器间接寻址的寄存器有R0, R1,数据指针DPTR。 使用间接寻址的标志是在寄存器前面加一个“@”号,以 区别于寄存器寻址。 MOV A, @R0 MOV A,@R0 (机器码E6H) 内部数据存储器RAM 地址 执行顺序 程序存储器 地址 31H 51H 32H 0100H E6H 0101H 0102H 31H R0 ← ←操作码 ← 下一条指令操作码 51H 累加器A 图4-4 MOV A,@R0 (机器码E6H) 指令执行过程示意图 13:42:58

操作数地址=偏移量(A内容) +变址基值。 1. PC作基地址加上A的内容形成操作数地址A+PC。 5.变址寻址 指令中指定存放变址基值的变基址寄存器 变址寄存器 操作数地址=偏移量(A内容) +变址基值。 1. PC作基地址加上A的内容形成操作数地址A+PC。 2. DPTR作基地址加上A内容形成操作数地址A+DPTR。 两种寻址方式: 例: MOVC A, @A+PC, 指令操作码助记符MOVC表示从程 序存储器取数据, PC内容指向下一地址作为基地址, 加上A 中数据就构成了所要取数的地址。 例: …………… 0100 7402 MOV A, #02 0102 83 MOVC A, @A+PC 0103 00 NOP 0104 00 NOP 0105 64 DB 64H ……… 到MOVC A, @A+PC时, A=2,PC=0103H,因此, A+PC=0105H, @A+PC表示把0105H作 为地址, 从这个地址指向 的单元中取数据送到A中, 所以结果就是把0105H中 的数据64H送到了A中。 地址 机器码 汇编程序 PC 13:42:58

5、变址寻址 例如:MOVC A, @A+DPTR,DPTR的内容加上A中 的数据就构成了所要取数的地址。 例: …………… MOV A, #02H ;A=2 MOV DPTR, #TABLE ; DPTR=TABLE MOVC A, @A+DPTR ; A+DPTR =TABLE+2 ……… TABLE: DB 30H DB 31H DB 32H 数字0, 1, 2…的ASCII码值(附录A) TABLE+2 →A, A=32H 变址寻址优点: 适于访问固化在程序存储器中常数表格,以完成查表功能, 如不同码制之间数据转换等。因DPTR可用指令赋值, MOVC A, @A+DPTR寻址使用更广泛。 13:42:58

6、相对寻址 功能: 该寻址方式主要用于相对跳转指令。 功能: 该寻址方式主要用于相对跳转指令。 寻址方法: 把指令中给定的地址偏移量与本下一条指 令所在单元地址(即程序计数器PC中的内容)相加,即 得到真正的程序转移地址。 现行的PC 与变址方式区别 该偏移量有正、负号, 在机器指令中必须以补码形式给 出, 所转移范围为相对于当前PC值的-128~+127之间。 例: JC 80H (机器码40H 80H) 若C=0,则PC值不变,若C=1,则以现行的PC为基地 址加上80H(补码,即数值-80H=-128D)得到转向地址。 PC内容指向下一指令地址 13:42:58

若转移指令放在1005H,该指令的执行过程如图所示。 注意, 偏移量以补码给出,所以80H代表着-80H =-128D 。 6、相对寻址 —— JC 80H (机器码40H 80H)执行过程 若转移指令放在1005H,该指令的执行过程如图所示。 注意, 偏移量以补码给出,所以80H代表着-80H =-128D 。 程序存储器 地址 PC→ PC+1→ PC+2→ 0F87H 1005H 0100 0000 1006H 1000 0000 1007H 新PC→ 即跳转的地址 符号扩展FF80H+1007H=0F87H 操作码 偏移量 现行的PC 下一指令地址 图4-5 JC 80H执行示意图 13:42:58

7、位寻址 位操作指令能对位地址空间每一位进行运算和传送操作。 例如:MOV C, P1.0 ;将P1.0的状态传送到C SETB 20H.6 ;将20H单元的D6位置为1 CLR 25H ;将25H位的内容清零 综上所述,指令的寻址方式就是寻找操作数或寻找操作 数的地址的方式。 寻址方式与存储器的结构有关。例如,访问程序存储器 只能用变址寻址的方式;访问特殊功能寄存器只能用直 接寻址(位寻址)方式;访问外部数据存储器只能用寄存 器间接寻址方式等。 一般来说,寻址方式越多,计算机功能越强,灵活性越 大。所以寻址方式对机器的性能有重大影响。 13:42:58

§4.4 数据传送类指令(29条) 数据传送类指令是使用频率最高的一类指令。 功能:主要用来给单片机的内部和外部资源赋值、 进行堆栈的存取操作等。数据传送类指令执行前后, 对程序状态字PSW一般不产生影响。 (注: A为目的操作数时, 影响PSW的奇偶标志位P。) 分类:根据操作方式不同, 数据传送类指令分为三 种: 数据传送(22条) 数据交换(5条) 栈操作(2条) 13:42:58

4.4.1 数据传送指令(22条) 1、MOV指令(16条) 2、MOVX指令(4条) 3、MOVC指令 (2条) 1、MOV指令 4.4.1 数据传送指令(22条) 1、MOV指令(16条) 2、MOVX指令(4条) 3、MOVC指令 (2条) 1、MOV指令 MOV指令作用区间: 内部数据存储器和特殊功能寄存器 使用方法 利用Rn可直接访问某工作寄存器; 利用@Ri可间接寻址内部数据RAM的某一字节单元; 直接寻址则可遍访问内部数据RAM(00H~7FH)和特殊 功能寄存器空间。 13:42:58

(注: A为目的操作数时, 影响PSW的奇偶标志位P。) 1、MOV指令(16条) 对双操作数的数据传送指令允许在工作寄存器、内 部数据RAM、累加器A和特殊功能寄存器(SFR)任意 两个之间传送一个字节的数据,而且立即操作数能 送入上述任何单元中。 利用MOV指令还可以把16bit的立即数直接送入数据 指针DPTR中。 格式:MOV 目的字节, 源字节 功能:把源操作数指定的字节变量传送到目的操作数 指定的单元中,源字节内容不变。MOV指令一般不 影响别的寄存器或标志。 (注: A为目的操作数时, 影响PSW的奇偶标志位P。) 13:42:58

(1) 立即数送累加器A和Rn、内部RAM、SFR MOV A, #data8 ;A← #data8 MOV addr8,#data8 ;(addr8)← #data8 MOV @Ri, #data8 ;(Ri)← #data8 direct: addr8 MOV Rn, #data8 ;Rn← #data8 @是间接寻址, (Ri)表示由Ri(i=0,1)寄存器值所指出RAM单元。 例: MOV R0, #60H ;将立即数60H送到寄存器R0中 MOV @R0, #56H ;将56H送到R0间接寻址的单元(地址60H)中 用直接寻址(direct或addr8)可把立即数送入低128字节 内部RAM任意单元或任一特殊功能寄存器: 例: MOV 20H, #56H ;将立即数56H送入20H单元中 MOV P1, #80H ;把80H直接送入P1口(口地址为90H)中 直接寻址 13:42:58

(2)Rn、内部RAM、SFR与累加器A传送数据。 1、MOV指令(16条) (2)Rn、内部RAM、SFR与累加器A传送数据。 有6条指令: MOV A, addr8 ;A←(addr8) MOV A, @Ri ;A← (Ri) MOV A, Rn ;A← Rn MOV addr8, A ;(addr8)← A MOV @Ri, A ;(Ri)← A MOV Rn, A ;Rn←A 13:42:58

(2)Rn、内部RAM、SFR与累加器A传送数据 间接寻址@Ri是以Ri的内容作为地址进行寻址, 由于Ri 为8位寄存器, 所以其寻址范围可为00H~FFH。例如: MOV R1, #82H MOV A, @R1 上述指令对STC12C5A60S2单片机而言, 其功能是将内 部RAM地址82H单元中内容送到A中。内部80H~FFH 的RAM单元, 只能用这种间接寻址方式进行访问。 欲从DPL取数到累加器A,用直接寻址方式: MOV A, 82H;执行后A的值是DPL(地址为82H)中的值 也可使用下面指令 MOV A, DPL 特殊功能寄存器只能直接寻址或位寻址 13:42:58

1、MOV指令(16条) (3)Rn、SFR和内部数据RAM之间的数据传送。 有5条指令: MOV addr8, addr8 ;(addr8目)←(addr8源) MOV addr8, @Ri ;(addr8)←(Ri) MOV addr8, Rn ;(addr8)←Rn MOV @Ri, addr8 ;(Ri)←(addr8) MOV Rn, addr8 ;Rn←(addr8) 例: MOV 60H, 50H ; 把50H单元内容送到60H单元 13:42:58

1、MOV指令(16条) 例, 若设PSW中标志位RS1, RS0为“01”, 则R0~R7 选中第1组(有四组: 0,1,2,3)工作寄存器区(08H~0FFH), 此时, “MOV 40H, R0” 与 “MOV 40H, 08H” 是等价的。 例如,用立即寻址指令可直接给内部RAM中30H和 P1口上置数(注:这里书中举例应属于(1) ): MOV 30H, #25H MOV P1, #0CAH 执行后:(30H)=25H,(P1)=0CAH。 13:42:58

功能:把16位常数装入数据指针DPTR 。只有 一条指令: 1、MOV指令(16条) (4)目标地址传送(1条) 功能:把16位常数装入数据指针DPTR 。只有 一条指令: MOV DPTR , #data16 例如: MOV DPTR , #0150H 表示把16位常数装入数据指针。执行后, DPTR=0150H,其中DPH=01H,DPL=50H 13:42:58

2、MOVX指令(4条) 功能: 用于累加器A和外部RAM或扩展并行I/O口进行数 据传送。这种传送只一种寻址方式, 即寄存器间接寻址。 两种寄存器用于间接寻址 用R1或R0进行寄存器间接寻址。该方式能访问外部 数据存储器(或扩展并行I/O口)256个字节中一个字节。 若要访问更大的空间,需使用P2口输出高8位地址。 需先给P2和Ri赋值,然后执行MOVX指令。 用16位的数据存储器地址指针DPTR进行寄存器间接 寻址。这种方法能遍访64KB的外部数据存储器(或扩 展并行I/O口)的任何单元。 13:42:58

2、MOVX指令(4条) 指令格式:MOVX 目的字节, 源字节 有4条指令 (A与外部RAM或I/O口进行数据传送) MOVX A, @DPTR ;A←(DPTR) MOVX A, @Ri ;A←(Ri) MOVX @DPTR, A ;(DPTR)←A MOVX @Ri, A ;(Ri)←A 注意:由于使用R1或R0寄存器间接寻址方式访问外 部数据存储器时,寻址范围受到256字节限制,因此, 在实际应用中,一般使用DPTR寄存器间接寻址方式 访问外部数据存储器。 13:42:58

例如:若外部数据存储器单元中: (0100H)=60H,(0101H)=2FH 2、MOVX指令(4条) 例如:若外部数据存储器单元中: (0100H)=60H,(0101H)=2FH 则执行: MOV DPTR , #0100H MOVX A, @DPTR ;执行后,累加器A=60H 13:42:58

3、程序存储器向累加器A传送指令——MOVC 查表:单片机提供2条查表指令,访问程序存储器。 指令采用变址寻址, 以PC或DPTR为基址寄存器, 以累 加器A为变址寄存器, 基址寄存器与变址寄存器内容相 加得到程序存储器某单元的地址值; MOVC指令把该存储单元的内容传送到累加器A中。 格式: MOVC A, @A+PC ;PC←PC+, A←(A+PC) MOVC A, @A+DPTR ;A←(A+DPTR) 功能: 把A中内容与基址寄存器(PC, DPTR)内容相加, 求得程序存储器单元地址, 再把该地址单元内容A。 指令执行后不改变基址寄存器内容, 因执行16位加法, 从低8位产生的进位将传送到高位去, 不影响任何标志。 13:42:58

3、程序存储器向累加器A传送指令——MOVC MOVC A , @A+PC MOVC A , @A+DPTR 这两条指令主要用于查表,即完成从程序存储器读取 数据的功能。 两条指令使用不同的基址寄存器, 使用范围也不同。 机器码:83H 机器码:93H 以PC为基址寄存器时,CPU在取出本指令后PC自动 加1,因为本指令为1字节指令,所以这时PC已不是 原值,而是PC+1的值。 因累加器中内容为8位无符号整数, 这使得本指令查表 范围只能在以PC当前值开始后的256字节范围内。 13:42:58

3、程序存储器向累加器A传送指令——MOVC MOVC A , @A+PC MOVC A , @A+DPTR 以DPTR作为基址寄存器时,由于DPTR的内容可赋 不同的值,使得该指令应用范围较为广泛,表格常 数可设置在64KB程序存储器的任何地址空间。 其缺点是,若DPTR已有它用,在赋表首地址之前 必须保护现场,执行完查表后再予以恢复。 13:42:58

3、程序存储器向累加器A传送指令——MOVC 【例4-1】 试编制根据累加器A中的数(0~9之间)查其平 方表的子程序。 解:程序代码如下: COUNT: PUSH DPH PUSH DPL ;保护DPTR内容 MOV DPTR , #TABLE ;赋表首址→DPTR MOVC A , @A+DPTR ;据A中内容查表 POP DPL POP DPH ;恢复DPTR原内容 RET ;返回 TABLE: DB 00, 01, 04, 09, 16, 25, 36, 49, 64, 81 13:42:58

4.4.2 数据交换指令 包括字节交换指令和半字节交换指令。 1、字节交换指令 XCH A, addr8 ;A←→(addr8) XCH A, @Ri ;A←→(Ri) XCH A, Rn ;A←→Rn 上述指令把累加器A中内容与第二操作数所指定的工作 寄存器、间接寻址或直接寻址的单元内容互相交换。 例如,设R0=20H,A=3FH,(20H)=75H, 执行指令 XCH A, @R0 ;执行结果A=75H,(20H)=3FH 13:42:58

4.4.2 数据交换指令 2、半字节交换指令 XCHD A, @Ri ;A3~0←→ (Ri) 3~0 4.4.2 数据交换指令 2、半字节交换指令 XCHD A, @Ri ;A3~0←→ (Ri) 3~0 指令把累加器A的低4位和寄存器间接寻址的内部RAM 单元的低4位交换, 高4位内容不变, 不影响标志位。 例如: 设A=69H (0110 1001),R1=30H,内部RAM中 30H的内容: (30H) =87H(1000 0111),指令 XCHD A, @R1 ; 执行结果:A=67H,(30H)=89H SWAP A ; A0~3 <=> A4~7(高低两半字节交换) 13:42:58

4.4.3 栈操作指令 栈的作用——保护断点, 保护现场 主程序调用子程序或中断处理过程时,分别要保存 返回地址即断点地址和保护现场,以便在返回时能 够回到调用前的程序段,继续运行原来的程序。 现场保护和恢复 保护现场:进入子程序或中断处理程序后要保护所 用到的通用寄存器的值。 恢复现场:子程序返回或中断处理返回前,还要能 够恢复这些寄存器的值 13:42:58

保护断点, 保护现场 保存返回地址的方法:将返回地址(断点地址)保存到堆 栈中(入栈或压栈), 返回主程序前从堆栈中取出上述 地址放回到指令计数器PC中(出栈或弹栈); 按照放回后的PC值, 从程序存储器中取指令执行就返 回到主程序被中断了的地方, 以继续执行主程序。 保护现场的方法: 将现场条件 (寄存器的值) 先推入 (PUSH) 堆栈保存, 然后再使用这些寄存器, 返回主 程序前, 使用POP指令恢复寄存器中的值。 13:42:58

堆栈区 位置:内部存储器的一部分区域专门用于堆栈 数据存取规则:后进先出(LIFO—Last In First Out), 即最后存入的数据将被最先取出。 堆栈指针SP:SP始终指向栈顶。 SP+1 入栈后 SP指向栈顶→ 出栈后 入栈操作:先SP+1→SP,指向栈顶的上一个空单元,然后把直接寻址单元的内容压入SP所指的单元中。 SP-1 出栈操作:先弹出栈顶内容到直接寻址单元,然后SP- 1→SP,形成新的堆栈指针。 图4-6 堆栈示意图 13:42:58

栈操作指令 PUSH addr8 ; SP←SP+1, (SP)←(addr8) POP addr8 ; (addr8)← (SP) , SP←SP- 1 分别完成两种堆栈操作: 入栈 (PUSH), 出栈(POP) 。 注意:PUSH指令和POP指令成对出现,并注意顺序。 例: PUSH ACC ;保护累加器ACC中内容 PUSH PSW ;保护标志寄存器内容 …… ;执行其他程序 POP PSW ;恢复标志寄存器内容 POP ACC ;恢复累加器ACC中内容 该程序执行后,累加器ACC和PSW寄存器中的内容可得到保护和正确的恢复。 13:42:58

正确: PUSH ACC ;保护累加器ACC中内容 PUSH PSW ;保护标志寄存器内容 …… ;执行其他程序 入栈出栈顺序错误会导致现场恢复错误 正确: PUSH ACC ;保护累加器ACC中内容 PUSH PSW ;保护标志寄存器内容 …… ;执行其他程序 POP PSW ;恢复标志寄存器内容 POP ACC ;恢复累加器ACC中内容 若为: PUSH ACC PUSH PSW …… ;其他程序 POP ACC POP PSW 则执行后,将使得ACC和PSW中的内容互换。 出入栈规则:后进先出 13:42:58

保护断点, 保护现场 举例 假设长调用子程序 LCALL Delay (机器码: 12H, 11H, 00H)在1000H存储器单元,如图所示。 地址 程序存储器 PC→ 1000H 12H 1001H 11H 1002H 00H 1003H 1100H 0C0H 1101H 0D0H 1102H 1103H 0E0H 1104H 1105H 1106H 1107H 1108H 22H 1109H ① LCALL Delay 地址 内部RAM PC+1→ 07H R7 08H 09H 0AH 0BH PC+2→ (ACC)=70H SP→ 现行PC ③ ② (PSW)=80H SP+1→ 03H 即下一指令地址 保护断点 SP+2→ 10H 保护现场 ⑤ ⑤ 新PC→ SP+3→ Delay地址 80H PSW PUSH PSW ④ SP+4→ 70H ACC 即调用的地址 PUSH ACC ⑥ 保护现场 ⑥ 堆栈区 POP ACC 恢复现场 POP PSW 保护断点, 保护现场的执行过程示意图 RET 13:42:58

保护断点, 保护现场 举例 假设长调用子程序 LCALL Delay (机器码: 12H, 11H, 00H)在1000H存储器单元,如图所示。 地址 程序存储器 PC→ 1000H 12H 1001H 11H 1002H 00H 1003H 1100H 0C0H 1101H 0D0H 1102H 1103H 0E0H 1104H 1105H 1106H 1107H 1108H 22H 1109H ① LCALL Delay 地址 内部RAM PC+1→ 07H R7 08H 09H 0AH 0BH PC+2→ (ACC)=70H SP-4→ 恢复断点 ⑦ 现行PC ② (PSW)=80H SP-3→ 03H 即下一指令地址 保护断点 SP-2→ 10H 保护现场 ⑤ ⑦ 新PC→ SP-1→ Delay地址 80H PSW PUSH PSW ④ ⑥ SP→ 70H ACC 即调用的地址 PUSH ACC 恢复现场 保护现场 ⑥ 堆栈区 POP ACC 恢复现场 POP PSW ⑦ 返回 保护断点, 保护现场的执行过程示意图 RET 13:42:58

数据传送类操作注意事项: 除POP, MOV指令将数据送到PSW外, 传送操作一般 不影响标志位。向A传送数据时, 会影响PSW的P标志。 把源地址单元内容送到目的地址单元后,源地址单元 中的内容不变。 对特殊功能寄存器SFR操作必须用直接寻址(位寻址)。 对STC15F2K60S2单片机内部RAM的80H~FFH单元 只能使用@Ri间接寻址方式访问。 将累加器A压入堆栈或弹出堆栈时, 应用PUSH ACC 和POP ACC指令, 不能用PUSH A和POP A指令。 否则, 程序编译会出错。因累加器写成A或ACC在汇编语 言指令中有区别, 使用A, 表示使用寄存器寻址方式; 而 使用ACC时, 表示使用直接寻址方式。 13:42:58

§4.5逻辑操作类指令(24条) 逻辑操作类指令完成与、或、异或、清“0”、求反、左 右移位等逻辑操作,共有24条。 分类:单操作数和双操作数 单操作数: 专对累加器A进行的逻辑操作, 包括: 清“0”、 求反、左右移位等,操作结果保存在累加器A中。 双操作数: 累加器A或直接寻址单元作为第一操作数 和第二操作数之间的逻辑与、或和异或操作,结果保 存在A中或直接寻址单元中。第二操作数可以是立即 数、寄存器Rn、内部数据RAM单元或者SFR。 13:42:58

§4.5逻辑操作类指令(24条) ←A ←A ←A ←A ←A 功能 指令形式 执行结果 单操作数 清0 CLR A A←0 取反 CPL A 左移 RL A ←A 带进位左移 RLC A ←A 右移 RR A ←A 带进位右移 RRC A ←A 4位环移 SWAP A ←A 数据传送类指令(数据交换指令) 13:42:58

§4.5逻辑操作类指令(24条) 功能 指令形式 执行结果 双操作数 与(∧) ANL ORL A, XRL 或(∨) 异或(⊕) A←A∧X A←A∨X A←A⊕X X代表格式中第二操作数 #data addr8 @Ri Rn A #data ANL ORL addr8, XRL addr8←addr8∧Y addr8←addr8 ∨ Y addr8←addr8 ⊕ Y Y代表格式中第二操作数 13:42:58

§4.5逻辑操作类指令 4.5.1 对累加 器A进行的逻辑操作 对累加器A进行的逻辑操作包括清“0” 、求反和移位: 1、累加器A清“0” CLR A ;A←0,把00H送入累加器A中 2、累加器A求反 CPL A ;A← ,把累加器内容按位求反后送入累加器A中 例如,设累加器A原来内容为67H 执行“CLR A”后将变成00H,再执行“CPL A”后将变为 0FFH 13:42:58

3、累加器A左右移位 RL A ;累加器左循环移位 RLC A ;累加器通过CY左循环移位 RR A ;累加器右循环移位 RRC A ;累加器通过CY右循环移位 SWAP A ; 累加器高低半字节互换 左移一位相当于乘以2,右移一位相当于除以2 例 MOV A ,#01H ;A←01H RL A ;A←02H RL A ;A←04H RL A ; A←08H 若继续执行下面指令: RR A ;A←04H RR A ;A←02H RR A ;A←01H,累加器内容又变为1。 通过进位标志CY的移位可用于检查一个字节中各位的状态或 用于逐位输出的情况,也可构成多个字节的移位操作。 13:42:58

3、累加器A左右移位 【例4-2】 在40H和41H中存放一个双字节数据(即16位数据), 高位字节数据在41H中, 低位字节数据在40H中,试将其除以2。 解: 利用循环右移指令可以将一个字节的数据除以2。如果将双字节数据除以2,可以考虑使用带进位标志CY的循环右移指令。程序代码如下: CLR C ;先将进位标志清零, 为第一次移位做准备 MOV A, 41H RRC A MOV 41H, A ;高位字节 MOV A, 40H MOV 40H, A 假设(41H)= 01H, (40H)= 02H :→258 A (41H) 01H D0→ 00H 02H A (40H) D0(41H) 81H 0081H:→129 13:42:58

3、累加器A左右移位 指令SWAP交换A中低和高半字节(位3~0和位7~4), 也看作是一个4位循环移位指令, 不影响标志。 例如: MOV A, #0A5H SWAP A ;执行结果 A=5AH 13:42:58

4.5.2 双操作数逻辑操作指令 双操作数的逻辑操作主要包括:直接地址单元(目的)与 累加器A、立即数之间, 以及累加器A(目的)与立即数、 内部存储器之间的逻辑操作。 逻辑操作是按位进行的。 “ANL”指令常用来屏蔽字节中的某些位, 与0则该位清0,与 1保留该位不变; “ORL”指令常用来使字节中的某些位置1, 或1则该位置1,或0保留该位不变; “XRL”指令用来对字节中某些位取反, 异或1则该位取反,异或0保留该位不变 ANL ORL addr8, XRL ANL ORL A, XRL 13:42:58

4.5.2 双操作数逻辑操作指令 1、累加器A (目的)与立即数、内部存储器之间的按位逻 辑操作: ANL(ORL, XRL) A, 4.5.2 双操作数逻辑操作指令 1、累加器A (目的)与立即数、内部存储器之间的按位逻 辑操作: ANL(ORL, XRL) A, 逻辑与、或、异或的定义分别如下所示: 与:A∧B代码组合 0×1=1×0=0×0=0 ;有0即0 1×1=1 ;全1为1 或:A∨B代码组合1+0=0+1=1+1=1 ;有1即1 0+0=0 ;全0为0 异或:A⊕B代码组合 0⊕1=1⊕0=1 ;相异为1 0⊕0=1⊕1=0 ;相同为0 13:42:58

4.5.2 双操作数逻辑操作指令 例如,设A的内容为63H,R2为0AAH,分别执行命 令(ANL、ORL、XRL)后,结果如下: ANL A, R2 ;结果A=22H ORL A, R2 ;结果A=0EBH XRL A, R2 ;结果A=0C9H 0110 0011 ∧ 1010 1010 0010 0010 0110 0011 ∨ 1010 1010 1110 1011 0110 0011 ⊕ 1010 1010 1100 1001 A=22H A=0EBH A=0C9H 13:42:58

4.5.2 双操作数逻辑操作指令 2、直接地址单元(内部低128字节RAM、SFR为目的)与 累加器A、立即数之间的按位逻辑操作 ANL(ORL,XRL) addr8, A ANL(ORL,XRL) addr8, #data8 上述指令完成内部低128字节数据RAM或SFR中直接 寻址单元与累加器A、立即数之间的逻辑与(或,异或) 操作,执行结果送回内部数据RAM或SFR中。 13:42:58

4.5.2 双操作数逻辑操作指令 例如,设50H单元的内容为0AAH, A中内容为15H, 则 分别执行下面指令时的结果如下: 4.5.2 双操作数逻辑操作指令 例如,设50H单元的内容为0AAH, A中内容为15H, 则 分别执行下面指令时的结果如下: ANL 50H, #0F0H ; (50H)∧0F0H=0AAH ∧0F0H ;结果(50H)=0A0H, 屏蔽50H单元的低4位(清零) ORL 50H, #0FH ; (50H)∨ 0F0H=0AAH ∨0FH ;结果(50H)= 0AFH,将50H单元的低4位置1 XRL 50H, A ;(50H)⊕(A),结果(50H)=0BFH 当用逻辑与、或、异或指令修改一个并行I/O口输出 内容时,则原始值将从该输出口的锁存器中读取,而 不是从该输出口的引脚上读取。 1010 1010 ⊕ 0001 0101 1011 1111 13:42:58

4.5.2 双操作数逻辑操作指令 【例4-3】 设两位用ASCII码表示的数分别保存在40H、 41H单元中, 编程把其转换成两位BCD数, 并以压缩形 式存入40H单元中。 解: 方法一: ANL 40H, #0FH ;40H的ASCⅡ码变成BCD码 MOV A, 41H ANL A, #0FH ;41H的ASCⅡ码变成BCD码 RL A ;左移4位 RL A ORL 40H, A ;结果存40H单元中 数字0~9的ASCII: 30H~39H 假设: (40H)=32H, (41H)=39H, (40H)=02H (A)=39H (A)=09H SWAP A 方法二 (A)=90H (92H)BCD (40H)=92H 13:42:58

§4.6算术运算类指令 该类指令主要完成加、减、乘、除四则运算,以及增量、 减量和二十进制调整操作。除增量、减量指令外,大多 数算术运算指令会影响到状态标志寄存器PSW。 表4-3 算术运算类指令对标志的影响 指令助记符 影响标志 备注 CY OV AC ADD(加) × “×”表示可置1或清“0”, “0”表示总清“0” ADDC(带进位加) SUBB(带借位减) MUL(乘) DIV(除) DA(二十进制调整) 13:42:58