单片机应用技术C语言版MCS51指令系统及汇编课件_第1页
单片机应用技术C语言版MCS51指令系统及汇编课件_第2页
单片机应用技术C语言版MCS51指令系统及汇编课件_第3页
单片机应用技术C语言版MCS51指令系统及汇编课件_第4页
单片机应用技术C语言版MCS51指令系统及汇编课件_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用技术

(C语言版)

第3章MCS-51指令系统及

汇编程序设计9/19/20231单片机应用技术

(C语言版)

第3章MCS-51指令第3章MCS-51指令系统

及汇编程序设计目录3.1基本概念3.2MCS-51单片机指令系统3.3汇编语言程序格式及伪指令3.4汇编语言程序设计方法9/19/20232第3章MCS-51指令系统

及汇编程序设计目录8/6/3.1基本概念主要内容3.1.1汇编语言格式3.1.2指令中常用符号3.1.3寻址方式9/19/202333.1基本概念主要内容8/6/202333.1.1汇编语言格式

一、指令和指令系统

指令:是计算机中CPU根据人的意图来执行某种操作的命令。

指令系统:是一台计算机(CPU)所能执行的全部指令的集合。

9/19/202343.1.1汇编语言格式 一、指令和指令系统8/6/202

二、程序和程序设计语言

程序:人们编写的、使计算机完成某项工作的指令序列,称为程序。

程序设计语言:编写程序的一整套规则、方法。

程序设计语言分类:分为机器语言、汇编语言和高级语言等。9/19/20235 二、程序和程序设计语言8/6/20235

三、机器语言

机器语言:用二进制编码表示每条指令,是计算机能够直接识别和执行的语言。

目标程序:用机器语言编写的程序。 例如“13+25”,在MCS-51中的机器码为 0111010000001101 0010010000011001

9/19/20236 三、机器语言8/6/20236

四、汇编语言:用助记符、符号、数字等表示指令的程序语言。

例如,上面的“13+25”的例子可写成:汇编语言程序

机器语言代码MOVA,#0DH 74H0DHADDA,#19H 24H19H

相对于机器语言来说,汇编语言容易理解和记忆。

汇编语言和机器语言都属于低级语言。9/19/20237 四、汇编语言:用助记符、符号、数字等表示指令的程序语言。8

五、MCS-51汇编语言指令格式

其一般格式如下:[标号:]操作码[目的操作数][,源操作数][;注释] 方括号中的内容可以没有,即可以没有标号、操作数和注释,至少要有操作码。9/19/20238 五、MCS-51汇编语言指令格式8/6/20238 例如:

START: MOV A,#23H;23H→A “START”为标号 “MOV”为操作码 “A,#23H”为操作数 “23H→A”为注释9/19/20239 例如:8/6/20239 3.1.2指令中常用符号

Rn:

n=0~7。当前选中的工作寄存器R0~R7。

Ri: i=0、1。当前选中的工作寄存器组中可作为地址指针的R0和R1。

#data:

8位立即数。

#data16:16位立即数。

direct:

8位片内RAM单元地址,含SFR。

addr16:

程序存储空间的16位地址

9/19/202310 3.1.2指令中常用符号8/6/20231

rel:补码形式的8位地址偏移量。地址偏移量,在-128~+127。

bit:片内RAM或SFR中的直接寻址位地址

/bit——指定位求反,再参与逻辑操作,但取反后不影响该位的原值

@:间址寄存器的前缀符号,表示间接寻址。9/19/202311 rel:补码形式的8位地址偏移量。地址偏移量,在-128

(×):

表示×中的内容

((×)): 表示由×中指向的地址单元中的内容

←、→:

指令操作流程,将内容送到箭头指向的地方$——当前指令地址

MOV A,#23H;23H→A9/19/202312 (×): 表示×中的内容8/6/2023123.1.3寻址方式

主要内容1立即数寻址2直接寻址3寄存器寻址4寄存器间接寻址5变址寻址6 相对寻址7位寻址9/19/2023133.1.3寻址方式主要内容8/6/202313

寻址方式:就是指CPU寻找参与运算的(源)操作数的方式。(寻找操作数所在单元地址的方式。)

7种寻址方式:立即数寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。9/19/202314 寻址方式:就是指CPU寻找参与运算的(源)操作数的方式1立即数寻址

立即数寻址也叫立即寻址、常数寻址。其操作数就在指令中,是指令的一部分,紧跟在操作码后面,用“#”符号作前缀,以区别地址。例如: MOVA,#2CH;2CH→A 表示把2CH这个数送给累加器A9/19/2023151立即数寻址 立即数寻址也叫立即寻址、常数寻址。其操作

