第3章 指令系统及程序设计举例 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数

Slides:



Advertisements
Similar presentations
第7章 AT89S51单片机的 串行口 1.
Advertisements

第5章 中断系统 5.1 中断的概念 5.2 MCS-51单片机的中断流程 5.3 MCS-51的中断响应条件和中断处理
第七章 控制器 7.1 控制器的组成及指令的执行 7.2 控制方式和时序的产生 7.3 微程序控制器 7.4 微程序控制器及其微程序设计举例
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第四章 指令系统及汇编语言程序设计.
8051 指令.
第四章 指令系统及汇编语言程序设计.
本章分为四节,主要介绍: 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单片机指令系统
单片机原理与应用.
第9章 串行扩展技术 (课时:6学时).
第9章 数模转换器与模数转换器 本章学习目标 了解数模转换器的工作原理及性能指标 掌握模数转换器的应用 掌握数模转换器的应用.
第2章 MCS-51单片机指令系统与汇编语言程序设计
報告者:朱耿育 紀翔舜 組員:詹以群 張永傑 指導老師:梁新潁
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
第二部分 微机原理 第4章 汇编语言 程序设计 主讲教师:喻红.
单片机应用技术 项目一 循环彩灯装置 第6讲 指令功能及汇编语言程序设计(一) 《单片机应用技术》精品课程组 湖北职业技术学院机电工程系.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第8章 模拟接口 8.1 模拟接口概述 8.2 DAC及其接口 8.3 ADC及其接口.
第二部分 微机原理 第3章 MCS-51的 指令系统 主讲教师:喻红.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第14章 单片机应用系统抗干扰 与可靠性设计 1.
第6章 MCS - 51单片机内部定时器/ 计数器 及串行接口 6.1 定时器/计数器的结构及工作原理 6.2 方式和控制寄存器
本章分为三节,主要介绍: 6.1 计算机串行通信基础 C51的串行口 6.3 单片机串行口应用举例.
第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单片机的系统扩展与应用.
第七章 MCS-51并行口的扩展 MCS51单片机内部有4个并行口,当内部并行口不够用时可以外扩并行口芯片。可外扩的并行口芯片很多,分成2类:不可编程的并行口芯片(74LS3734和74LS245)和可编程的并行口芯片(8255)。 7.1 不可编程并行口芯片的扩展 7.2 可编程并行口芯片的扩展.
单片机原理及应用 ——基于Proteus与Keil C 哈工大出版社
4.A/D与D/A转换器 1).DAC0832与MCS-51接口
第2章 单片机的结构原理与 简单应用 (课时:10学时).
第八章 MCS-51与数码显示器和键盘的接口 一、MCS-51与数码显示器接口 数码显示器是单片机应用产品中最常用的廉价的输 出设备,它由8个发光二极管按一定规律排列而成, 当某一发光二极管导通时,则会被点亮,控制不同 组合的二极管导通,就能显示出各种字符。 1.显示器的结构.
本 章 重 点 单片机的简单I/O扩展 8255A可编程并口芯片 8279可编程键盘/显示器接口芯片 单片机键盘接口技术
单片机原理 单 片 机 单片机接口技术 单片机应用技术.
第三章 指令系统.
第十章 人机交互接口 本章学习目标 掌握键盘接口技术 掌握数码、液晶显示技术 了解数码管显示驱动和键盘扫描控制专用芯片.
第10章 综合实训 课题一 水温控制系统设计 一、实训目的 二、课题要求 熟悉常用温度传感器AD590的特性及接口电路的设计方法;
第8章 MCS-51串行口 8.1 串行口及其通信方式 8.2 IBM-PC系列机与 单片机 的通信技术.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第2章 单片机系统组成原理 2.1 MCS-51单片机组成原理 2.2 单片机复位电路设计 2.3 MCS-51存储器配置
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
单元五 MCS-51单片机内部资源 5.1 任务九 单片机计数并显示 5.2 任务十 单片机流水灯控制 5.3 任务十一 两台单片机数据互传
本 章 重 点 单片机的结构特点 单片机的存储器特点 I/O端口的特点 CPU时序 课时安排:3个课时.
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
第四章 指令系统及汇编语言程序设计.
第4章 中断技术 一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。
单片机系统设计 教师:朱华贵 2016年03月01日
数码管数字时钟电路的设计 1. 系统硬件电路的设计
第3章 MCS-51指令系统 介绍MCS—51系列单片机的寻址方式 介绍MCS—51系列单片机的指令系统
第4章 80C51系列指令系统 教学目的:熟悉80C51系列单片机的寻址方式及 每一种寻址方式对应的寻址空间;掌 握每一条指令功能。
本章内容 MCS-51单片机指令系统的格式 MCS-51单片机寻址方式 指令系统的分析
5-6 串列埠模式0輸出埠擴充實習.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
CPU中的专用寄存器(SFR) 一、累加器Acc 二、通用寄存器B 三、程序计数器PC 四、堆栈指针SP 五、数据指针DPTR
第五讲:AT89C51单片机存储器结构 一、半导体存储器 二、存储器空间划分方法 三、数据存储器(RAM) 四、程序存储器(ROM)
3.1 指令系统简介 一、几个概念 二、汇编语言指令格式 三、指令的分类 四、指令的符号说明 主讲:吴政江 下一页.
第三章 计算机系统的组成与工作原理.
汽车单片机应用技术 学习情景1: 汽车空调系统的单片机控制 主讲:向楠.
四、手工汇编 完成汇编的方法有两种:手工汇编和汇编程序汇编 1.手工汇编步骤 A
单片机原理与应用.
3. 逻辑运算指令 A、简单逻辑操作指令 CLR A. (不影响CY、AC、 OV标志) CPL A
简单芯片扩展I/O接口 8155可编程接口芯片及其使用 键盘及显示器接口设计 A/D和D/A转换接口技术
单片机应用技术 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计
第二章 MCS-51单片机程序设计 第一章 8086程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第2章 80C51单片机的硬件结构 教学基本要求: (1)、熟悉单片机的定义、名称、分类方法;
第1章 微型计算机基础.
Presentation transcript:

