单片机原理及应用C语言版3.ppt

上传人:本田雅阁 文档编号:2309148 上传时间:2019-03-19 格式:PPT 页数:150 大小:741.01KB
返回 下载 相关 举报
单片机原理及应用C语言版3.ppt_第1页
第1页 / 共150页
单片机原理及应用C语言版3.ppt_第2页
第2页 / 共150页
单片机原理及应用C语言版3.ppt_第3页
第3页 / 共150页
亲,该文档总共150页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机原理及应用C语言版3.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用C语言版3.ppt(150页珍藏版)》请在三一文库上搜索。

1、单片机原理及应用 (C语言版) 第3章 MCS-51指令系统及 汇编程序设计,主 编:周国运 本章制作:周国运 中国水利水电出版社,第3章 MCS-51指令系统 及汇编程序设计,目 录 3.1 汇编语言概述 3.2 MCS-51单片机寻址方式 3.3 MCS-51单片机指令系统 3.4 MCS-51单片机伪指令 3.5 汇编语言程序设计举例,本章讨论MCS-51单片机的指令系统及汇编语言程序设计。 内容主要包括:汇编语言基本概念、寻址方式、指令系统、伪指令、汇编语言程序举例。 本章是单片机程序设计的基础,即便是主要用C语言做设计程序,但对某些要求较高的部分,还是需要用汇编语言来写程序。,3.1

2、 汇编语言概述,主要内容 3.1.1 指令和机器语言 3.1.2 汇编语言 3.1.3 汇编语言指令格式,3.1.1 指令和机器语言,一、指令和指令系统 指令:是计算机中CPU根据人的意图来执行某种操作的命令。 指令系统:是一台计算机(CPU)所能执行的全部指令的集合。 指令系统的强弱,决定了计算机智能的高低。,3.1.1 指令和机器语言,二、程序和程序设计语言 程序:人们编写的、使计算机完成某项工作的指令序列,称为程序。 程序设计:编写程序的过程叫程序设计 程序设计语言:编写程序的一整套规则、方法。 程序设计语言分类:分为机器语言、汇编语言和高级语言等。,3.1.1 指令和机器语言,三、机器

3、语言 机器语言:用二进制编码表示每条指令,是计算机能够直接识别和执行的语言。 目标程序:用机器语言编写的程序。 例如“13+25” ,在MCS-51中的机器码为 0 1 1 1 0 1 0 0 0 0 0 0 1 1 0 1 0 0 1 0 0 1 0 0 0 0 0 1 1 0 0 1 用十六进制表示指令码为: 74H 0DH 把13放到累加器A中 24H 19H A加25,结果仍放回A中,3.1.2 汇编语言,汇编语言:用助记符、符号、数字等表示指令的程序语言。 例如,上面的“13+25”的例子可写成: 汇编语言程序 机器语言代码 MOV A,#0DH 74H 0DH ADD A,#19H

4、 24H 19H 相对于机器语言来说,汇编语言容易理解和记忆。 汇编语言和机器语言都属于低级语言。,3.1.3 汇编语言指令格式,一、MCS-51汇编语言指令格式 由四部分组成,其一般格式如下: 标号: 操作码 操作数 ;注释 方括号中的内容可以没有,即可以没有标号、操作数和注释,至少要有操作码。其操作数部分最多可以是三项: 第1操作数 , 第2操作数 , 第3操作数 对MOV指令,有两项,第1操作数常称为目的操作数,第2操作数称为源操作数。,3.1.3 汇编语言指令格式,例如: START: MOV A,#23H ;23H A “START”为标号 “MOV”为操作码 “ A,#23H”为操

5、作数 “23H A”为注释,3.1.3 汇编语言指令格式,二、MCS-51汇编指令构成 1、单字节指令 指令中既包含有操作码,也包含有操作数,有两种情况。 1)指令码中隐含着对某个寄存器的操作 如:“INC A”、“MUL AB”、“RL A”、“CLR C”、“INC DPTR”等指令。 2)由指令码中的r r r或i指定操作数,3.1.3 汇编语言指令格式,这种情况是指令中使用了Rn或Ri 如“MOV Rn,A”编码格式为: 1 1 1 1 1 r r r rrr的取值为:07,表示R0R7 又如“MOV A,Ri”编码格式为: 1 1 1 0 0 1 1 i i取值为:0、1,表示R0、