立即数也可以是16位的,如:

MOV DPTR,#1234H

立即数的低8位送给了DPL,高8位送给了DPH。

9/19/202316 立即数也可以是16位的,如:8/6/2023162直接寻址

直接寻址:是指操作数存放在片内RAM中,指令中给出操作数的地址。例如: MOV A,30H ;(30H)→A

说明:

(1)直接寻址方式可以访问片内RAM的低128字节和所有的特殊功能寄存器。 低128BRAM

data区特殊功能寄存器80HFFH00H7FH9/19/2023172直接寻址 直接寻址:是指操作数存放在片内RAM中,指对于特殊功能寄存器,既可以使用地址,也可以使用SFR名(P21)。例如: MOV A,P1

MOV A,90H

9/19/202318对于特殊功能寄存器,既可以使用地址,也可以使用SFR(2)直接寻址不能够访问片内RAM的高128字节(增强型),高128字节只能够间接访问。低128BRAM

data区高128BRAMidata区特殊功能寄存器00H7FH80HFFH80HFFH增强型单片机片内RAM9/19/202319(2)直接寻址不能够访问片内RAM的高128字节(增强型),3寄存器寻址

寄存器寻址:就是由指令指出寄存器组R0~R7中某一个或寄存器A、B、DPTR的内容作为操作数。9/19/2023203寄存器寻址 寄存器寻址:就是由指令指出寄存器组R0~9/19/2023218/6/202321例如: MOVA,R7 ;(R7)→A MOV 36H,A ;(A)→36H ADD A,R0 ;(A)+(R0)→A 对于工作寄存器组的操作,必须要考虑PSW中RS1、RS0的值(P22),确定当前使用的是哪一组寄存器以及它们的实际地址。

9/19/202322例如:8/6/2023224寄存器间接寻址

寄存器间接寻址:由指令指出某一寄存器的内容作为操作数地址的寻址方式。

存放地址的寄存器称为间址寄存器,在指令中,在寄存器前面加前缀“@”表示。 MCS-51单片机规定,使用Ri(i=0、1,即指R0、R1)、SP和DPTR作间址寄存器。 寄存器间接寻址有以下几种情况。9/19/2023234寄存器间接寻址 寄存器间接寻址:由指令指出某一寄存器

一、使用Ri间接访问片内RAM

间接访问的范围:256字节(包括低128字节和高128字节),但不包括特殊功能寄存器。例如: MOV A,@Ri ;((Ri))→A MOV @Ri,A ;(A)→(Ri)

((Ri)):表示Ri中内容为地址的数据。 操作过程如图3-3所示。9/19/202324 一、使用Ri间接访问片内RAM8/6/202324图3-3间接寻址(MOVA,@R0)示意图②62HA::62H→98H—

①98HR0::片内RAMR0的内容为地址,将该地址中的内容传送给累加器A。9/19/202325图3-3间接寻址(MOVA,@R0)示意图②6

二、使用DPTR间接访问片外RAM

间接访问的范围:片外RAM的64KB全空间。其指令也是只有两条: MOVX A,@DPTR ;((DPTR))→A MOVX@DPTR,A ;(A)→(DPTR) DPTR为16位地址。9/19/202326 二、使用DPTR间接访问片外RAM8/6/2023265变址寻址(访问空间为ROM)

变址寻址:基址加变址的间接寻址。指令中给出存放基址和变址的寄存器。

基地址寄存器:DPTR或PC;

变址寄存器:累加器A。

也在地址寄存器前面加上前缀“@”。例如: MOVC A,@A+DPTR ;((A)+(DPTR))→A 该指令的操作过程如图3-4所示。

DPTR内容与A中内容相加作为地址,将该地址中的内容传送给A。9/19/2023275变址寻址(访问空间为ROM) 变址寻址:基址加变址的MOVCA,@A+DPTR ;((A)+(DPTR))→A9/19/202328MOVCA,@A+DPTR ;((A)+(DPTR))→

变址寻址的空间为程序存储器

寻址范围: 若使用DPTR为基地址寄存器,寻址范围为64KB; 若使用PC为基地址寄存器,寻址空间在PC之后256字节范围内。9/19/202329 变址寻址的空间为程序存储器8/6/202329例:已知片外ROM中的0302H单元中有一个常数x,现欲把它取到累加器A中,请写出程序。 MOVDPTR,#0300H MOVA,#02H MOVCA,@A+DPTR