第3章 指令系统及程序设计举例 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数 3.1 指令格式与寻址方式 一、指令格式 1. 指令 操作码 目标操作数,源操作数 89C51指令系统中,有1字节、2字节或3字节指令。 1字节:其中既包含操作码、又包含操作数信息。 2字节:1个字节表示操作码,另1个字节表示操作数或操 作数地址。 3字节:1个字节表示操作码,另2个字节表示操作数。 2. 伪指令 只用来对汇编过程进行控制,汇编时不产生机器码。 (1)ORG (汇编起始命令) 格式:ORG 汇编起始地址(16位)

(4)DATA(数据地址赋值命令,类似于EQU) 格式: 字符名称 DATA 表达式 将表达式的值赋给字符名称,常用于在程序中定义数据地址。 例:STRING DATA 21H NUM DATA 20H MOV R0,#STRING MOV NUM,A (2)END(汇编结束命令) 格式: END (3)EQU(赋值命令) 为字符名称赋值 格式: 字符名称 EQU 数或汇编符号 (4)DATA(数据地址赋值命令,类似于EQU) 格式: 字符名称 DATA 表达式 将表达式的值赋给字符名称,常用于在程序中定义数据地址。 (5)DB/DW(定义字节、字命令) 格式: [标号:] DB(DW) [项或项表] 注意:① DB时,项或项表是一个字节或是用逗号隔开的字节串 或是在‘ ’中的ASCII 字符串。 ② DW时,项或项表的存放方式是 高8位在低地址,低8位在高地址。 见P110例。

二、寻址方式 (6)DS(定义存储空间命令) 从指定地址开始保留若干单元。 格式: [标号:] DS 表达式 例: ORG 1000H DS 08H DB 30H,8AH 汇编后, (1008H)=30H,(1009H)=8AH 注意:以上的DB、DW、DS仅对程序存储器起作用,不能对数据存储器初始化。 (7)BIT(位地址符号命令) 将BIT后的位地址赋给字符名。 格式: 字符名 BIT 位地址 例: A1 BIT P1.0 ; P1口第0位的位地址 90H赋给了A1 二、寻址方式 ——寻找指令中操作数或操作数所在的地址,共有7种。

Reg寻址 MOV A,R0 ;R0 A Reg:R0~R7,A,B,CY,DPTR(对它们也可使用其地址) 2. 直接寻址 MOV A,3AH ;(3A)A,3AH的内容A 操作数部分是操作数所在的存储器单元的地址。 ① 片内RAM的128个存储单元 在89C51中,用直接寻址方式可访问 ② 所有的SFR(既可用地址,也可用名字) ③ 216个位地址空间 例1:MOV A,P1 例2: MOV SBUF,A MOV A,90H MOV 99H,A 此种寻址方式一般用于片内RAM和SFR。 立即寻址 MOV A,#3AH ;3AHA MOV DPTR,#2000H ; 2000H→DPTR ;(DPH)=20H 注:立即数前用‘#’,以区别地址。 ;(DPL)=00H