6、R1,3.1.3 汇编语言指令格式,2、双字节指令 一个字节表示操作码,另一个字节表示操作数或操作数的地址。 3、三字节指令 一个字节表示操作码,另两个字节表示操作数或操作数的地址。,3.2 MCS-51单片机寻址方式,主要内容 3.2.1 立即数寻址 3.2.2 寄存器寻址 3.2.3 直接寻址 3.2.4 寄存器间接寻址 3.2.5 变址寻址 3.2.6 位寻址 3.2.7 指令寻址 3.2.8 寻址空间及指令中的符号,寻址方式:就是指CPU寻找参与运算的操作数的方式,或者寻找数据保存位置的方式。 7种寻址方式:立即数寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、位寻址和指令寻址。

7、 寻址方式分两类:操作数寻址和指令寻址,在7种寻址方式中,除了指令寻址之外,其余6种都属于操作数寻址。 寻址方式是汇编语言程序设计中最基本的内容之一,必须要十分熟悉。,3.2 MCS-51单片机寻址方式,3.2.1 立即数寻址,立即数寻址也叫立即寻址、常数寻址。其操作数就在指令中,是指令的一部分,紧跟在操作码后面,用“#”符号作前缀,以区别地址。例如: MOV A,#2CH ;2CH A MOV A,2CH ;(2CH) A 前者表示把2CH这个数送给累加器A,后者表示把片内RAM中地址为2CH单元的内容送给累加器A。,3.2.1 立即数寻址,立即数也可以是16位的,如: MOV DPTR,#

8、1234H MOV TL2,#2345H MOV RCAP2L,#3456H 对于第2条指令,立即数的低8位送给了TL2,高8位送给了TH2;对于第3条指令,立即数的低8位送给了RCAP2L,高8位送给了RCAP2H。,3.2.2 寄存器寻址,寄存器寻址:就是由指令指出寄存器组R0R7中某一个或寄存器A、B、DPTR和C(位处理器的累加器)的内容作为操作数。例如: MOV A,R7 ;(R7) A MOV 36H,A ;(A) 36H ADD A,R0 ;(A)+(R0) A 对于工作寄存器组的操作,必须要考虑PSW中RS1、RS0的值,确定当前使用的是哪一组寄存器以及它们的实际地址。,3.2

9、.2 寄存器寻址,图3-1 寄存器寻址方式(INC R3),3.2.3 直接寻址,直接寻址:是指操作存放在片内RAM中,指令中给出操作数的地址。例如: MOV A,38H ;(38H) A 说明: (1)直接寻址方式可以访问片内RAM的低128字节和所有的特殊功能寄存器。 (2)直接寻址不能够访问片内RAM的高128字节,高128字节只能够间接访问。 对于特殊功能寄存器,既可以使用地址,也可以使用SFR名。例如: MOV A,P1 或 MOV A,90H,3.2.4 寄存器间接寻址,寄存器间接寻址:是指操作数存放在RAM中,指令中给出存放操作数地址的寄存器,指令执行时,通过寄存器内的地址,间接

10、地访问操作数。 存放地址的寄存器称为间址寄存器,在指令中,在寄存器前面加前缀“”表示。 MCS-51单片机规定,使用Ri(i=0、1,即指R0、R1)、SP和DPTR作间址寄存器。 寄存器间接寻址有以下几种情况。,3.2.4 寄存器间接寻址,一、使用Ri间接访问片内RAM 间接访问的范围:256字节(包括低128字节和高128字节),但不包括特殊功能寄存器。例如: MOV A,Ri ;(Ri) A MOV Ri,A ;(A)(Ri) (Ri):表示Ri指向的单元,即单元的地址((Ri)):表示Ri指向单元中的数据。 操作过程如图3-3所示。,3.2.4 寄存器间接寻址,对使用SP间接访问片内R

11、AM (在C语言中也可以访问片外RAM) ,仅用在堆栈操作中,见后面指令系统。,3.2.4 寄存器间接寻址,二、使用Ri间接访问片外RAM 间接访问的范围:片外RAM的64KB全空间。其指令只有两条: MOVX A,Ri ;(P2) (Ri) A MOVX Ri,A ;(A)(P2 Ri) 注意: (1)P2中的值作为高8位地址,Ri中的值作为低8位地址; (2)如果P2不改变,则范围为256B; (3)这两条指令均为总线操作,相应总线信号有效(高低8位地址、ALE、RD或WR)。,3.2.4 寄存器间接寻址,三、使用DPTR间接访问片外RAM 间接访问的范围:片外RAM的64KB全空间。其指

