第2章 MCS-51单片机指令系统与汇编语言程序设计_第1页
第2章 MCS-51单片机指令系统与汇编语言程序设计_第2页
第2章 MCS-51单片机指令系统与汇编语言程序设计_第3页
第2章 MCS-51单片机指令系统与汇编语言程序设计_第4页
第2章 MCS-51单片机指令系统与汇编语言程序设计_第5页
已阅读5页,还剩212页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章

MCS-51单片机指令系统与汇编语言程序设计主要内容:MCS-51单片机的寻址方式、指令系统、基本程序结构及汇编语言的开发和调试。重点:寻址方式、各种指令的应用、程序设计的规范、程序设计的思想及典型程序的理解和掌握。难点:控制转移、位操作指令的理解及各种指令的灵活应用,以及程序设计的基本方法和针对具体的硬件设计出最合理的软件。第2章MCS-51单片机指令系统与汇编语言程序设计2.1汇编语言概述2.2MCS-51单片机的寻址方式2.3MCS-51单片机的指令系统2.4MCS-51单片机C51语言

2.5程序设计2.6程序设计举例2.7汇编语言的开发环境指令系统:一台计算机所能识别、执行的指令的集合就是它的指令系统。机器语言:指令系统是一套控制计算机执行操作的二进制编码,称为机器语言。机器语言指令是计算机惟一能直接识别和执行的指令。

汇编语言:利用指令助记符来描述指令系统的一套计算机指令,称为汇编语言。

计算机的指令系统一般都是利用汇编语言描述的,是由计算机硬件设计所决定的。指令系统没有通用性。单片机一般是空机,未含任何系统软件。因此在第一次使用前,必须对其进行编程。

2.1汇编语言概述

指令:计算机用于控制各功能部件完成某一指定动作的指示和命令称为指令。指令的表示形式是识别指令的标志。指令的表示形式:

(1)指令的二进制形式

机器码、源程序的目标代码均为二进制形式,直接为计算机识别和执行。读/写和记忆困难。(2)指令的十六进制形式

指令的十六进代码需翻译成二进制代码才能被计算机识别和执行。特点是方便读,写和记忆困难。

(3)指令助记符用英文字母、单词表征指令的功能。其源程序必须翻译成机器码(目标代码)才能被计算机识别和执行。特点是方便读/写和记忆。2.1.1汇编语言指令格式与伪指令2.1.2指令的分类2.1.3指令中的常用符号2.1.4指令的字节数

2.1汇编语言概述

2.1.1汇编语言指令格式与伪指令

1.常用单位与术语位(bit):位是计算机所能表示的最小的、最基本的数据单位,位通常是指一个二进制位。字节(Byte):一个连续的8位二进制数码称为一个字节,即1Byte=8bit。字(Word):通常由16位二进制数码组成,即1Word=2Byte。字长:字长是指计算机一次处理二进制数码位的多少。MCS-51型单片机是8位机,所以说它的字长为8位。

MCS-51系列单片机都是以Intel公司最早的典型产品8051为核心,增加了一定的功能部件后构成的。本章以8051为主介绍MCS-51系列单片机。。2.汇编语言指令格式

指令格式:指令的表示方式称为指令格式,它规定了指令的长度和内部信息的安排。完整的指令格式如下:[标号:]操作码

[操作数][,操作数][;注释]其中:[]项是可选项。标号:指本条指令起始地址的符号,也称为指令的符号地址。代表该条指令在程序编译时的具体地址。操作码:又称助记符,它一般是对应英文的缩写,它规定了指令具体的操作功能,描述指令的操作性质,是指令语句的关键,是一条指令中不可缺少的内容。操作数:可以是一个具体的数据,或是存放数据的地址。注释:可选项,是为增加程序的可读性而设置的,是针对某指令而添加的说明性文字,不产生可执行的目标代码。伪指令:也称为汇编程序的控制命令。是程序员发给汇编程序的命令,用来设置符号值、保留和初始化存储空间、控制用户程序代码的位置。伪指令只出现在汇编前的源程序中,仅提供汇编用的某些控制信息,不产生可执行的目标代码,是CPU不能执行的指令。

3.伪指令

(1)定位伪指令ORG

格式:ORGn

其中:n为绝对地址,可以是十六进制数、标号或表达式。功能:规定编译后的机器代码存放的起始位置。在一个汇编语言源程序中允许存在多条定位伪指令,但每一个n值都应和前面生成的机器指令存放地址不重叠。例如:

ORG 1000H START:MOVA,#20H MOVB,#30H┇(2)结束汇编伪指令END

格式:[标号:]END[表达式]

功能:放在汇编语言源程序的末尾,表明源程序的汇编到此结束,其后的任何内容不予理睬。(3)赋值伪指令EQU

格式:字符名称xEQU赋值项n