REG间接寻址 MOV A,@R0 ;若R0内容为65H, (65H) A。 (1) R0、R1为间接REG,寻址片内128字节的低位地址RAM 或片外RAM低地址的256个单元。 (2) DPTR为间接REG,寻址片外RAM 64KB。 @R0, @R1,SP (PUSH、POP) 寻址片内RAM 简言之, 有: @R0, @R1, @ DPTR 寻址片外RAM 此种寻址方式一般用于数据存储器(RAM)。 5. 变址寻址 只能用于访问程序存储器(ROM),从中取数。 以某个REG内容为基地址,然后加上地址偏移量以形成操作数地址。 在89C51中,用DPTR或PC作为变址REG(基地址),地址偏移量放在A中。 即:操作数地址=(A)+(DPTR),或=(A)+(PC)

例: MOVC A,@A+DPTR ;((A)+(DPTR))A MOVC A,@A+PC ;((A)+(PC))A 6. 相对寻址(ROM) ——只出现在相对转移指令中 相对偏移量的计算(以2字节指令为例): rel=(目标地址—源地址—2)补 相对转移指令执行时,是以当前PC(程序计数器)的值加上指令中规定的偏移量rel而形成实际的转移地址。 例:JC rel ;rel=75H 当指令JC被取出时,PC值已在原地址 上加2,这时程序转移到当前的PC+rel地址去执行,即转去当前PC+75H。

7. 位寻址(属于直接寻址) ——操作数中给出的是位地址,即片内RAM某一单元中的一位。 包括 ① 20H~2FH 的128个位单元地址00H~07FH ② 地址能被8整除的SFR 位地址常用 几种方式表示 ① 直接使用位地址:00H~07FH ② 寄存器名+位数: PSW.3 ③ 位名称 例:CLR bit (即:CLR 90H)

三、寻址空间及符号注释 1. 操作数寻址方式和有关空间 寻址方式 寻址空间 立即数寻址 程序存储器ROM 直接寻址 1. 操作数寻址方式和有关空间 寻址方式 寻址空间 立即数寻址 程序存储器ROM 直接寻址 片内RAM低128字节,特殊功能寄存器SFR,位地址空间 寄存器寻址 工作寄存器R0~R7,A,B,Cy,DPTR 寄存器间接寻址 片内RAM低128字节 [@R0,@R1,SP(仅PUSH,POP)] 片外RAM [@R0,@R1,@DPTR] 变址寻址 程序存储器 (@A+PC,@A+DPTR) 相对寻址 程序存储器256字节范围(PC+偏移量) 位寻址 片内RAM的20H~2FH字节地址 部分特殊功能寄存器SFR

2. 寻址方式中常用符号注释 (1)Rn(n=0~7) (2)Ri(i=0,1) (3)#data 8位立即数 (4)#data16 16位立即数 (5)direct 8位片内RAM单元(包括SFR)的直接地址 (6)addr11 11位目标地址 (7)addr16 16位目标地址 (8)rel 补码形式的8位地址偏移量 (9)bit 片内RAM或SFR的直接寻址位地址 (10)@ 间接寻址方式中,表示间址寄存器的符号 (11)(×) ×中的内容 (12)((×)) 由×指出的地址单元中的内容

3.2 89C51单片机的指令系统 五大类(111条): 1. 数据传送指令: 28条 2. 算术运算指令:24条 1. 数据传送指令: 28条 2. 算术运算指令:24条 3. 逻辑运算及移位:25条 4. 控制转移指令:17条 5. 位操作指令: 17条 一、数据传送指令 格式:MOV 目标,源 ;片内数据传送 MOVX 目标,源 ;累加器A与片外RAM传送 MOVC 目标,源 ;累加器与ROM传送 通用数据 传送指令 XCH 第一操作数,第二操作数 ;字节交换 XCHD 第一操作数,第二操作数 ;半字节交换 交换指令 PUSH POP 堆栈操作指令

片内数据传送(片内RAM区中的工作寄存器 Rn, A , 片内数据RAM, SFR之间) (1)以累加器A为目的操作数 ① MOV A,Rn ;ARn,Rn:R0~R7,寄存器寻址。 ② MOV A,direct ;A(direct),direct:8位片内RAM地 址(256B范围内),直接寻址。 ③ MOV A,@Ri ;A(Ri),R0或R1所指片内RAM (128B范围内),寄存器间接寻址 。 ④ MOV A,#data ;Adata,立即数data:00H~FFH (2)以寄存器Rn为目的的操作数(见P44 例) ① MOV Rn,A ; RnA,Rn:R0 ~R7,寄存器寻址。 ② MOV Rn, direct ; Rn( direct),直接寻址。 ③ MOV Rn,#data ;Rndata,立即寻址 注: ①无 MOV Rn,Rn 指令; ② P58 机器码的构成