12、令也是只有两条: MOVX A,DPTR ;(DPTR) A MOVX DPTR,A ;(A)(DPTR) DPTR为16位地址。,3.2.5 变址寻址,变址寻址:实为基址加变址的间接寻址。指令中给出存放基址和变址的寄存器。 基地址寄存器:DPTR或PC; 变址寄存器:累加器A。 也在地址寄存器前面加上前缀“”。例如: MOVC A,A+DPTR ;(A)+(DPTR) A 该指令的操作过程如图3-4所示。,3.2.5 变址寻址,3.2.5 变址寻址,变址寻址的空间为程序存储器 寻址范围: 若使用DPTR为基地址寄存器,寻址范围为64KB; 若使用PC为基地址寄存器,寻址空间在PC之后256字

13、节范围内。 变址寻址主要用于查表操作,3.2.6 位寻址,位寻址:是指操作数是二进制位、位地址 位操作数地址范围:片内RAM中20H2FH,SFR中可以按位寻址的位。 位地址在指令中用bit表示。例如: SETB bit MOV C,bit,3.2.6 位寻址,位地址的4种表示方式: 1)直接位地址(00HFFH)。如32H 2)字节地址带位号。如20H.1,表示20H单元的第1位。 3)特殊功能寄存器名带位号。如P1.7,表示P1口的第7位。 4)位符号地址。具体的:SFR位名;用 “BIT”定义的位符号(如“flag BIT 01H”)。如TR0、flag,TR0表示定时器/计数器0的运行

14、控制位,flag表示01H位。,3.2.7 指令寻址,指令寻址:指令中的操作数给出转移的目标地址或目标地址的一部分。 指令寻址分为绝对寻址和相对寻址两种方式。 指令寻址用于控制转移指令中。,3.2.7 指令寻址,一、绝对寻址 绝对寻址:指令中的操作数给出转移的16位目标地址。 寻址范围:64KB全空间。 绝对寻址用在长转移和长调用指令中,例如: LJMP SER_INT_T1 ;无条件转移到T1中断服务程序 LCALL SUB_SORT ; SUB_SORT调用排序子程序,SUB_SORT为16位目标地址标号,SER_INT_T1为16位目标地址标号,3.2.7 指令寻址,二、相对寻址 相对寻

15、址:是以当前程序计数器PC值为基地址,加上指令中给出的偏移量rel,得到目标位置的地址。即: 目标地址PCrel rel目标地址PC 偏移量rel为8位补码,其值为-128+127。rel0表明目标地址小、源地址大,程序向回跳转;rel0,程序向前跳转。,3.2.7 指令寻址,例如: JZ FIRST ;(A)0,跳转到FIRST DJNZ R7,LOOP ;(R7)-10,跳转到LOOP 说明: (1)在实际编程中,不需要计算rel,rel由编译器自动计算; (2)当跳转范围超出了rel范围,编译器会提示,对程序做适当调整即可。,3.2.8 寻址空间及指令中的符号注释,3.2.8 寻址空间及

16、指令中的符号注释,二、指令中常用符号 Rn: n=07。当前选中的工作寄存器R0R7。 Ri: i=0、1。当前选中的工作寄存器组中可作为地址指针的R0和R1。 #data: 8位立即数。 #data16: 16位立即数。 direct: 8位片内RAM单元地址,包括低128B和SFR,但不包括高128B。 addr16: 程序存储空间的16位地址,3.2.8 寻址空间及指令中的符号注释,rel: 补码形式的8位地址偏移量。以下面指令的第一个字节为基地址,地址偏移量在-128+127。 bit: 片内RAM或SFR中的直接寻址位地址 : 间址寄存器的前缀符号,表示间接寻址。,3.2.8 寻址空

17、间及指令中的符号注释,(): 表示中的内容 (): 表示由中指向的地址单元中的内容 : 逻辑与 : 逻辑或 : 逻辑异或 、: 指令操作流程,将内容送到箭头指向的地方,3.3 MCS-51单片机指令系统,主要内容 3.3.1 数据传送指令 3.3.2 算术运算指令 3.3.3 逻辑运算指令 3.3.4 控制程序转移指令 3.3.5 位操作指令,3.3 MCS-51单片机指令系统,指令概述 MCS-51单片机指令系统有111条指令,分类如下。 1、按字节分类 单字节指令:49条; 双字节指令:45条 三字节指令:17条 2、按执行时间分类 单周期指令:64条; 双周期指令:45条 四周期指令:2