功能:将赋值项n的值赋予字符名称x。程序中凡出现该字符名称x就等同于该赋值项n,其值在整个程序中有效。赋值项n可以是常数、地址、标号或表达式。在使用时,必须先赋值后使用。“字符名称”与“标号”表示形式的区别:“字符名称”后无冒号,而“标号”后面有冒号。(4)定义字节伪指令DB

格式:[标号:]DBx1,x2,…,xn

功能:将8位数据(或8位数据组)x1,x2,…,xn顺序存放在从当前程序存储器地址开始的存储单元中。xi可以是8位数据、ASCII码、表达式,也可以是括在单引号内的字符串。两个数据之间用逗号“,”分隔。

xi

为数值常数时,取值范围为00H~FFH。xi为ASCII码时,要使用单引号‘’,以示区别。xi为字符串常数时,其长度不应超过80个字符。

(5)定义双字节伪指令DW

格式:[标号:]DWx1,x2,…,xn

功能:将双字节数据(或双字节数据组)顺序存放在从标号指定地址单元开始的存储单元中。其中,xi为16位数值常数,占两个存储单元,先存高8位(存入低位地址单元中),后存低8位(存入高位地址单元中)。(6)预留存储空间伪指令DS

格式:[标号:]DSn

功能:从标号指定地址单元开始,预留n个存储单元,汇编时不对这些存储单元赋值。n可以是数据,也可以是表达式。注:DB、DW、DS伪指令只能对程序存储器进行赋值和初始化工作,不能用来对数据存储器进行赋值和初始化工作。

(7)定义位地址符号伪指令BIT

格式:字符名称xBIT位地址n

功能:将位地址n的值赋予字符名称x。程序中凡出现该字符名称x就代表该位地址。位地址n可以是绝对地址,也可以是符号地址。(8)数据地址赋值伪指令DATA

格式:字符名称xDATA表达式n

功能:把表达式n的值赋值给左边的字符名称x。n可以是数据或地址,也可以是包含所定义的“字符名称x”在内的表达式,但不能是汇编符号。

DATA与EQU的主要区别是:EQU定义的“字符名称”必须先定义后使用,而DATA定义的“字符名称”没有这种限制。所以,DATA伪指令通常用在源程序的开头或末尾。2.1.2指令的分类

MCS-51指令系统有111条指令,可按下列几种方式分类:1.按指令字节数分类

每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条),双字节(46条),3字节(16条)。2.按指令执行时间分类

每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单机器周期指令(65条)、双机器周期指令(44条)和四机器周期指令(2条)。3.按功能分类按功能可分为5大类:数据传送指令(29条)、算术操作指令(24条)、逻辑操作指令(24条)、控制转移指令(17条)和位操作指令(17条)。指令的字节数:

一般地,指令操作码占1字节;操作数中,直接地址derict占1字节,8位数据#data占1字节,16位数据#data16占两字节;操作数中的A、B、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC、SFR等均隐含在操作码中。(1)1字节指令(单字节指令)

①指令中无操作数,只有操作码。NOPREI②操作数的寄存器号隐含在指令码中。

MOVA,Rn;指令码为11101rrrINCDPTR;指令码为A3H(2)2字节指令(双字节指令)

指令的第一字节为操作码,第二字节为操作数。指令的格式:操作码操作数

MOVA,#data;指令码为01110100#data(3)3字节指令(三字节指令)

指令的第一字节为操作码,第二字节为目的操作数,第三字节为源操作数。指令的格式:操作码目的操作数,源操作数

ANLdirect,#data;指令码为01010011direct#data2.1.3指令中的常用符号

MCS-51指令系统共有44种助记符,类似于8086。指令中,除助记符外,其余符号意义如下:Rn(n=0~7):表示当前工作寄存器R0~R7中的任一个寄存器。Ri(i=0或1):表示通用寄存器组中用于间接寻址的两个寄存器R0,R1。#data:表示8位直接参与操作的立即数。#data16:表示16位直接参与操作的立即数。direct:表示片内RAM的8位单元地址。addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。addr16:表示16位目的地址,主要用于LCALL和LJMP指令中。rel:用补码形式表示的8位二进制地址偏移量,取值范围为

128~+127,主要用于相对转移指令,以形成转移的目的地址。DPTR:数据指针,用于寄存器间接寻址方式和变址寻址方式。bit:表示片内RAM的位寻址区,或者是可以位寻址的SFR的位地址。A(或ACC):表示累加器。B:表示B寄存器。C:表示PSW中的进位标志位Cy。@:在间接寻址方式中,用于间接寻址寄存器指针的前缀标志。$:表示当前指令的地址。/:在位操作指令中,表示对该位先求反后再参与操作。(X):表示由X所指定的某寄存器或某单元中的内容。

((X)):表示由X间接寻址单元中的内容。←:表示指令的操作结果是将箭头右边的内容传送到左边。→:表示指令的操作结果是将箭头左边的内容传送到右边。∨、∧、⊕:表示逻辑或、与、异或。2.1.4指令的字节数