(3)以直接地址为目的操作数 ① MOV direct,A ; (direct)A, Reg寻址 ② MOV direct,Rn ; (direct)Rn, Reg寻址 ③ MOV direct, direct ; (direct)(direct),直接寻址 ④ MOV direct,@Ri ; (direct)(Ri), Reg间接寻址 ⑤ MOV direct,#data ; (direct)data,立即寻址。 注意:将指令译成机器码时,第2、3字节的内容顺序。P59,P60。 (4)以间接地址为目的的操作数 ① MOV @Ri,A ;(Ri)A, Reg 寻址 ② MOV @Ri,direct ;(Ri)(direct),直接寻址 ③ MOV @Ri,#data ;(Ri)data,立即寻址 例:MOV A,#74H ;A=74H MOV 74H,#00H ;(74H)=00H MOV A,74H ; A=00H

例:MOV R0,#77H ;R0=77H MOV A,#03H ; A=03H MOV @R0,A ;( R0)=03H,即(77H)=03H. (5)16位数据传送指令 MOV DPTR,#data ;data为16位立即数。 DPHdataH, DPLdataL 低位字节dataL 高位字节dataH OP CODE 例:MOV DPTR,#2000H 例: ① MOV R0,#20H MOV @R0,#data  ;MOV 20H,#data ② MOV P1,#80H ;立即寻址 ③ MOV P3,P1 ;直接寻址

④ MOV R1,#82H MOV A,@R1 ;此指令有错,因为@Ri间接寻址仅能寻址片内低128字节RAM区(片内地址不超过7FH),或片外低256字节RAM区(必须使用MOVX )。 欲从82H取数到A,可使用:MOV A,82H 2. 累加器A与片外RAM间(或I/O口)间的数据传送 (1)利用Ri间接寻址,可以在256字节范围内寻址。 ① MOVX A,@Ri ;A(Ri) ② MOVX @Ri,A ;(Ri)A 注:这时,RAM地址 在Ri中由P0口送出,P2 口仍可用作I/O口。 (2)利用DPTR16位Reg间接寻址,可以在64KB范围内寻址。 ① MOVX A,@DPTR ;A(DPTR) ② MOVX @DPTR,A ;(DPTR)A 注: 每次传送8位数据

例: MOV DPTR,#0650H ;将0650H单元的8bit MOVX A,@DPTR ;数据送入A。 注: 因为外部的RAM与I/O端口是统一编址的,89C51指令系统中无单独的IN、OUT端口操作指令,所以指令中的8位或16位地址,可能是RAM地址,也可能是I/O端口地址。 无符号数相加 3. 累加器A与ROM之间的数据传送 ① MOVC A,@A+DPTR ;A(A+(DPTR)),变址寻址方式。 ② MOVC A,@A+PC ; A(A+PC), PC为新PC,变址寻址。 其中: ① 以(DPTR)为基址Reg,A为偏移量,可以查找到(DPTR)以后的256个字节范围内的代码或常数。因为(DPTR)的内容可在64 K范围内变化,故此种查表称为远程查表。 ② 以当前PC为基址,A为偏移量,可以查找当前指令所在地址以后的256个字节范围内的代码或常数,称近程查表。

例: MOV A,#06H MOV DPTR,#2000H MOVC A,@A+DPTR …… A 例: XXH 2000H 2006H …… A 例: (2字节) 1000H:MOV A,#30H (1字节) 1002H:MOVC A,@A+PC XXH A ////////// /////////// 1000H 1003H 1033H (1003H) … 1001H 1002H

例:对A中的BCD码,用查表法查得相应的ASCII码。 1. 用PC作为基址 MOV A,#03H ;查3的ASCII码 INC A ;考虑RET的存在,修正偏移量 MOVC A,@A+PC ;此指令取出后,PC指向RET单元 RET ;(1字节) TAB:DB 30H DB 31H DB 32H DB 33H … DB 39H ;ASCII码表

2. 用DPTR作为基址 MOV A,#03H MOV DPTR,#TAB ;不需要修正偏移量 MOVC A,@A+DPTR RET ;ASCII码表 TAB:DB 30H DB 31H … DB 39H 4. 交换指令(分字节交换、半字节交换两种) (1)字节交换指令 ① XCH A,Rn ;ARn reg寻址 ② XCH A,direct ;A(direct) 直接寻址 ③ XCH A,@Ri ;A(Ri) 间接寻址