18、条(乘、除指令),3.3 MCS-51单片机指令系统,3、按功能分类(分为5大类) 数据传送指令:29条 算术运算指令:24条 逻辑运算指令:24条 控制程序转移指令:17条 位操作指令:17条 MCS-51指令没有复杂的寻址方式,并且助记符只有42种,所以单片机指令容易理解、容易记忆、容易掌握。,3.3.1 数据传送指令,数据传送是使用最频繁的一类指令。 所谓传送,就是把源地址单元的内容传送到目的地址单元中去,而源地址单元中的内容不变。 数据传送指令可以分为三组:普通传送指令、数据交换指令、堆栈操作指令。 这类指令一般不影响程序状态字,只有目的操作数是累加器A时,影响标志位P。,3.3.1

19、数据传送指令,一、普通传送指令 普通传送指令以助记符MOV为基础,分为: 片内数据存储器传送指令,用MOV 片外数据传送指令,用MOVX 程序存储器传送指令,用MOVC,3.3.1 数据传送指令,1、片内数据存储器传送指令MOV 格式: MOV 目的操作数,源操作数 源操作数:可以是A、Rn、Ri、 direct、#data 目的操作数:可以是A、Rn、Ri、direct、DPTR 以目的操作数的不同可以分为五个小组,共16条指令。,3.3.1 数据传送指令,(1)以A为目的操作数 MOV A,Rn ;(Rn)A E8EF MOV A,direct ;(direct)A E5 direct M

20、OV A,Ri ;(Ri)A E6 E7 MOV A,#data ;data A 74 data 工作寄存器Rn:R0R7 Ri间接寻址寄存器:R0或R1 本组4条指令都影响PSW中的P标志位 指令字节数:1、2、1、2,3.3.1 数据传送指令,(2)以Rn为目的操作数 MOV Rn,A ;(A) Rn MOV Rn,direct ;(direct) Rn MOV Rn,#data ;data Rn 本组指令都不影响PSW中的标志位。 指令字节数:1、2、2,3.3.1 数据传送指令,(3)以直接地址direct为目的操作数 MOV direct,A ;(A) direct MOV dire

21、ct,Rn ;(Rn) direct MOV direct2,direct1 ;(direct1)direct2 MOV direct,Ri ;(Ri) direct MOV direct,#data ;data direct 本组指令都不影响PSW中的标志位 指令字节数:2、2、3、2、3,3.3.1 数据传送指令,(4)以间接地址Ri为目的操作数 MOV Ri,A ;(A) Rn MOV Ri,direct ;(direct) Rn MOV Ri,#data ;data Rn 本组指令都不影响PSW中的标志位。,3.3.1 数据传送指令,(5)以DPTR为目的操作数 MOV DPTR,#d

22、ata16 ;dataHDPH,dataLDPL 该指令不影响PSW中的标志位。 例3-1 设片内RAM中(30H)=40H,(40H)=10H,分析以下程序执行后各单元及寄存器中的内容。,3.3.1 数据传送指令,MOV R0,#30H ;30H R0 MOV A,R0 ;(R0) A MOV R1,A ;(A) R1 MOV B,R1 ;(R1) B MOV 10H,#20H ;20H 10H 执行上述指令后的结果为: (R0)=30H, (R1)=(A)=40H, (B)=10H, (10H)=20H,3.3.1 数据传送指令,2、片外数据存储器传送指令MOVX MOVX A,Ri ;(

23、P2),(Ri) A MOVX Ri,A ;A (P2, Ri) MOVX A,DPTR ;(DPTR) A MOVX DPTR,A ;A (DPTR) 第1和第3条指令是执行总线读操作,读控制信号RD有效;第2和第4条指令是执行总线写操作,写控制信号WR有效。 这组指令中第1、3两条指令影响P标志位,其它2条指令不影响任何标志位。,3.3.1 数据传送指令,例3-2 设片外RAM空间(0203H)=6FH,分析执行下面指令后的结果。 MOV DPTR,#0203H;0203H DPTR MOVX A,DPTR ;(DPTR) A MOV 30H,A ;(A) 30H MOV A,#0FH ;