指令操作码——1字节;直接地址——1字节,8位数据——1字节,16位数据——2字节;操作数中的A、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC等均隐含在操作码中。B在乘除法指令中隐含,用作通用寄存器时占1字节。(1)1字节指令(单字节指令)

①指令中只有操作码。NOPRET②操作数的寄存器号隐含在指令码中。

MOVA,Rn;指令码11101rrrINCDPTR;指令码A3H(2)2字节指令(双字节指令)指令的格式:操作码操作数(操作码为第一字节,操作数为第二字节)

MOVA,#data;指令码为01110100#data(3)3字节指令(三字节指令)

指令的格式:操作码目的操作数,源操作数(三字节:操作码,目的操作数,源操作数)

ANLdirect,#data;指令码01010011direct#dataSWAPA2字节3字节2字节2字节1字节1字节3字节2字节1字节1字节2字节MOV DPTR,#1000HMOV A,20HANL A,#0FHMOVCA,@A+DPTRMOV A,R0MOV SP,#60HANL A,#0F0HMOVCA,@A+PCMOV 22H, ASJMP $注:部分特殊功能寄存器SFR占一个字节。寻址方式:在计算机中,说明操作数所在地址的方法称为指令的寻址方式。或者为指令按地址获得操作数的方式。

计算机执行程序实际上是在不断寻找操作数并进行操作的过程。每种计算机在设计时已决定了它具有哪些寻址方式,寻址方式越多,计算机的灵活性越强,指令系统也就越复杂。

MCS-51单片机的指令系统提供了七种寻址方式,分别为:

立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。一条指令可能含多种寻址方式。2.2MCS-51单片机的寻址方式

2.2.1立即寻址

定义:将立即参与操作的数据直接写在指令中,这种寻址方式称为立即寻址。

特点:指令中直接含有所需的操作数。可以是8位、16位,常常处于指令的第二字节和第三字节的位置上。表示方法:立即数通常使用#data或#data16表示,在立即数前面加“#”标志,区别于直接寻址中的直接地址(direc或bit)。

MOVA,#64H;(A)←立即数64HADDA,#05H;(A)←(A)+立即数05H

MOVDPTR,#1000H;(DPTR)←1000H2.2.2直接寻址定义:将操作数的地址直接存放在指令中,这种寻址方式称为直接寻址。特点:指令中含有操作数的地址指出了参与操作的数据所存放在存储器单元(位)的地址。寻址范围:片内RAM、SFR和位地址空间,ROM(LJMP、AJMP、LCALL)。

MOVR1,2DH;(R1)←(2DH)

MOV30H,4AH;(30H)←(4AH)注意:访问特殊功能寄存器SFR,除A、B、DPTR可用寄存器寻址以外,其他只能用直接寻址方式。如:指令MOVA,45H的执行过程及执行结果:2.2.3寄存器寻址定义:操作数存放在MCS-51内部的Rn或部分专用寄存器中。特点:指令中指出的寄存器的内容作为操作数。寻址范围:四组通用寄存器Rn(R0~R7)、部分专用寄存器(A,B,DPTR)。

MOVA,R7;(A)←(R7)

MOV30H,B;(30H)←(B)

MOVDPTR,#1000H;(DPTR)←1000H存放操作数的寄存器在指令代码中不占据单独的一个字节,嵌入(隐含)到操作码字节中。(B做通用寄存器不隐含)如:指令MOVA,R7的执行过程及执行结果:2.2.4寄存器间接寻址(寄存器间址)定义:指令的寄存器中存放的是操作数据的单元地址。特点:二次寻找操作数地址的寻址方式。寻址范围:内部RAM低128B(只能用R0或R1),外部RAM(R0、R1,DPTR)。

MOVR1,#30H;(R1)←立即数30HMOV@R1,#0FH;(30H)←立即数0FHMOVA,@R1;(A)←((30H))=立即数0FH寄存器间接寻址,寄存器前边必须加前缀符号“@”,不能用于寻址特殊功能寄存器SFR。如:已知(R0)=30H,(30H)=40H,指令MOVA,@R0的执行过程及执行结果:2.2.5变址寻址(基址加变址寻址)定义:操作数存放在变址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址单元中。特点:单字节指令,指令操作码中隐含基址寄存器和变址寄存器。执行时,基地址+偏移地址→操作数地址→操作数→完成相应的操作。寻址范围:ROM,主要用于查表性质的访问。注意:A中存放的偏移地址的范围为00H~FFH(无符号数)。

MCS-51单片机共有以下三条变址寻址指令:

MOVCA,@A+PC ;(A)←((A)+(PC)+1)

MOVCA,@A+DPTR;(A)←((A)+(DPTR))

JMP@A+DPTR;(PC)←(A)+(DPTR)如:已知(DPTR)=1234H,(A)=50H,程序存储器(1284H)=65H,指令MOVCA,@A+DPTR的执行过程及执行结果:2.2.6相对寻址定义:将程序计数器PC的当前值(取出本条指令后的PC值)与指令第二个字节给出的偏移量(rel)相加,形成新的转移目标地址。称为相对寻址方式。特点:相对寻址方式是为实现程序的相对转移而设计的,为相对转移指令所使用,其指令码中含有相对地址偏移量,能生成浮动代码。如:

SJMPrel;(PC)←(PC)+2+rel双字节指令

相对转移指令的目的地址=指令地址+指令字节数+偏移量寻址范围:只能对程序存储器ROM进行寻址。相对地址偏移量(rel)是一个带符号的8位二进制补码,其取值范围为

128~+127(以PC为中间的256个字节范围)。在实际编程中,“rel”通常用“标号”代替。如:指令SJMP06H的执行过程及执行结果。假设这条指令的地址为2000H。2.2.7位寻址定义:指令中给出的操作数是一个可单独寻址的位地址,这种寻址方式称为位寻址方式。特点:位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。寻址范围:片内RAM低128B中位寻址区、部分SFR(其中有83位——单元地址可被8整除的SFR的各位可以位寻址)。可位寻址的位地址的表示形式如下:(1)直接使用位地址形式。如:

MOV00H,C;(00H)←(Cy)

其中:00H是片内RAM中20H地址单元的第0位。(2)字节地址加位序号的形式。如:

MOV20H.0,C;(20H.0)←(Cy)

其中:20H.0是片内RAM中20H地址单元的第0位。(3)位的符号地址(位名称)的形式。

对于部分特殊功能寄存器,其各位均有一个特定的名字,所以可以用它们的位名称来访问该位。如:

ANLC,P;(C)←(C)∧(P)

其中:P是PSW的第0位,C是PSW的第7位。(4)字节符号地址(字节名称)加位序号的形式。

对于部分特殊功能寄存器(如状态标志寄存器PSW),还可以用其字节名称加位序号形式来访问某一位。如:

CPLPSW.6;(AC)←()

其中:

PSW.6表示该位是PSW的第6位。[例题1]

指出下列指令中源操作数的寻址方式

MOVA,R1;(A)←(R1)

ADDA,#05H;(A)←(A)+立即数05HMOVA,@R1;(A)←((R1))MOV30H,4AH;(30H)←(4AH)

MOVCA,@A+DPTR;(A)←((A)+(DPTR))SJMPLP;(PC)←(PC)+2+偏移量

MOV65H,C;(65H)←(Cy)寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址相对寻址位寻址寻址方式的适用范围:源操作数:7种寻址方式目的操作数:除立即寻址、变址寻址外的其他寻址方式。片内RAM(低128单元)区:寄存器寻址、寄存器间接寻址,直接寻址方式。片内SFR(RAM区的高128单元):直接寻址方式。片外RAM:寄存器间接寻址(以R0、R1或DPTR作间址寄存器)方式。程序存储器ROM:直接寻址(LJMP、AJMP、LCALL、ACALL)、变址寻址、相对寻址方式。位寻址区(片内RAM的20H~2FH单元的128位及SFR区的83位):位寻址方式。2.3MCS-51单片机的指令系统

MCS-51指令系统使用44种助记符,它们代表着33种功能,可以实现51种操作。指令助记符与操作数的各种可能的寻址方式的结合一共可构造出111条指令。

MCS-51单片机指令系统按其功能可分为数据传送类指令、算术运算类指令、逻辑运算和移位类指令、控制转移类指令和位操作类指令五大类。学习指令系统时,应注意:(1)指令的格式、功能。(2)操作码的含义,操作数的表示方法。(3)寻址方式,源、目的操作数的范围。(4)对标志位的影响。(5)指令的适用范围。(6)正确估算指令的字节数。一般地,操作码占1字节;操作数中,直接地址derict占1字节,#data占1字节,#data16占两字节;操作数中的A、B、R0~R7、C、@Ri、DPTR、@A+DPTR、@A+PC、SFR等均隐含在操作码中。2.3MCS-51单片机的指令系统2.3.1数据传送类指令(29条)2.3.2算术运算类指令(24条)2.3.3逻辑运算及移位类指令(24条)2.3.4控制转移类指令(17条)2.3.5位操作(布尔操作)类指令(17条)以累加器A为目的操作数的指令对P标志位有影响(CPL除外)立即数不能做目的操作数一条指令中不能同时出现两个Rn和@Ri2.3.1数据传送指令

最基本、最主要的操作指令。29条,可分为五类:(1)内部RAM间传送:(MOV——16条)(2)外部RAM与累加器间传送:(MOVX——4条)(3)ROM向累加器传送:(MOVC——2条)(4)数据交换:(SWAP,XCH,XCHD——5条)(5)堆栈操作:(PUSH,POP——2条)寻址范围:累加器A、片内RAM、SFR、片外RAM、ROM。功能:(目的地址)←(源地址),表示为:

<dest>

<src>

源地址单元的内容不变,立即数不能作为目的操作数。对标志位的影响:除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。1.内部RAM数据传送指令(16条)格式:

MOV<dest>,<src>范围:片内RAM、SFR中。指令形式:按目的操作数可将内部数据传送指令分为五类。(1)以累加器A为目的操作数(4条)

MOVA,<src>

其中:

<src>包括Rn、@Ri、direct、#data。影响P标志。

如:MOVA,30H——(A)

(30H)(2)以工作寄存器Rn为目的操作数(3条)

MOVRn,<src>

其中:

<src>包括A、direct、#data。

如:MOVR7,#30H——(R7)

#30H(3)以直接地址单元为目的操作数(5条)

MOVdirect,<src>

其中:

<src>包括A、Rn、@Ri、direct、#data。如:

MOV30H,20H;(30H)

(20H)(4)以间址寄存器@Ri为目的操作数(3条)

MOV@Ri,<src>

其中:

<src>包括A、direct、#data。如:

MOV@R1,A;((R1))

(A)(5)16位数据传送指令(1条)

MOVDPTR,#data16

如:

MOVDPTR,#1000H;(DPTR)

#1000H

注意:(2)、(3)、(4)、(5)均不影响标志位。内部数据传送指令的传送关系图MCS-51允许在两个内部RAM的直接地址之间进行传送数据。不允许在两个工作寄存器之间直接进行传送数据。立即数不能做目的操作数。内部RAM数据传送指令练习:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#12HMOV31H,#34HMOVA,31HMOVR1,#30HMOV20H,30HMOV@R1,31HMOVDPTR,#5678HSJMP$END内部RAM数据传送指令小结指令操作码:MOV源、目的操作数均可在片内RAM、SFR中。立即数不能用作目的操作数。操作数A、Rn、@Ri、direct、#data之间,除Rn之间、Rn与@Ri之间、@Ri之间不能直接传送外,其余均可直接传送。源和目的操作数同为一种寻址方式只有直接地址direct。除以累加器A为目的操作数的数据传送指令对P标志位有影响外,其余均不影响标志位。

2.外部RAM数据传送指令(4条)

特点:只能通过A,采用寄存器间址(R0,R1和DPTR)。指令格式:

MOVXA,<src>MOVX<dest>,A

其中:

<src>、<dest>包括@DPTR、@Ri(R0,R1)

。@Ri——片外RAM的低256个单元;DPTR——片外RAM。对标志位的影响:

MOVXA,<src>——只影响P标志;

MOVX<dest>,A——不影响标志位。

如:

MOVXA,@R1;(A)

((R1))

MOVX@DPTR,A;((DPTR))

(A)外部RAM数据传送指令练习:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV32H,#56HMOVR0,#32HMOVXA,

@R0MOVDPTR,#1000H

MOVX@DPTR,ASJMP$END外部RAM数据传送指令小结

指令操作码:MOVX

源、目的操作数均可在片外RAM中,其中有一个必须是A。操作数为@DPTR、@Ri

,只能通过累加器A,采用寄存器间接寻址方式。

@Ri:片外RAM的低256个单元,

@DPTR:片外RAM的全部64KB的空间。除以累加器A为目的操作数的数据传送指令影响P标志位外,其余均不影响标志位。3.程序存储器(ROM)数据传送指令(查表指令)(2条)

特点:单向传送,只能读到累加器A中。专用于查表。指令格式:MOVCA,@A+DPTP;(A)←((A)+(DPTR))

MOVCA,@A+PC;(PC)←(PC)+1

(A)←((A)+(PC))

两条指令的异同:功能相同,使用中存在着差异。(1)查表的位置要求不同@A+DPTP(远程查表):表可放在64KBROM的任何地址,使用方便。@A+PC(近程查表):表只能放在ROM中查表指令后的256B的地址空间中。(2)偏移量的计算方法不同①查表地址:

@A+DPTP(远程查表):(A)+(DPTR)。

@A+PC(近程查表):(A)+(PC)+1②偏移量的计算方法:

@A+DPTP(远程查表):A为欲查数距离表首地址的值。

@A+PC(近程查表):A的值必须预先设置为:

(A)←表首地址-当前指令的PC值-1

这两条指令到程序设计时再详细讲解。

程序存储器ROM数据传送指令练习:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#05HMOVDPTR,#100H

MOVCA,@A+DPTR

MOVA,#09HMOVCA,@A+PC

SJMP$ORG100HTAB:DB11H,12H,13H,14H,15H,16H,17H,18H,19HDB1AH,1BH,1CH,1DH,1EH,1FHEND程序存储器(ROM)数据传送指令小结

指令操作码:MOVC,主要用于查表。源操作数在片外ROM中,目的操作数在A中。源操作数为@A+DPTR、@A+PC,只能读入累加器A中。

@A+DPTR:远程查表,表可放在64KBROM的任何处。

@A+PC:近程查表,表只能在查表指令后的256BROM

的地址空间中。偏移量A的计算方法:

@A+DPTR:(A)←欲查数值距离表首地址的值

@A+PC:

(A)←

表首地址-当前指令的PC值-1