① XCHD A,@Ri ;A0~3(Ri)0~3 ,高4位不变。 ② SWAP A ;A0~3 A4~7 ,A的高低4位互换。 (2)半字节交换指令 ① XCHD A,@Ri ;A0~3(Ri)0~3 ,高4位不变。 ② SWAP A ;A0~3 A4~7 ,A的高低4位互换。 5. 堆栈操作指令 (1)PUSH direct ;SP+1SP,直接地址寻址的单元内容(SP) (2)POP direct ;将(SP)(direct),SP - 1 SP 注: ①单元内容为8位的; ②堆栈只能设在内RAM区; ③89C51的堆栈是向上生长的。 (direct) 例:中断服务程序中保护现场 现场:DPTR=1234H,PSW=63H,A=54H,SP=38H 3CH 3BH 3AH 39H 38H=SP PUSH DPL PUSH DPH PUSH PSW PUSH A … POP A POP PSW POP DPH POP DPL 34H 12H 63H 54H

二、算术运算指令 1. 加法 ① ADD A,Rn ;AA+Rn ② ADD A,direct ;AA+(direct) 1. 加法 ① ADD A,Rn ;AA+Rn ② ADD A,direct ;AA+(direct) ③ ADD A,@Ri ;AA+(Ri) ④ ADD A,#data ;AA+data 影响标志位:进位标志CY,半进位AC,溢出OV(OV=C7 + C6), 奇偶P(A中1的个数为奇时P=1)。 A±CY ±Rn  A, 常用于多字节加、减法。 89C51 系列中没有不带借位的减法指令,需要的话,在SUBB前用CLR C指令清CY。 2. 带进(借)位加法/减法 ① ADDC/SUBB A , Rn ② ADDC/SUBB A , direct ③ ADDC/SUBB A , @Ri ④ ADDC/SUBB A , #data 注:加减运算中,目标操作数只能是A。

3. 增/减量指令 ① INC A ;A+1A ② INC Rn ;Rn+1Rn INC direct ;(direct)+1(direct) ④ INC @Ri ;@Ri+1@Ri ⑤ INC DPTR ;DPTR+1DPTR 注:这两条指令不影响PSW。 ⑥ DEC A ⑦ DEC Rn ⑧ DEC direct ⑨ DEC @Ri 4. 十进制调整指令——完成BCD码加法运算。 DA A ;跟在ADD或ADDC后,将A中结果进行十进制调整。 注: ①必须是压缩型BCD码运算; ②只能用于BCD码加法。 5. 乘法指令(8位无符号数) MUL AB ;BAA×B ;若结果>0FFH(B中有值),OV=1,CY=0。 ;否则(B中为0) , OV=0,CY=0。

6. 除法指令 (8位无符号数) DIV AB ;A/B的商A,A/B的余数B 例:16位数求补(求反+1)。 设16位二进制数在R1R0中,求补结果存于R3R2中。 MOV A,R0 ;16位数低8位送A CPL A ;求反 ADD A,#01H ;加1(不用INC,因为它不影 响标志位) MOV R2,A ;存补码低8位 MOV A,R1 ;取16位数高8位 ADDC A,#00H ;加进位 MOV R3,A ;存补码高8位 以上指令编程练习见: P93~P96

三、逻辑操作指令 (很方便对端口的某位操作: ANL P1,00000001B P1.7~P1.1=0,P1.0不变) 1. 简单操作指令 1. 简单操作指令 ① 累加器清零 CLR A ② 累加器取反 CPL A 2. 与 ① ANL A , Rn ;A /\ RnA ② ANL A, direct ③ ANL A, @Ri ④ ANL A, #data ⑤ ANL direct, A ;(direct) /\ A(direct) ⑥ ANL direct,#data ;(direct) /\ # data(direct) 注: ⑤ ⑥中若直接地址为 I/O 口, 则为 “读-改-写”操作。 例: MOV A,#35H ANL A,#0FH ;屏蔽高4位,保留低4位。

3. 或 ① ORL A,Rn ② ORL A,,direct ③ ORL A,@Ri ④ ORL A, #data ⑤ ORL direct,A ⑥ ORL direct,#data 注: ⑤ ⑥中若直接地址为I/O 口,则为“读-改-写”操作。 例:MOV A, #05H ORL A, #30H ;添加30H, 变成ASCII码 4. 异或 ① XRL A,Rn ② XRL A,direct ③ XRL A,@Ri ④ XRL A,#data ⑤ XRL direct, A ⑥ XRL direct,#direct 注:若⑤ ⑥中direct为I/O口,为“读—改—写”操作。 例:MOV A, #55H XRL A, #F0H ;高4位取反,低4位不变。

5. 移位指令(仅对累加器A,见P.69) ① 循环左移: RL A ② 带进位循环左移: RLC A ③ 循环右移: RR A ④ 带进位循环右移: RR C A 例 : 拆字。将片内RAM 20H单元的内容拆成两段,每段4位。 并将它们分别存入21H与22H单元中。程序如下: ORG 2000H START: MOV R0,#21H ;21HR0,用R0间接寻址 MOV A,20H ;(20H)A ANL A,#0FH ;A∧#0FHA MOV @R0,A ;(A)(R0) INC R0 ;R0+1R0 SWAP A ;A0~3A4~7 ANL A,#0FH ; A∧#0FH