问:MOVCA,@0302H是否对?9/19/202330例:已知片外ROM中的0302H单元中有一个常数x,现欲把它

6相对寻址(用于跳转指令)

相对寻址:是以当前程序计数器PC值为基地址,加上指令中给出的偏移量rel,得到目标位置的地址。即: 目标地址=PC+rel∴ rel=目标地址-PC

偏移量rel为8位补码,其值为-128~+127。rel<0程序向回跳转;rel>0,程序向前跳转。9/19/202331 6相对寻址(用于跳转指令)8/6/202331 例如: SJMP54H

说明: (1)在实际编程中,不需要计算rel,rel由编译器自动计算;

(2)当跳转范围超出了rel范围,编译器会提示,对程序做适当调整即可。9/19/202332 例如:8/6/2023327位寻址

位寻址:是指操作数是二进制位、位地址

位操作数地址范围:片内RAM中20H~2FH,SFR中可以按位寻址的位。 例如: SETB 3DH9/19/2023337位寻址 位寻址:是指操作数是二进制位、位地址8/6/

位地址的3种表示方式:

1)直接位地址(00H~7FH)。如32H

2)字节地址带位号。如20H.1,表示20H单元的第1位。

3)特殊功能寄存器名带位号。如P1.7,表示P1口的第7位。9/19/202334 位地址的3种表示方式:8/6/2023349/19/2023358/6/2023353.2MCS-51单片机指令系统

主要内容3.2.1数据传送与交换指令3.2.2算术操作类指令3.2.3逻辑运算指令3.2.4控制转移类指令3.2.5位操作指令9/19/2023363.2MCS-51单片机指令系统主要内容8/6/202指令概述(P266附录C) MCS-51单片机指令系统有111条指令,分类如下。

1、按字节分类

单字节指令:49条; 双字节指令:45条

三字节指令:17条

2、按执行时间分类

单周期指令:64条; 双周期指令:45条

四周期指令:2条(乘、除指令)9/19/202337指令概述(P266附录C)8/6/202337

3、按功能分类(分为5大类) 数据传送指令:29条 算术运算指令:24条 逻辑运算指令:24条 控制程序转移指令:17条 位操作指令:17条

MCS-51指令没有复杂的寻址方式,并且助记符只有42种。

9/19/202338 3、按功能分类(分为5大类)8/6/2023383.2.1数据传送指令 数据传送是使用最频繁的一类指令。 所谓传送,就是把源地址单元的内容传送到目的地址单元中去,而源地址单元中的内容不变。

数据传送指令可以分为三组:普通传送指令、数据交换指令、堆栈操作指令。

9/19/2023393.2.1数据传送指令 数据传送是使用最频繁的一类指令

一、普通传送指令

普通传送指令以助记符MOV为基础,分为: 片内数据存储器传送指令,用MOV 片外数据传送指令,用MOVX 程序存储器传送指令,用MOVC9/19/202340 一、普通传送指令8/6/202340

1、片内数据存储器传送指令MOV

格式:

MOV目的操作数,源操作数

源操作数:可以是A、Rn、@Ri、direct、#data

目的操作数:可以是A、Rn、@Ri、direct、DPTR 以目的操作数的不同可以分为五个小组,共16条指令。

9/19/202341 1、片内数据存储器传送指令MOV8/6/202341

(1)以A为目的操作数

MOVA,Rn

;(Rn)→A

MOV A,direct

;(direct)→A

MOV A,@Ri

;((Ri))→A

MOV A,#data

;data→A

工作寄存器Rn:R0~R7

Ri间接寻址寄存器:R0或R1

本组4条指令都影响PSW中的P标志位 指令字节数:1、2、1、29/19/202342 (1)以A为目的操作数8/6/202342

(2)以Rn为目的操作数

MOV Rn,A ;(A)→Rn

MOV Rn,direct ;(direct)→Rn

MOV Rn,#data ;data→Rn

注意:MOVRn,Rn(错误)(P32(2)①)本组指令都不影响PSW中的标志位。 指令字节数:1、2、2

9/19/202343 (2)以Rn为目的操作数8/6/202343

(3)以直接地址direct为目的操作数

MOV direct,A ;(A)→direct

MOV direct,Rn ;(Rn)→direct

MOV direct2,direct1

;(direct1)→direct2

MOV direct,@Ri ;((Ri))→direct

MOV direct,#data ;data→direct

本组指令都不影响PSW中的标志位 指令字节数:2、2、3、2、3