影响P标志位。存储器中数据传送小结

CPU内部RAM用MOV指令,不能在两个Rn/@Ri之间直接传送。片外RAM用MOVX指令:低256B,可在A与@Ri之间传送;

64KB范围内,可在A与@DPTR之间传送。

ROM用MOVC指令,只能用MOVCA,@A+DPTRMOVCA,@A+PC。4.数据交换指令(5条)功能:两个数据交换、保存目的操作数。分两类:(1)半字节数据交换指令(2条)

指令格式:

SWAPA;(A)3~0←→(A)7~4

XCHDA,@Ri;(A)3~0←→((Ri))3~0

(2)字节交换指令(3条)

指令格式:XCHA,<src>

其中:

<src>包括Rn、@Ri、direct。数据交换指令练习:ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#83HMOVR0,#30HMOVR1,#31HMOVA,#59HSWAPAXCHDA,@R0XCHA,R0XCHA,@R1XCHA,32HSJMP$END数据交换指令小结半字节交换

SWAPA;(A)3~0←→(A)7~4

XCHDA,@Ri;(A)3~0←→((Ri))3~0

字节交换

XCHA,<src>;

<src>包括Rn、@Ri、direct。操作数在A、内部RAM中。影响P标志位。5.堆栈操作指令(2条)指令格式:

PUSHdirect;SP←(SP)+1,((SP))←(direct)

POPdirect;(direct)←((SP)),SP←(SP)

1特点:特殊的数据传送指令,根据SP中的栈顶地址进行操作。实质:以栈指针SP为间址寄存器的间址寻址方式。注意:堆栈区应避开使用的工作寄存器区和其他需要使用的数据区,系统复位后,SP的初始值为07H。一般初始化时要重新设置SP。

如:已知:(40H)=0F0H;(41H)=11H;(SP)=60H执行下面程序:

PUSH40HPUSH41HPOP42HPOP43H

如:设(A)=7BH;(35H)=11H;已知(SP)=60H执行下面程序,则:

PUSHACCPUSH35HPOPACCPOP35H

这也是字节交换的一种方式。

堆栈操作指令小结

指令操作码:PUSH,POP。操作数:一个在由SP设置的堆栈中,另一个在内部RAM中。

PUSH入栈,先加SP,后入;POP出栈,先出,后减SP。

堆栈操作指令是直接寻址指令,直接地址不能是寄存器名。堆栈操作的实质是以栈指针SP为间址寄存器的间址寻址方式。不影响标志位。用于执行中断、子程序调用、参数传递等程序的断点保护和现场保护。2.3.2算术运算指令

(24条)操作数:目的操作数A中;源操作数在Rn、片内RAM(direct,@Ri)中,或#data。算术运算指令可分为:加法运算:

(ADD——4条)带进位加法运算:

(ADDC——4条)带借位减法运算:

(SUBB——4条)加1/减1操作:

(INC,DEC——9条)单字节乘/除法运算:

(MUL,DIV——2条)十进制调整:

(DAA——1条)1.加法指令(4条)指令格式:

ADDA,<src>;(A)←(A)+<src><src>包括Rn、@Ri、direct、#data。对标志位的影响:影响PSW中的所有标志位。2.带进位的加法指令(4条)指令格式:

ADDCA,<src>;(A)←(A)+<src>+(Cy)<src>包括Rn、@Ri、direct、#data。对标志位的影响:影响PSW中的所有标志位。

编写程序实现16位二进制数加法。将内部RAM的41H单元和40H单元中的16位二进制数与内部RAM的31H单元和30H单元中的16位二进制数相加,并将结果存到内部RAM的51H单元和50H单元中。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,40H ADDA,30H

MOV50H,A MOVA,41H

ADDCA,31H MOV51H,A SJMP$ END

3.带借位的减法指令(4条)

指令格式:

SUBBA,<src>;(A)←(A)-<src>-(Cy)<src>包括Rn、@Ri、direct、#data。对标志位的影响:影响PSW中的所有标志位。

注意:MCS-51指令系统中无不带借位的减法指令,

不带借位的减法:

CLRC(Cy=0)→SUBB。

编写程序实现79H-56H并,将结果存到内部RAM的30H单元中。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HCLRCMOVA,#79H SUBBA,#56HMOV30H,A SJMP$ END 4.十进制调整指令(BCD码修正指令)(1条)

功能:跟在ADD、ADDC后面,对运算结果进行压缩BCD码修正,完成十进制加法运算功能。指令格式:DAA特点:专用指令。两个压缩的BCD码按二进制数相加后必须经本指令调整才能得到压缩的BCD码的和。操作数:源操作数只能在累加器A中,结果存入A中。十进制调整指令对PSW中的除溢出标志位OV外的所有标志位均产生影响。

注意:只适用加法,不能对减法指令进行修正。

BCD码减法方法:变减法为补码加法→DAA

变减法为补码加法:被减数+减数的补码减数的补码=9AH-减数,99+1=9AH。