四、 控制转移类指令 AJMP 1. 无条件转移 ① 绝对短转移 1. 无条件转移 ① 绝对短转移 AJMP addr11; PC+2  PC,addr11PC10~0, PC15~11不变。 转移的目标地址在AJMP指令后面指令的第一字节开始的同一2K字节范围内。如下图所示: AJMP 2KB PC PC+2 例:AJMP 1123H AJMP K0 该指令操作码的形成: 1123H 0001 0001 0010 0011 a15 a10 a8 a7 a0 001 0010 0011 00001 所以,AJMP 1123H 对应的机器码是2123H。( AJMP为双字节指令)

本指令对应8种操作码:定义每256字节为一个页面,2K的跳转范围 可分为8页(211= 2 3× 28 = 8×256),每个页面一个操作码。 A10 A9 A8 0 地址页 0 0 0 1 操作码 A7~A0 页内 0 0 0 0 0 1 H 0页 0~255单元 0 0 1 0 21H 1 页 0~255单元 0 1 0 0 41H 2 页 0~255单元 0 1 1 0 61H 3页 0~255单元 1 0 0 0 81H 4页 0~255单元 1 0 1 0 A1H 5页 0~255单元 1 1 0 0 C1H 6页 0~255单元 1 1 1 0 E1H 7页 0~255单元

SJMP rel ;PC+2  PC ;PC+rel  PC rel=(终地址—始地址—2 )补 注:当rel=FE时,导致无限循环。 LJMP 64KB PC PC+3 ② 绝对长转移指令 LJMP addr16 ;在64KB内转移, addr16 PC 例:LJMP 2030H ;放在0000H中时, 上电后自动转移到2030H单元。 ③ 相对转移指令(短转移) SJMP rel ;PC+2  PC ;PC+rel  PC rel=(终地址—始地址—2 )补 注:当rel=FE时,导致无限循环。 因为 终地址 = 始地址+2+FE =PC+2-2 =PC 因此,可用如下形式指令 JMPADR:SJMP JMPADR 来代替HLT,在51单片机中无HLT。 SJMP -128 127

④ 间接转移指令(散转指令)——单字节指令 JMP @A+DPTR ;A+DPTR  PC 通常以DPTR为基地址,A为偏移量,则可实现散转功能 。 例: P75 例3-11 根据A中命令键的值,设计命令键操作程序入口跳转表。 CLR C ;清进位位 RLC A ;键值乘以2 MOV DPTR,#TAB ;DPTR指向表首址 JMP @ A + DPTR ;散转到命令键入口 双字节的命令键跳转表 TAB:AJMP SUB1 AJMP SUB2 …… AJMP SUBn

例:128种分支转移程序。程序框图如右: 功能: 根据入口条件转移到128个目的地址 入口:(R3)=转移目标地址的序号00H~7FH 出口: 转移到相应的子程序入口 JMP_128: MOV A,R3 RL A MOV DPTR,#JMPTAB JMP @A+DPTR JMPTAB: AJMP ROUT00 AJMP ROUT01 …… …… AJMP ROUT7F 128个子程序首址

2. 条件转移类指令 ——若条件满足,则程序转向指定的目标地址。 ① 累加器A判零转移指令 JZ rel ; A=0 转移 JNZ rel ; A ≠ 0 转移 ② 比较转移指令 (对无符号数) CJNE 目的,源 ,rel ;3字节指令 源与目的字节进行比较 (目的-源),若它们的值不等,则转移,同时将Cy清0或置 1。比较操作不影响原有操作数。 rel = (终地址—始地址—3 )补 i) CJNE A,direct ,rel ;A ≠ (direct),转移 A>direct, Cy =0 A<direct,Cy = 1 ii) CJNE A ,#data,rel ;A ≠ data,转移同上。 iii) CJNE Rn,#data,rel ; Rn ≠ data,转移同上。 iv) CJNE @Ri,#data,rel ;(Ri) ≠ data,转移同上。

CJNE R7, #60H, K1 ;R7<60H,K1 且Cy=1 … K1: JC K3 ;Cy=1,判出R7<60H  k3 K3: 例:片内RAM ONE 和 TWO 两个单元中存有两个无符号数,将两个数中小的存入30H单元。 MOV A ,ONE CJNE A,TWO ,BIG SJMP STORE BIG: JC STORE MOV A,TWO STORE: MOV 30H,A