9/19/202344 (3)以直接地址direct为目的操作数8/6/2023

(4)以间接地址@Ri为目的操作数

MOV @Ri,A ;(A)→(Ri)

MOV @Ri,direct ;(direct)→(Ri)

MOV @Ri,#data ;data→(Ri)

本组指令都不影响PSW中的标志位。

9/19/202345 (4)以间接地址@Ri为目的操作数8/6/202345

(5)以DPTR为目的操作数

MOV DPTR,#data16

;dataH→DPH,dataL→DPL

9/19/202346 (5)以DPTR为目的操作数8/6/202346例设片内RAM中(30H)=40H,(40H)=10H,分析以下程序执行后各单元及寄存器中的内容。

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)=20H9/19/202347例设片内RAM中(30H)=40H,(40H)=10H,

2、片外数据存储器传送指令MOVX(P31)

MOVX A,@Ri ;((Ri))→A

MOVX @Ri,A ;A→(Ri)

MOVX A,@DPTR ;((DPTR))→A

MOVX @DPTR,A ;A→(DPTR)

第1和第2条指令用于访问外部RAM的低地址区,地址范围:0000H-00FFH。第3和第4条指令用于访问外部RAM的64K字节区,地址范围:0000H-FFFFH。

9/19/202348 2、片外数据存储器传送指令MOVX(P31)8/6/20注:(1)四条指令都为寄存器间接寻址(2)四条指令都是通过累加器A进行数据传输的(P3211②④⑧)9/19/202349注:(1)四条指令都为寄存器间接寻址8/6/202349

设片外RAM空间(0203H)=6FH,分析执行下面指令后的结果。

MOV DPTR,#0203H

MOVX A,@DPTR

MOV 30H,A

MOV A,#0FH

MOVX @DPTR,A

执行结果为:(DPTR)=0203H, (30H)=6FH,(0203H)=(A)=0FH9/19/202350 例设片外RAM空间(0203H)=6FH,分析执行下

3、程序存储器传送指令MOVC(属于变址寻址)(P31) 该类指令又称为查表指令,经常用于查表。这类指令只有以下2条单字节指令。

MOVC A,@A+DPTR;((A)+(DPTR))→A

MOVC A,@A+PC ;((A)+(PC))→A

前者叫远程查表指令(64KB全空间),后者叫近程查表指令(PC处256B)。(P3211③)9/19/202351 3、程序存储器传送指令MOVC(属于变址寻址)(P31)

二、数据交换指令

数据交换指令要求第一个操作数必须为累加器A。 共5条指令,分为字节交换和半字节交换两个类型。

9/19/202352 二、数据交换指令8/6/202352

1、字节交换指令(P31底)

XCH A,Rn ;(A)←→(Rn)

XCH A,direct ;(A)←→(direct)

XCH A,@Ri ;(A)←→((Ri))

(P3211⑥)XCHR1,R2

2、低半字节交换指令(低四位交换)(P32)

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

3、A自身半字节交换指令(P36)

SWAP A ;(A0~3)←→(A4~7)

9/19/202353 1、字节交换指令(P31底)8/6/202353

例设(R0)=30H,(30H)=4AH,(A)=28H,则分别执行“XCHA,R0”、“XCHA,@R0”“XCHDA,@R0”、“SWAPA”后各单元的内容。

执行:XCH A,R0 ;后(A)=30H,(R0)=28H 执行:XCH A,@R0 ;后(A)=4AH,(30H)=28H

执行:XCHD A,@R0 ;后(A)=2AH,(30H)=48H 执行:SWAP A;后(A)=82H9/19/202354 例设(R0)=30H,(30H)=4AH,(A)=2

三、堆栈操作指令(P306,属于直接寻址) 堆栈操作有进栈和出栈两条指令,常用于保存和恢复现场。

PUSH direct ;先(SP)+1→SP, ;后(direct)→(SP)

POP direct ;先((SP))→direct, ;后(SP)-1→SP PUSH为进栈操作,POP为出栈操作。

设(30H)=x,将x保存起来MOVSP#70HPUSH30HPOP30H9/19/202355 三、堆栈操作指令(P306,属于直接寻址)设(30H)