编写程序实现95+59的BCD码加法,将结果存到内部RAM的40H单元中。

ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#95H ADDA,#59HDAA MOV40H,A SJMP$ END 5.加1指令(增量指令)(5条)

功能:操作数所指定的单元的内容加1。指令格式:INC<dest>;<dest>←<dest>+1<dest>包括A、Rn、direct、@Ri、DPTR操作数:只有一个操作数,即是源操作数又是目的操作数。对标志位的影响:除对累加器A操作影响P标志位外,其余均不影响PSW的各标志位。

6.减1指令(减量指令)(4条)

功能:操作数所指定的单元的内容减1。指令格式:DEC<dest>;<dest>←<dest>-1<dest>包括A、Rn、direct、@Ri。(DPTR无减1)操作数:只有一个操作数。对标志位的影响:同加1指令。

编写程序实现将内部RAM中以30H为起始地址的三个无符号数相加,并将结果(假设小于100H)存放到40H单元中。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#13HMOV31H,#24HMOV32H,#35HMOVA,#00H MOVR0,#30H ADDA,@R0 INCR0 ADDA,@R0 INCR0 ADDA,@R0 MOV40H,A SJMP$ END

编写程序实现编程实现DPTR减1的运算。

由于减1指令中没有DPTR减1指令,因此必须将DPTR分为DPH和DPL两部分。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HCLRCMOVA,DPLSUBBA,#01H MOVDPL,A MOVA,DPH SUBBA,#00H ;(A)←(A)-(Cy)-0MOVDPH,A SJMP$ END 7.乘除指令(2条)

功能:实现乘法或除法操作。特点:在指令系统中执行时间最长,均为四周期指令。指令格式:

MULAB;(B)(A)←(A)×(B)

DIVAB;(A)←(A)/(B)…(B)对标志位的影响:影响PSW中的Cy,OV,P标志位,乘除:Cy=0;P是由A中1的个数的奇偶性决定的;若乘积大于FFH→OV=1,否则清0。除法:除数为0→OV=1,否则清0。算术运算指令小结对标志位的影响:除加1、减1指令外,均影响标志位。1.加法运算:(ADD——4条)2.带进位加法运算:

(ADDC——4条)3.带借位减法运算:(SUBB——4条)操作数:加法、带进位加法、带借位减法的目的操作数均是A,最终结果应存入A,源操作数为Rn、@Ri、direct、#data。加法运算(ADD);(A)

(A)+(第二操作数)

带进位加法(ADDC);(A)

(A)+(Cy)+(第二操作数)

带借位减法(SUBB);(A)

(A)-(Cy)-(第二操作数)4.加1/减1操作:(INC,DEC——9条)

INC,DEC与用加/减法指令做加1/减1操作不同之处在于INC、DEC不影响标志位,DPTR无减1。操作数为A、Rn、direct、@Ri、DPTR。5.单字节乘/除运算:

(MUL,DIV——2条)两个单字节数的乘/除法运算只在A与B之间进行。MULAB:(A)与(B)相乘,积为16位数,(B)

积的高8位;(A)

积的低8位DIVAB:(A)除以(B),结果用2字节表示,(A)

商的整数部分;(B)

余数6.十进制调整:(DAA——1条)用于两个BCD码之间的相加,只能跟在ADD/ADDC之后。2.3.3逻辑运算和移位指令(24条)对标志位的影响:除了两条带进位的循环移位指令外,其余均不影响PSW中的各标志位;目的操作数是A时影响P标志位。分类:5种,24条。逻辑与运算:(ANL——6条)逻辑或运算:(ORL——6条)逻辑异或运算:(XRL——6条)累加器清零/取反:(CLR,CPL——2条)累加器移位操作:

(RL,RLC,RR,RRC—4条)功能:逻辑运算,模拟各种数字逻辑电路的功能,进行逻辑电路的设计。1.逻辑与运算指令(6条)功能:实现两个操作数的逻辑与。指令格式:ANLA,<src>;

<src>包括Rn、@Ri、direct、#dataANLdirect,<src>

<src>包括A、#data适用场合:逻辑与,用于操作数的某些位不变(这些位与“1”),某些位置0(这些位与“0”)。2.逻辑或运算指令(6条)功能:实现两个操作数的逻辑或。指令格式:ORLA,<src>;

<src>包括Rn、@Ri、direct、#data

ORLdirect,<src>;

<src>包括A、#data适用场合:逻辑或,用于操作数的某些位不变(这些位或“0”),某些位置1(这些位或“1”)。

已知内部RAM的30H单元中存放着数9的ASCII码(39H),试编写程序求其BCD码。

数9的ASCII码为00111001B,而数9的BCD码为00001001B。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#39HANL30H,#0FHSJMP$ END另一种方法:

MOVA,30H CLRC SUBBA,#30H MOV30H,A

SJMP$ END

编写程序实现将累加器A中的高4位传送到P1口的高4位中,保持P1口的低4位不变。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#35HANLA,#11110000B ANLP1,#00001111B ORLP1,A SJMP$ END