i) DJNZ Rn,rel ;PC+2  PC, Rn-1Rn, ;当Rn≠0时,PC + relPC ③ 循环转移指令 i) DJNZ Rn,rel ;PC+2  PC, Rn-1Rn, ;当Rn≠0时,PC + relPC ;当Rn=0时,则结束循环,程序向下执行。 功能: (Rn - 1)不为零时转移,否则继续执行。 ii) DJNZ direct,rel ;(direct)-1,不为零时转移,否则继续执行。 例:软件延时。(在P1.7引脚上输出一个50us的脉冲) 利用DJNZ指令可在一程序中插入某些指令来实现软件延时。DJNZ执行时间为2个机器周期,这样循环1次可产生2个机器周期延时。(12M晶振时, 1个机器周期=1us。2×24+1=49us) CLR P1.7 ;P1.7输出变低电平 MOV R2 ,#18H ;1us ;赋循环初值24 HERE: DJNZ R2 ,HERE ;2us ; R2-1R2,R2不为零 循环。 SETB P1.7 ;P1.7输出高电平

设数组长度放R0中,数组存放首地址在R1中,数组之和则放于20H单元中(设和不超过256)。 CLR A SUMD: ADD A,@R1 例:多项单字节数求和。 设数组长度放R0中,数组存放首地址在R1中,数组之和则放于20H单元中(设和不超过256)。 CLR A SUMD: ADD A,@R1 INC R1 DJNZ R0,SUMD MOV 20H,A RET 数组之和 20H 数组首地址 R1 数组长度 R0 3. 调用和返回指令 ① 短调用指令 ACALL addrll ;在2K范围内调用,与AJMP相似. ;断点保护: PC+2  PC,SP+2  SP,PC进堆栈。 ;addr0~10  PC0~10 注:子程序首地址必须在ACALL指令后第一字节为起始的 2K字节范围内ROM中。

② 长调用指令 LCALL addr16 ;在64K范围内调用 ;断点保护: PC+3  PC,SP+2  SP,PC进堆栈。 ;addr0~15  PC ③ 返回指令 i) RET ii) RETI (从中断返回) ;恢复断点 PC 4. 空操作指令 NOP ;除PC+1外,不作其它操作。 例:利用NOP产生方波; CLR P2.7 NOP SEPB P2.7

五、位操作指令 位操作包括:位传送、位状态控制、位逻辑操作、位条件转移等. 进行位操作时: 位累加器C——进位标志Cy 位地址——①片内RAM字节地址20H~2FH中连续128个位, 地址从00H~7FH。 ②部分SFR 地址可以被8整除。 在汇编语言中,位的表达方式有多种: ① 直接给出位地址 如:MOV C, D4H(位地址) ② 点操作符方式 如:MOV C, PSW.4(PSW的第4位) ③ 位名称方式 如:MOV C, RS1 ④ 用户定义名方式 如:SUB.REG BIT RS1(用SUB.REG 表示 RS1) 这四种方式都可表达PSW中的第四位。

1. 位传递 ① MOV C,bit ; C ( bit ),bit是位地址,直接寻址 ② MOV bit,C ; ( bit )  C 当 bit 为00H~7FH,位地址在片内RAM中共128位; bit 为80H~FFH,位地址在11个SFR中。 (如:4个8位的并行I/O口,每位均可单独进行寻址。) 2. 位状态控制指令 ① 位清0 CLR C ;0C CLR bit ;0(bit) ② 位置1 SETB C ;1C SETB bit ;l(bit) ③ 位取反 CPL C ;/CC CPL bit ;/bitbit 当直接地址 bit 为端口中的某一位时,具有“读-改-写” 功能。 例:SETB P1.7 ;将P1.7位 置1 CLR 2AH ;2AH为25H单元中的第2位地址 ;设(25H)=00110100B,此指令将 (25H)变为00110000B。

3. 位逻辑运算指令 ① 与 ANL C, bit ;C∧ (bit) C ANL C,/bit ;C∧ (/bit) C(/bit并不改变bit的值) ② 或 ORL C,bit ;C∨ (bit ) C ORL C,/bit ;C∨ (/bit) C 4. 位条件转移指令(相对转移) ① 判C转移指令 JC rel ;C=1 转移 JNC rel ;C≠1 转移 ②判位变量转移指令 JB bit,rel ;bit =1 转移 JNB bit,rel ;bit ≠1 转移 ③判位变量并清0 JBC bit,rel ;若 bit =1,0  bit ,转移 ;若 bit =0, 则顺序执行 偏移量=(目标地址-源地址-指令字节数)补 P82

例:如图示组合逻辑电路 + P1.0 P1.1 P1.2 MOV C,P1.0 ORL C,/P1.1 CPL C MOV P1.2,C