24、0FH A MOVX DPTR,A ;(A) (DPTR) 执行结果为:(DPTR)=0203H, (30H)=6FH,(0203H)=(A)=0FH,3.3.1 数据传送指令,3、程序存储器传送指令MOVC 该类指令又称为查表指令,经常用于查表。这类指令只有以下2条单字节指令。 MOVC A,A+DPTR ;(A)+(DPTR) A MOVC A,A+PC ;(A)+(PC) A 前者叫远程查表指令(64KB全空间),后者叫近程查表指令(PC处256B)。 这两条指令都影响P标志位。,3.3.1 数据传送指令,地址偏移量的计算方法 使用第2条指令的关键,是准确计算从本指令到数据所在处的地址偏

25、移量。 将分为两段:表首偏移和表内偏移 地址偏移量 表首偏移量表内偏移量 表首偏移量为: 表首偏移量表首地址PC,3.3.1 数据传送指令,例3-3 从程序存储器2000H单元开始存放09的平方值,以PC作为基址寄存器,执行查表指令得到6的平方值,并且送到片内RAM中的30H单元。 设MOVC指令所在的地址为1FA0H,则表首偏移量2000H(1FA0H1)5FH,表内偏移量为6。相应的程序为: MOV A,#5FH ;表首偏移送A ADD A,#06H ;计算总偏移 MOVC A,A+PC ;读表中数据 MOV 30H,A,3.3.1 数据传送指令,用以DPTR为基址寄存器的查表指令,其程序

26、如下: MOV DPTR,#2000H MOV A,#6 MOVC A,A+DPTR MOV 30H,A 通过本例对两条查表指令比较可以看出,以DPTR为基址寄存器的查表指令使用简单、方便。,3.3.1 数据传送指令,二、数据交换指令 数据交换指令则数据作双向传送,传送后,前一个操作数传送到了后一个操作数所保存的地方,后一个操作数传送到了前一个操作数所保存的地方。 数据交换指令要求第一个操作数必须为累加器A。 共5条指令,分为字节交换和半字节交换两个类型。,3.3.1 数据传送指令,1、字节交换指令 XCH A,Rn ;(A)(Rn) XCH A,direct ;(A)(direct) XCH

27、 A,Ri ;(A)(Ri) 这3条指令都影响P标志位 2、低半字节交换指令 XCHD A,Ri ;(A03)(Ri)03) 这条指令影响P标志位 3、A自身半字节交换指令 SWAP A ;(A 03)(A47) 这条指令不影响任何标志位,3.3.1 数据传送指令,例3-4 设(R0)=30H,(30H)=4AH,(A)=28H,则分别执行“XCH A,R0”、 “XCH A,R0” “XCHD A,R0”、“SWAP A”后各单元的内容。 执行:XCH A,R0 ;后(A)=30H,(R0)=28H 执行:XCH A,R0 ;后(A)=4AH,(30H)=28H 执行:XCHD A,R0 ;

28、后(A)=2AH,(30H)=48H 执行:SWAP A ;后(A)=82H,(30H)=4AH,3.3.1 数据传送指令,三、堆栈操作指令 堆栈操作有进栈和出栈两条指令,常用于保存和恢复现场。 PUSH direct ;先(SP) +1 SP, ;后(direct)(SP) POP direct ;先(SP) direct, ;后(SP) -1 SP PUSH为进栈操作, POP为出栈操作。 当操作数是累加器A时,影响P标志位。,3.3.1 数据传送指令,例3-5 若在程序存储器中2000H单元开始的区域依次存放着09的平方值,用查表指令读取3的平方值并存于片内RAM中30H单元,要求操作后

29、保持DPTR中原来的内容不变。 为了使用DPTR,并且保持原来的内容不变,应该在使用DPTR前使其进栈,使用后再出栈恢复其原来内容。 程序如下:,3.3.1 数据传送指令,注意:(1)进栈与出栈必须成对使用;(2)先进栈的必须后出栈,后进栈的必须先出栈,否则会出现DPL与DPH内容互换。,PUSH DPH PUSH DPL MOV DPTR,#2000H MOV A,#3 MOVC A,A+DPTR MOV 30H,A POP DPL POP DPH,3.3.2 算术运算指令,指令内容:包括加、减、乘、除、BCD码调整等指令,共有24条。 CPU的运算能力:只能执行无符号二进制整数运算,可以借