3.逻辑异或运算指令(6条)功能:两个操作数的逻辑异或。指令格式:XRLA,<src>;

<src>包括Rn、@Ri、direct、#data

XRLdirect,<src>;

<src>包括A、#data适用场合:逻辑异或,用于操作数的某些位不变(这些位异或“0”),某些位取反(这些位异或“1”)。

编写程序实现将存放在片内RAM的30H单元中数据的低4位取反,高2位置1,其余2位清0。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOVA,#35H MOVA,30H XRLA,#00001111B ORLA,#11000000B ANLA,#11001111B MOV30H,A

SJMP$ END

循环移位指令示意图4.循环移位指令(4条)不带进位的循环左、右移位(操作码为RL,RR)带进位的循环左、右移位(操作码为RLC,RRC)特点:只能对累加器A进行循环移位。指令格式:

操作码A功能:A中的数据逐位左移1位——乘2,逐位右移1位——除以2。

设内部RAM的30H,31H单元中存有自然数,编程将其扩大为原来的2倍。其中,30H单元为高位,31H单元为低位。

因为累加器A中的数据逐位左移1位相当于原内容乘以2,所以可以用左移操作来实现扩大2倍。移位时,应注意字节与字节之间的衔接。ORG0000HLJMPSTARTORG0030HSTART:MOVSP,#60HMOV30H,#10H MOV31H,#20H CLRCMOVA,31H RLCA MOV31H,A MOVA,30H RLCA MOV30H,A SJMP$ END 5.累加器清0与取反指令(2条)

指令格式:CLRA;(A)←00H

CPLA;(A)←()特点:节省存储空间,提高程序执行效率。

对标志位的影响:CLR只影响P标志位,CPL不影响标志位。

逻辑运算和移位指令小结1.逻辑与、或、异或与(ANL—6条),或(ORL—6条),异或(XRL—6条)。操作码:ANL、ORL、XRL指令格式:操作码A,<src>;<src>包括Rn、@Ri、direct、#data

操作码direct,<src>;<src>包括A、#data功能:与(清0或者保留某些位)、或(置1或者保留某些位)、异或(取反或者保留某些位)。模拟各种数字逻辑电路的功能,进行逻辑电路的设计。标志位:除目的操作数是A影响P标志,其余均不影响标志位。2.循环移位指令(4条)不带进位的循环左/右移位(为RL,RR)带进位的循环左/右移位(RLC,RRC)指令格式:操作码A标志位:

RL,RR影响P标志,RLC,RRC影响C、P标志。功能:左移1位——乘2,右移1位——除以2。3.累加器清0与取反指令(2条)指令格式:CLR/CPLA标志位:CLR只影响P标志位,CPL不影响标志位。2.3.4控制转移指令(17条)功能:改变PC中的内容,控制程序执行的流向,实现程序分支转向。分类:4种,17条。无条件转移:(LJMP,AJMP,SJMP,JMP——4条)条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ——8条)子程序调用及返回:(LCALL,ACALL,RET,RETI——4条)空操作:

(NOP——1条)“耗时”一个机器周期。

对标志位的影响:除了CJNE影响Cy外,其余均不影响标志位。1.无条件转移指令(4条)定义:不规定条件的程序转移。指令格式:

长转移指令:

LJMPaddr16;(PC)←addr15~0

绝对转移指令:

AJMPaddr11;(PC)←(PC)+2,(PC)10~0←addr11

相对(短)转移指令:SJMPrel;(PC)←(PC)+2+rel

间接(散)转移指令:JMP@A+DPTR;(PC)←(DPTR)+(A)注意:(1)指令中的地址或偏移量均可采用标号,只有在执行前才被汇编成实际的二进制地址。(2)指令的转移范围:在执行当前转移指令后的PC值的基础上:

LJMP:

64KB

AJMP:2KB

SJMP:

-128~+127(用补码表示)

JMP:

64KB(3)SJMPrel中地址偏移量rel的计算方法:

rel=转移目标地址-转移指令地址(当前PC值)-2(4)原地踏步(暂停当前的程序)的实现

SJMP$

或LP:SJMPLP

(5)JMP@A+DPTR功能:实现程序的分支转移(散转),DPTR为转移目的的起始地址,A为转移目的的偏移量。(6)在编程中,经常使用短转移指令SJMP和相对转移指令AJMP,以便生成浮动代码,并不经常使用长转移指令LJMP。

2.条件转移指令(2条)功能:实质上是A判零指令。在规定的条件满足时进行程序转移,否则程序往下顺序执行。指令格式:

JZrel;若(A)=0,则转移(PC)←(PC)+2+rel

若(A)≠0,则顺序执行(PC)←(PC)+2JNZrel;若(A)≠0,则转移(PC)←(PC)+2+rel

若(A)=0,则顺序执行(PC)←(PC)+2指令的转移范围:rel的取值范围

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论