注意:(1)进栈与出栈必须成对使用;(2)先进栈的必须后出栈,后进栈的必须先出栈,否则会出现DPL与DPH内容互换。PUSH DPHPUSH DPLPOP DPLPOP DPH9/19/202356 注意:(1)进栈与出栈必须成对使用;(2)先进栈的必须后习题(P3211.(1))1.MOVA,#1000H ;A←1000H2.MOVXA,1000H ;A←(1000H)片外RAM3.MOVCA,1000H ;A←(1000H)片外ROM4.MOVX60H,A ;片外RAM(60H)←A5.MOVR0,60H ;片内RAM:(61H)←(60H) MOV61H,@R06.XCHR1,R2 ;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR ;片内RAM←片外RAM下列指令是否错误9/19/202357习题(P3211.(1))1.MOVA,#1009/19/2023588/6/2023583.2.2算术运算指令

指令内容:包括加、减、乘、除、BCD码调整等指令,共有24条。

对标志位的影响:结果会影响进位标志CY、半进位标志AC、溢出标志OV、奇偶标志位P,但加1和减1指令不影响这些标志位。9/19/2023593.2.2算术运算指令 指令内容:包括加、减、乘、除、PSW寄存器Cy:进位标志位(位7有进位)AC:辅助进位标志位(位3有进位)F0:供用户使用的标志位OV:溢出标志位(位6有进位,位7没进位;或位7有进位,位6没进位)P:奇偶标志位A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。9/19/202360PSW寄存器Cy:进位标志位(位7有进位)8/6/20236

一、加法指令 分为不带进位加法、带进位加法和加1指令

1、不带进位加法指令ADD

ADD A,Rn ;(A)+(Rn)→A

ADD A,direct ;(A)+(direct)→A

ADD A,@Ri ;(A)+((Ri))→A

ADD A,#data ;(A)+data→A

这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号运算有意义。

9/19/202361 一、加法指令8/6/202361例(A)=53H,(R0)=FCH,执行ADDA,R09/19/202362例(A)=53H,(R0)=FCH,执行ADDA,R注意:

溢出标志OV只影响有符号数的加法运算,若OV=0,则A中结果正确;若OV=1,则A中结果不正确,只能看成无符号数。9/19/202363注意:8/6/202363

2、带进位加法指令ADDC

ADDC A,Rn ;(A)+(Rn)+CY→A

ADDC A,direct;(A)+(direct)+CY→A

ADDC A,@Ri ;(A)+((Ri))+CY→A

ADDC A,#data ;(A)+data+CY→A 这组指令影响标志位CY、AC、OV和P,溢出标志OV只对有符号运算有意义。注:Cy伪指令执行前的Cy值,不是指令执行过程中形成的Cy值。

9/19/202364 2、带进位加法指令ADDC8/6/202364

3、加1指令INC

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 这组指令除了第一条影响标志位P之外,其它指令不影响标志位。(A)=FFH,(Cy)=0,执行INCA后,Cy=?

9/19/202365 3、加1指令INC8/6/202365

二、减法指令 减法指令分为带借位减法指令和减1指令。

1、带借位减法指令SUBB(自带Cy减法指令)

SUBB A,Rn;(A)-(Rn)-CY→A

SUBB A,direct;(A)-(direct)-CY→A

SUBB A,@Ri ;(A)-((Ri))-CY→A

SUBB A,#data ;(A)-data-CY→A

9/19/202366 二、减法指令8/6/202366

2、减1指令DEC

DEC A ;(A)-1→A

DEC Rn ;(Rn)-1→Rn

DEC direct;(direct)-1→direct

DEC @Ri

;((Ri))-1→(Ri) 这组指令除了第一条影响标志位P之外,其它指令不影响标志位。9/19/202367 2、减1指令DEC8/6/202367

三、乘法指令MUL 在MCS-51单片机中,乘法指令只有一条。

MULAB

;(A)×(B)→B(高8位)、A(低8位)(1)A,B均为无符号整数

(2)对标志位的影响:若乘积大于0FFH,OV置1,否则OV清0;影响P标志位;对CY总是清0。

9/19/202368 三、乘法指令MUL8/6/202368

四、除法指令DIV

DIV AB ;(A)/(B),商→A、余→B

(1)A,B均为无符号整数

(2)对标志位的影响:如果除数(B)=0,则标志位OV置1,否则清0;影响P标志位;CY总是被清0。

9/19/202369 四、除法指令DIV8/6/2023693.2.3逻辑操作指令

逻辑操作指令包括与、或、异或、清0、求反、移位等操作指令,共有24条。

指令中的操作数:

A、Rn、direct、@Ri、#data 为了便于讨论,将其分为5组进行讨论。9/19/2023703.2.3逻辑操作指令 逻辑操作指令包括与、或、异或、