30、助于溢出标志位,实现有符号数的补码运算;借助于进位标志,可以实现多精度加、减运算。 对标志位的影响:结果会影响进位标志CY、半进位标志AC、溢出标志OV、奇偶标志位P,但加1和减1指令不影响这些标志位。,3.3.2 算术运算指令,指令中的操作数:多数以累加器A作为第一操作数,第二操作数可以是工作寄存器Rn、直接地址数据、间接地址数据和立即数。即 第一操作数:多为A 第二操作数:Rn、direct、Ri、#data 为了便于讨论,将其分为5个类型。,3.3.2 算术运算指令,一、加法指令 分为不带进位加法、带进位加法和加1指令 1、不带进位加法指令ADD ADD A,Rn ;(A)+(Rn)A

31、ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A ADD A,#data ;(A)+ dataA 这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号运算有意义。,3.3.2 算术运算指令,2、带进位加法指令ADDC ADDC A,Rn ;(A)+(Rn)+ CYA ADDC A,direct ;(A)+(direct)+CYA ADDC A,Ri ;(A)+(Ri)+CYA ADDC A,#data ;(A)+data+CYA 这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号运算有意义。,3.3.2 算术运算指令,例3-7

32、 试编写程序,把R1R2和R3R4中的两个16位数相加,结果存放在R5R6中。 思路:先对两个低字节相加,再对两个高字节相加。 (1)低字节R2和R4相加:使用ADD,其和存放于R6中; (2)高字节R1和R3相加:使用ADDC,其和存放于R5中。 程序段如下页。,3.3.2 算术运算指令,程序段如下: MOV A,R2 ;(R2) A ADD A,R4 ;(A)+(R4) A MOV R6,A ;(A) R6 MOV A,R1 ;(R1) A ADDC A,R3 ;(A)+(R3)+CYA MOV R5,A ;(A) R5,3.3.2 算术运算指令,3、加1指令INC INC A ;(A)+

33、 1 A INC Rn ;(Rn)+ 1 Rn INC direct ;(direct)+ 1 direct INC Ri ;(Ri)+ 1 (Ri) INC DPTR ;(DPTR)+ 1 DPTR 这组指令除了第一条影响标志位P之外,其它指令不影响标志位。,3.3.2 算术运算指令,二、减法指令 减法指令分为带借位减法指令和减1指令。 1、带借位减法指令SUBB SUBB A,Rn ;(A)-(Rn)-CYA SUBB A,direct ;(A)-(direct)- CYA SUBB A,Ri ;(A)-(Ri)-CYA SUBB A,#data ;(A)-data-CYA 这组指令影响标

34、志位CY、AC、OV和P,溢出标志OV只对有符号数运算有意义。,3.3.2 算术运算指令,由于MCS-51单片机没有不带借位的减法指令,对于不带借位的减法运算,可以先对CY清0,然后再用SUBB命令操作。 例3-8 试编写实现“R2R1 R3”功能的程序。 程序段如下: MOV A,R2 CLR C ;对CY清0 SUBB A,R1 MOV R3,A,3.3.2 算术运算指令,1、减1指令DEC DEC A ;(A) - 1 A DEC Rn ;(Rn) - 1 Rn DEC direct ;(direct) - 1 direct DEC Ri ;(Ri) - 1 (Ri) 这组指令除了第一条

35、影响标志位P之外,其它指令不影响标志位。,3.3.2 算术运算指令,三、乘法指令MUL 在MCS-51单片机中,乘法指令只有一条。 MUL AB ;(A)(B) B(高字节)、A(低字节) 操作:把累加器A和寄存器B中两个8位无符号数相乘,所得的16位积的高字节存放在B中,低字节存放在A中。 对标志位的影响:若乘积大于0FFH,OV置1,说明高字节B中不为0,否则OV清0;影响P标志位;对CY总是清0。,3.3.2 算术运算指令,例 设(A)50H,(B)0A0H,分析执行指令“ MUL AB”后的结果。 指令执行后的结果为: (B)32H,(A)00H 即乘积为3200H, Cy0,OV1。

36、,3.3.2 算术运算指令,四、除法指令DIV 在MCS-51单片机中,除法指令只有一条。 DIV AB ;(A)/(B),商A、余B 操作:A的内容除以B的内容(均为无符号整数),所得结果的整数商存放在A中,余数存放在B中。 对标志位的影响:如果除数(B)=0,则标志位OV置1,否则清0;影响P标志位;CY总是被清0。,3.3.2 算术运算指令,五、十进制调整指令DA 十进制调整指令只有一条。 DA A ;调整A内容为BCD码 调整方法:若A的低(高)4位为十六进制的AF,或者标志位AC(CY)为1,则A的内容加06H(60H)调整。 适用场合:用于ADD或ADDC指令后,且只能用于压缩的B