例:设变量X存在VAR单元中,函数值y存放在FUNC中,按下式给y赋值。 VAR DATA,30H ;VAR地址30H FUNC DATA,31H ;FUNC地址31H START: MOV A,VAR ;取X JZ COMP ;A为0转COMP JNB ACC.7,POSI ;X>0转POSI ;符号位为0 MOV A,#0FFH ;X<0,-1A SJMP COMP POSI: MOV A,#01H COMP: MOV FUNC,A

例: 在片内RAM 40H~4FH 中置初值 A0H~AFH,再将其内容依次传送到片外RAM 0800H 为起始地址的16个单元中。 04 0048 DAFB 7840 900800 在RAM内置初值 ORG 0000H RESET: AJMP MAIN ORG 003FH MAIN: MOV R0,#40H MOV R2,#10H MOV A,#A0H A1: MOV @R0,A INC R0 INC A DJNZ R2,A1 MOV R0,#40H MOV DPTR,#0800H 地址 机器码

将内RAM中40H~4FH的内容依次送到外RAM中以0800H为起始地址的16个单元中。 7A10 0051 E6 F0 08 A3 MOV R2,#10H A2: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR DJNZ R2,A2 HERE: SJMP HERE 将内RAM中40H~4FH的内容依次送到外RAM中以0800H为起始地址的16个单元中。 7A10 0051 E6 F0 08 A3 0055 DAFA 0057 80FE 地址 机器码 相对偏移量的计算: FBH=(0045H-0048H-2)补=(-5)补 FAH=(0051H-0055H-2)补=(-6)补 FEH=(0057H-0057H-2)补=(-2)补

指令系统举例: 例1. 设两位用ASCII码表示的数分别保存在40H、41H单元中,将其转换为两位BCD数,并以压缩形式存入40H单元中。 程序: ANL 40H, #0FH ;40H的ASCII码变为BCD码。 MOV A, 41H ANL A, #0FH ;41H的ASCII码变为BCD码。 RL A ;A的内容左移4次 RL A RL A ;左移4次, 或使用 SWAP A ORL 40H, A ;结果存在40H单元中。

例3. 两个无符号数存于20H、21H单元中,比较他们的大小, 将大数A。 例2. P1.0 P1.1 P1.2 P1.3 LED1 LED2 +5v K1 K2 LOOP: MOV A,#03H ORL P1,A ; 1 P1 MOV A,P1 ; P1输入 RL A RL A MOV P1,A CALL DELAY AJMP LOOP 因为“0”亮, 所以不能用MOV。 Ki闭合  LEDi亮 例3. 两个无符号数存于20H、21H单元中,比较他们的大小, 将大数A。 MOV A,20H CJNE A,21H,L1 SJMP L2 L1: JNC L2 MOV A,21H L2: RET ;A中为大数

例4. 20H~25H单元中存放着单字节无符号数,求和并存于 CLR C MOV R0,#20H MOV R1,#00H ;高字节和 MOV R2,#05H ;数组长度-1 MOV A, @R0 INC R0 L1: ADD A,@R0 ;求和 JNC L2 INC R1 L2: INC R0 DJNZ R2,L1 MOV 26H,A MOV 27H,R1 RET

例:搜索最大值。从片内RAM的BLOCK单元开始有一个无符号 数据块,其长度存于LEN单元中,试求出其中最大的。 LEN DATA 20H MAX DATA 21H BLOCK DATA 22H CLR A MOV R2,LEN ;数据块长度R2 MOV R1,#BLOCK ;置地址指针 LOOP: CLR C SUBB A,@R1 ;用减法做比较 JNC NEXT ;无借位A大 MOV A,@R1 ;否则大者送A SJMP NEXT1 NEXT: ADD A,@R1 ;A大恢复A NEXT1: INC R1 ;修改地址指针 DJNZ R2,LOOP ;未完继续 MOV MAX,A ;完存大数

QUE: CLR 00H :清除交换标志 MOV R3,#9H ;循环次数 MOV R0,#50H ;存放区首址 MOV A,@R0 ;取前数 L2: INC R0 MOV R2,A ;保存前数 SUBB A,@R0 ;前数减后数 MOV A,R2 ;恢复前数 JC L1 ;顺序,继续比较 SETB 00H ;逆序,建立标志 XCH A ,@R0 ;前后数交换 DEC R0 XCH A ,@R0 INC R0 ;指向后数单元 L1: MOV A,@R0 DJNZ R3,L2 ;依次重复比较 JB 00H,QUE ;交换后重比较 RET 例: 排序。 将片内RAM 区50H~59H 中的数据按 从小到大的 次序排列。