1、累加器A清0和求反指令 CLR A ;0→A CPL A ;(A)→A 前一条指令是对A清0,该指令影响奇偶标志位P。后一条指令是对A求反,不影响任何标志位。

9/19/202371 1、累加器A清0和求反指令8/6/202371

2、循环移位指令

A循环左移:

RLA;

A循环右移:RRA;

A带进位循环左移:RLCA;

A带进位循环右移:RRCA;

说明:(1)这4条指令,每执行一次只移动1位;(2)左移一次相当于乘以2,右移一次相当于除以2。

对标志位影响:仅后两条指令影响CY和Pa7←a0a7→a0a7→a0CYa7←a0CY9/19/202372 2、循环移位指令a7←a0a7→a0a7→a

3、逻辑与指令ANL

ANL A,Rn ;(A)∧(Rn)→A

ANL A,direct ;(A)∧(direct)→A

ANLA,@Ri ;(A)∧((Ri))→A

ANL A,#data ;(A)∧data→A

ANL direct,A ;(direct)∧(A)→direct

ANL direct,#data;(direct)∧data→direct 作用:用于使某些位清0。

9/19/202373 3、逻辑与指令ANL8/6/202373

4、逻辑或指令ORLORL 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)∨data→direct 作用:用于使某些位置1。

目标地址9/19/202374 4、逻辑或指令ORL目标地址8/6/202374

5、逻辑异或指令XRL

XRL A,Rn ;(A)

(Rn)→A

XRLA,direct ;(A)

(direct)→A

XRLA,@Ri ;(A)

((Ri))→A

XRLA,#data ;(A)

data→A

XRLdirect,A ;(direct)

(A)→direct

XRLdirect,#data;(direct)

data→direct 作用:用于使某些位取反,其余位不变。

用1异或使对应位取反,用0异或使对应位保留(不变);自身异或,实现清零。9/19/202375 5、逻辑异或指令XRL8/6/202375

例写出完成以下各功能的指令: 1)只对累加器A中的1、3、5位清0; 2)只对A中的2、4、6位置1; 3)只对A中的0、1、6、7位取反。4)使(A)=AAH的高四位不变,低四位取反。

对应指令如下: ANL A,#11010101B

ORL A,#01010100B XRL A,#11000011B

XRL

A,#00001111B9/19/202376 例写出完成以下各功能的指令:8/6/2023763.2.4控制转移类指令

MCS-51单片机有17条转移类指令,包括无条件转移指令、条件转移指令、子程序调用及返回指令等。 对标志位影响:只有比较转移指令影响进位标志CY,其它指令不影响标志位。

9/19/2023773.2.4控制转移类指令 MCS-51单片机有17条转

一、无条件转移指令

无条件转移指令:当程序执行该指令后,程序无条件地转移到指定的地址去执行。 包括短转移、长转移和间接转移3条指令

1、短转移指令SJMP(相对转移指令,2字节)

SJMP rel ;(PC)+rel→PC

rel=(Ad-As-Bn):相对转移偏移量,有符号数,﹣128~127,负数表示向回跳转,正数表示向前跳转。

指令实际写为:“SJMP目标地址标号”P479/19/202378 一、无条件转移指令8/6/202378SJMP$:停机指令。(HERE:SJMPHERE)P399/19/202379SJMP$:停机指令。8/6/202379

2、长转移指令LJMP(3字节指令)

LJMP addr16 ;addr16→PC 程序可以跳转到64KB程序存储器空间的任何地方。 指令的实际编写形式为:“LJMP目标地址标号”。

9/19/202380 2、长转移指令LJMP(3字节指令)8/6/202380

3、间接跳转指令JMP(单字节)

也叫散转指令、多分支转移指令。

JMP @A+DPTR ;(A)+(DPTR)→PC

DPTR为基址,A为相对偏移,在64KB范围内无条件转移。

说明:(1)DPTR一般为确定的值,累加器A为变值,根据A的值转移到不同的地方,因此该指令也叫散转指令。

(2)在使用中,往往与一个转移指令表一起实现多分支转移。

9/19/202381 3、间接跳转指令JMP(单字节)8/6/202381

例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)转移到相应的TAB0~TAB2分支去执行。9/19/202382 例3-13分析下面多分支转移程序段。8/6/2023

二、条件转移指令

当指令中条件满足时,程序转到指定位置执行,条件不满足时,程序顺序执行。

条件转移指令有三种:判断累加器A转移指令、比较转移指令、循环转移指令,共8条。9/19/202383 二、条件转移指令8/6/202383

1、判断累加器A转移指令(条件转移指令)