37、CD码相加结果的调整。 对标志位的影响:影响CY、AC和P,但不影响OV。,3.3.2 算术运算指令,例3-9 试编写程序,对两个十进制数76、58相加,并且保持其结果为十进制数,把结果存于R3中。程序段如下: MOV A,#76H ADD A,#58H DA A MOV R3,A 程序执行后,R3中的内容为34H,进位标志CY为1,则最后结果为134。 编程时,注意对BCD码的写法:要按十进制数格式写,然后在其后面加上H。,3.3.3 逻辑操作指令,逻辑操作指令包括与、或、异或、清0、求反、移位等操作指令,共有24条。 指令中的操作数: A、Rn、direct、Ri、#data 对标志位的影

38、响:一般不影响标志位。如果累加器A为目的操作数,会影响奇偶标志P;如果带进位位作移位操作,会影响进位标志CY。 为了便于讨论,将其分为5组进行讨论。,3.3.3 逻辑操作指令,一、逻辑与指令ANL ANL A,Rn ;(A)(Rn) A ANL A,direct ;(A)(direct) A ANL A,Ri ;(A)(Ri) A ANL A,#data ;(A) data A ANL direct,A ;(direct)(A) direct ANL direct,#data ;(direct)datadirect 逻辑与操作往往用于使某些位清0。 这组指令的仅前4条只影响奇偶标志位P。,3.

39、3.3 逻辑操作指令,二、逻辑或指令ORL ORL A,Rn ;(A)(Rn) A ORL A,direct ;(A)(direct) A ORL A,Ri ;(A)(Ri) A ORL A,#data ;(A)data A ORL direct,A ;(direct)(A) direct ORL direct,#data ;(direct)datadirect 逻辑或操作往往用于使某些位置1。 这组指令的仅前4条只影响奇偶标志位P。,3.3.3 逻辑操作指令,三、逻辑异或指令ORL XRL A,Rn ;(A) (Rn) A XRL A,direct ;(A) (direct) A XRL A

40、,Ri ;(A) (Ri) A XRL A,#data ;(A) data A XRL direct,A ;(direct) (A) direct XRL direct,#data ;(direct) datadirect 逻辑异或操作往往用于使某些位取反。 用1异或使对应位取反 这组指令的仅前4条只影响奇偶标志位P。,3.3.3 逻辑操作指令,例3-10 写出完成以下各功能的指令: 1)只对累加器A中的1、3、5位清0; 2)只对A中的2、4、6位置1; 3)只对A中的0、1、6、7位取反。 对应指令如下: ANL A,#11010101B ORL A,#01010100B XRL A,#1

41、1000011B,3.3.3 逻辑操作指令,四、累加器A清0和求反指令 CLR A ;0 A CPL A ;(A) A 前一条指令是对A清0,该指令影响奇偶标志位P。后一条指令是对A求反,不影响任何标志位。,3.3.3 逻辑操作指令,四、循环移位指令 A循环左移: RL A ; A循环右移: RR A ; A带进位循环左移 :RLC A ; A带进位循环右移 :RRC A ; 说明:(1)这4条指令,每执行一次只 移动1位;(2)左移一次相当于乘以2,右移一次相当于除以2。 对标志位影响:仅后两条指令影响CY和P,3.3.4 控制程序转移指令,计算机功能的强弱,主要取决于转移类指令的多少与功能

42、,特别是条件转移指令。 MCS-51单片机有17条转移类指令,包括无条件转移指令、条件转移指令、子程序调用及返回指令等。 对标志位影响:只有比较转移指令影响进位标志CY,其它指令不影响标志位。 为了便于讨论,将其分为4组进行讨论。,3.3.4 控制程序转移指令,一、无条件转移指令 无条件转移指令:当程序执行该指令后,程序无条件地转移到指定的地址去执行。 包括短转移、长转移和间接转移3条指令 1、短转移指令SJMP(相对转移指令) SJMP rel ;(PC)+ relPC rel:相对转移偏移量,有符号数,128127,负数表示向回跳转,正数表示向前跳转。 指令实际写为:“SJMP 目标地址标

43、号”,3.3.4 控制程序转移指令,2、长转移指令LJMP LJMP addr16 ;addr16 PC 由于程序的目标地址是16位,因此程序可以跳转到64KB程序存储器空间的任何地方。 指令的实际编写形式为:“LJMP 目标地址标号”。,3.3.4 控制程序转移指令,3、间接转移指令JMP 也叫散转指令、多分支转移指令。 JMP A+DPTR ;(A)+(DPTR)PC DPTR为基址,A为相对偏移,在64KB范围内无条件转移。 说明:(1)DPTR一般为确定的值,累加器A为变值,根据A的值转移到不同的地方,因此该指令也叫散转指令。 (2)在使用中,往往与一个转移指令表一起实现多分支转移。,

44、3.3.4 控制程序转移指令,例3-13 分析下面多分支转移程序段。 MOV B,#3 MUL AB ;开始时(A)=0、1、2 MOV DPTR,#TABLE ;表首地址送DPTR JMP A+DPTR ;根据A值转移 TABLE: LJMP TAB0 ;(A)=0时转到TAB0执行 LJMP TAB1 ;(A)=3时转到TAB1执行 LJMP TAB2 ;(A)=6时转到TAB2执行 程序中,根据累加器A的开始值(0、1、2)转移到相应的TAB0TAB2分支去执行。,3.3.4 控制程序转移指令,一、条件转移指令 当指令中条件满足时,程序转到指定位置执行,条件不满足时,程序顺序执行。 条件

45、转移指令有三种:判断累加器A转移指令、比较转移指令、循环转移指令,共8条。 这类指令都属于相对转移,转移范围均为128127。 需要注意的是:注释中的PC值,均为下一条指令的地址值。,3.3.4 控制程序转移指令,1、判断转移指令 判断A为0转移: JZ rel ;(A)0, (PC)+ relPC ;(A)0, 顺序执行 判断A非0转移: JNZ rel ;(A)0, (PC)+ relPC ;(A)0, 顺序执行 指令的实际编写形式分别为:“JZ 目标地址标号”和“JNZ 目标地址标号”。,3.3.4 控制程序转移指令,例3-14 试编写程序,把片外RAM地址从2000H开始的数据,传送到

46、片内RAM地址从30H开始的单元,直到出现0为止。 程序段如下: MOV DPTR,#2000H MOV R0,#30H LOOP: MOVX A,DPTR,3.3.4 控制程序转移指令,LOOP: MOVX A,DPTR MOV R0,A INC R0 INC DPTR JNZ LOOP ;(A)0跳转 SJMP $ ;程序停留到此,3.3.4 控制程序转移指令,2、比较转移指令CJNE 比较转移指令功能较强,共有4条指令 ,一般格式为: CJNE 操作数1,操作数2,rel (目标标号) 指令功能:两个操作数做比较,若不等则转移,否则顺序执行。 具体形式如下,第一条: CJNE A,dir

47、ect,rel ;若(A)(direct), 则(PC) +relPC, 即转移;否则顺序执行 且(A)(direct),0CY;(A)(direct),1CY,3.3.4 控制程序转移指令,第二条: CJNE A,#data,rel ;若(A) data, 则(PC) +relPC, 即转移;否则顺序执行 且(A)data, 0CY;(A) data, 1CY 第三条: CJNE Rn,#data,rel ;若(Rn) data, 则(PC) +relPC, 即转移;否则顺序执行 且(Rn)data, 0CY;(Rn)data, 1CY,3.3.4 控制程序转移指令,第四条: CJNE Ri

48、,#data,rel ;若(Ri) data 则(PC) +relPC, 即转移;否则顺序执行 且(Ri)data,0CY;(Ri)data, 1CY 可见这4条指令会影响进位标志CY。,3.3.4 控制程序转移指令,3、循环转移指令DJNZ 循环转移指令共有两条指: DJNZ Rn,rel ;(Rn) -1Rn; 若(Rn)0,则(PC)+ relPC , 否则顺序执行 DJNZ direct,rel ;(Rn) -1direct; 若(direct)0,则(PC)+relPC , 否则顺序执行 指令的实际编写形式为: DJNZ Rn,标地址标号 DJNZ direct,目标地址标号,3.3.4 控制程序转移指令,例3-15 试编写程序,统计片内RAM中从40H单元开始的20个单元中0的个数,结果存于

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1