判断A为0转移:

JZ rel ;(A)=0,(PC)+rel→PC ;(A)≠0,顺序执行

判断A非0转移:

JNZ rel ;(A)≠0,(PC)+rel→PC ;(A)=0,顺序执行 指令的实际编写形式分别为:“JZ

目标地址标号”和“JNZ

目标地址标号”。

9/19/202384 1、判断累加器A转移指令(条件转移指令)8/6/2023

例试编写程序,把片外RAM地址从2000H开始的数据,传送到片内RAM地址从30H开始的单元,直到出现00H为止。

程序段如下: MOV DPTR,#2000H MOV R0,#30HLOOP: MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR

JNZ LOOP ;(A)≠0跳转 SJMP$ ;程序停留到此9/19/202385 例试编写程序,把片外RAM地址从2000H开始的数据

2、比较不相等转移指令CJNE

比较转移指令功能较强,共有4条指令,一般格式为:

CJNE 操作数1,操作数2,rel(目标标号)

指令功能:两个操作数做比较,若不等则转移,否则顺序执行。9/19/202386 2、比较不相等转移指令CJNE8/6/202386具体形式如下,第一条:

CJNE A,direct,rel第二条:

CJNE A,#data,rel

第三条:

CJNE Rn,#data,rel第四条:

CJNE @Ri,#data,rel9/19/202387具体形式如下,8/6/202387注:(1)编程时rel用目标地址标号表示,

CJNEA,#21,LOOP1(2)指令执行过程中的比较操作实际上为减法操作,不保留两数之差,但要形成Cy标志。9/19/202388注:8/6/202388

3、减1不为0(循环转移指令)DJNZ

循环转移指令共有两条指: DJNZ Rn,rel

;2字节指令。

DJNZ direct,rel

;3字节指令。 指令的实际编写形式为: DJNZ Rn,目标地址标号 DJNZ direct,目标地址标号9/19/202389 3、减1不为0(循环转移指令)DJNZ8/6/20238

例3-15

试编写程序,统计片内RAM中从40H单元开始的20个单元中00H的个数,结果存于R2中。

程序段一(用JNZ判断数据是否为0):

MOV R0,#40H ;R0指向40H MOV R7,#20 ;R7控制循环 MOV R2,#0 ;R2存放结果LOOP: MOV A,@R0 JNZ NEXT ;(A)≠0转 INC R2NEXT: INC R0 DJNZ R7,LOOP SJMP$9/19/202390 例3-15试编写程序,统计片内RAM中从40H单元开

程序段二(用CJNE判断数据是否为0): MOV R0,#40H ;R0指向40H MOV R7,#20 ;R7控制循环 MOV R2,#0 ;R2存放结果LOOP: CJNE @R0,#00H,NEXT INC R2NEXT: INC R0 DJNZ R7,LOOP9/19/202391 程序段二(用CJNE判断数据是否为0):8/6/202

三、子程序调用和返回指令 这类指令有3条,一条调用,两条返回。

1、子程序调用指令

ACALL addr16(2字节指令)

LCALL addr16(3字节指令)

9/19/202392 三、子程序调用和返回指令8/6/2023922、子程序返回指令(只能用在子程序末尾)

RET

;9/19/2023932、子程序返回指令(只能用在子程序末尾)8/6/202393

3、中断服务程序返回指令

RETI;

“RETI”只能用在中断服务程序末尾。

四、空操作指令

NOP ;延时一个机器周期 常用于延时9/19/202394 3、中断服务程序返回指令8/6/202394

还有两条指令:这两条指令是“AJMP”和“ACALL”,称为绝对转移(短转移)指令和绝对子程序调用(短调用)指令。

初识这两条指令:这两条指令的转移范围是绝对划定的2KB,用不好会出现错误,并且其编码也不好理解(见附录B),所以没有必要使用这两条指令。

9/19/202395 还有两条指令:这两条指令是“AJMP”和“ACALL”,3.2.5位操作指令 说明:在进行位操作时,位累加器C即为进位标志CY。

位地址区域: 1)片内RAM字节地址20H~2FH单元中连续的128个位(位地址为00H~7FH); 2)部分SFR中的位。9/19/2023963.2.5位操作指令 说明:在进行位操作时,位累加器C

位地址的表示方式:

1)直接位地址(00H~FFH),如18H。 2)字节地址带位号,如20H.0,表示20H单元的第0位。

3)特殊功能寄存器名带位号,如P2.3,表示P2口的第3位。 4)位符号地址。

例如,用上述4种方式都可以表示PSW(D0H)中的第2位,分别为:D2H、D0H.2、PSW.2、OV。9/19/202397 位地址的表示方式:8/6/202397

位操作指令共有17条,可以将其分成:位数据传送指令、位逻辑操作指令、位控制转移指令三组进行讨论。

9/19/202398 8/6/202398

一、位传送指令

MOV C,bit ;(bit)→C

MOV bit,C ;(C)→bit

例编写程序,把片内RAM中07H位的数值,传送到ACC.0位。 程序段如下: MOV C,07H MOV ACC.0,C

注意:位之间不能够直接传送,必须借助于C。

9/19/202399 一、位传送指令8/6/202399

二、位逻辑操作指令 位逻辑操作指令包括位清0、位置1、位取反、位与、位或,共10条指令。

1、位清0指令

CLR C ;0→C

CLR bit ;0→bit

2、位置1指令

SETB C ;1→C

SETB bit ;1→bit9/19/2023100 二、位逻辑操作指令8/6/2023100

3、位取反指令

CPL C ;(C)→C

CPL bit ;(bit)→bit

4、位与指令

ANL C,bit ;(C)∧(bit)→C

ANL C,bit ;(C)∧(bit)→C

5、位或指令

ORL C,bit ;(C)∨(bit)→C

ORL C,bit ;(C)∨(bit)→C注:在MCS-5指令系统中没有位异或指令,必须用位操作指令来实现。(P415)9/19/2023101 3、位取反指令8/6/2023101

三、位条件转移指令(P414) 位转移指令是判断C或bit为条件的转移指令,共5条指令。

1、以C为条件的转移指令(2字节指令)

JC rel ;若(C)=1,则(PC)+rel→PC; ;否则顺序向下执行

JNC rel ;若(C)=0,则(PC)+rel→PC; ;否则顺序向下执行

9/19/2023102 三、位条件转移指令(P414)8/6/2023102

2、以bit为条件的转移指令(3字节指令) JB bit,rel ;若(bit)=1,则(PC)+rel→PC;否则顺序向下执行 JNBbit,rel ;若(bit)=0,则(PC)+rel→PC;否则顺序向下执行 JBCbit,rel ;若(bit)=1,则(PC)+rel →PC,且0→bit; 否则顺序向下执行9/19/2023103 2、以bit为条件的转移指令(3字节指令)8/6/202

例编写程序,利用位操作指令,实现下图所示的硬件逻辑电路功能。+&+&P1.0P1.1P1.2P1.3P1.4P1.5DEFG 程序段如下:

MOV C,P1.1 ORL C,P1.2 CPL C ANL C,P1.0 CPL C9/19/2023104 例编写程序,利用位操作指令,实现下图所示的硬件逻辑电 MOV F0H,C ;(C)→F0H位 MOV C,P1.3 ;(P1.3)→C ANL C,P1.4 ;(C)∧P1.4→C CPL C ; ORL C,F0H ;(C)∨(0F0H)→C MOV P1.5,C ;(C)→P1.5+&+&P1.0P1.1P1.2P1.3P1.4P1.5DEFG9/19/2023105 MOV F0H,C ;(C)→F0H位P1.0P1.3.3汇编语言程序格式及伪指令9/19/20231063.3汇编语言程序格式及伪指令8/6/2023106

标号源程序注释

ORG0000H;整个程序起始地址LJMPMAIN;跳向主程序

ORG0030H;主程序起始地址MAIN:CLRC;MAIN为程序标号LOOP:MOVA,@R0ADDCA,@R1INCR0DJNZR1,LOOP;相对转移SJMPNEXTMOVR1,#03HNEXT:DECR0SJMP$;相当于LOOP1:SJMPLOOP1

END;结束标记9/19/2023107标号源程序

伪指令的功能:在汇编程序中,用于指示汇编程序如何对源程序进行汇编。

对伪指令的处理:不同于指令,在汇编时并不翻译成机器代码,只是在汇编过程进行相应的控制和说明。

伪指令的具体作用:通常在汇编程序中用于定义数据、分配存储空间、控制程序的输入/输出等。 在MCS-51系统中,常用的伪指令有以下7条。

9/19/2023108 伪指令的功能:在汇编程序中,用于指示汇编程序如何对源程序

一、ORG伪指令

ORG伪指令称为起始汇编伪指令,常用于汇编语言某程序段的开始或某个数据块的开始。一般格式为:

[标号:] ORG 16位地址 其

温馨提示

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

评论

0/150

提交评论