中职中专单片机原理电子教案3汇编Word格式.docx

上传人:b****6 文档编号:18941420 上传时间:2023-01-02 格式:DOCX 页数:43 大小:228.44KB
下载 相关 举报
中职中专单片机原理电子教案3汇编Word格式.docx_第1页
第1页 / 共43页
中职中专单片机原理电子教案3汇编Word格式.docx_第2页
第2页 / 共43页
中职中专单片机原理电子教案3汇编Word格式.docx_第3页
第3页 / 共43页
中职中专单片机原理电子教案3汇编Word格式.docx_第4页
第4页 / 共43页
中职中专单片机原理电子教案3汇编Word格式.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

中职中专单片机原理电子教案3汇编Word格式.docx

《中职中专单片机原理电子教案3汇编Word格式.docx》由会员分享,可在线阅读,更多相关《中职中专单片机原理电子教案3汇编Word格式.docx(43页珍藏版)》请在冰豆网上搜索。

中职中专单片机原理电子教案3汇编Word格式.docx

MOVA,3AH。

该指令将内部RAM中3AH单元的内容送给累加器A,若(3AH)=20H,执行示意图如图3.1。

执行结果A=20H。

图3.1“MOVA,3AH”示意图

3.寄存器寻址方式

寄存器寻址就是操作对象放在寄存器中,指令只提供存放操作对象的寄存器,执行时通过寻找寄存器得到操作对象。

书写时,用符号名称表示寄存器。

寄存器寻址方式的寻址范围包括:

四个工作寄存器组共32个通用寄存器、部分特殊功能寄存器。

MOVA,R0。

该指令把寄存器R0的内容送到累加器A中,若R0=20H,执行过程如图3.2。

指令执行后A=20H。

图3.2“MOVA,R0”指令示意图

4.寄存器间接寻址方式

寄存器间接寻址就是操作对象的存储器单元地址存放在寄存器中,执行时通过寻找指定的寄存器,取出其内容作为存储单元地址,从而得到操作的对象。

书写时,用“@”和寄存器符号表示。

寄存器间接寻址的寻址范围包括:

内部RAM低128字节、外部RAM64KB、堆栈操作指令。

设寄存器R1=60H,A=20H,执行指令ADDA,@R1。

若(60H)=10H,执行过程如图3.3。

执行结果A=30H。

图3.4“MOVA,@R1”指令示意图

5.相对寻址方式

相对寻址是指以指令中给出的操作数作为程序转移的偏移量。

书写时,以“rel”表示地址偏移量。

目标地址表示为:

目标地址=转移指令首地址+转移指令字节数+rel

JC3AH。

执行过程如图3.4。

图3.4“JC3AH”指令示意图

6.变址寻址方式(又称基址寄存器加变址寄存器间接寻址)

指令提供了以DPTR或PC为基址、以累加器A为变址的两种寄存器,通过将两种寄存器的内容相加形成的16位数据,作为操作对象存储单元的地址。

MCS-51系列单片机的变址寻址只能对程序存储器进行寻址,而且变址寻址指令只有三条:

MOVCA,@A+DPTR

MOVCA,@A+PC

JMP@A+DPTR

MOVCA,@A+DPTR。

若A=35H,DPTR=3F30H,那么操作对象存储单元的地址为3F65H,若(3F65H)=5CH,执行过程如图3.5。

则执行结果为A=5CH。

图3.5“MOVCA,@A+DPTR”指令示意图

7.位寻址方式

指令给出的操作数是内部数据存储器中的可寻址位。

书写时,有四种表示方法:

直接使用位地址、位名称表示法、单元地址加位表示法、专用寄存器名称加位表示法。

MCS-51单片机的位寻址范围包括:

内部RAM中的位寻址区、特殊功能寄存器的可寻址位。

ANLC,21H.5。

该指令将进位标志CY和内部RAM的21H单元的第5位进行逻辑与运算,结果保存到C中。

总结

本节主要讲解如何通过寻找操作数的有效地址,来获得真正的操作对象。

为汇编程序打基础。

板书设计

一、立即寻址方式

1、定义2、举例

二、直接寻址方式

三、寄存器寻址方式

四、寄存器间接寻址方式

五、相对寻址方式

六、变址寻址方式

七、位寻址方式

思考题

名词解释:

寻址方式、操作数、

P743.1(5)

课后反思

3.2指令系统

4学时

掌握MCS-51指令系统的数据传送指令、算术指令、逻辑运算指令、位操作指令和控制转移指令。

1.MCS-51指令系统的数据传送指令、算术指令、逻辑运算指令、位操作指令和控制转移指令。

复习MCS-51单片机的指令和寻址方式,不同的指令助记符和不同的寻址方式的组合构成了MCS-51的指令系统,本节着重介绍MCS-51指令系统。

熟记描述指令的符号

通过举例来熟记29条数据传送指令的书写及其功能

通过举例熟记算术指令的书写及其功能

通过举例熟练掌握24条逻辑运算指令

注意指令执行对位操作位的影响

掌握程序控制指令各指令的功能及应用

通过举例来掌握位操作指令

按指令的功能,MCS-51指令系统可分为五大类:

·

数据传送指令

·

算术运算指令

逻辑运算指令

程序控制指令

位操作指令

描述指令的一些符号的意义:

Rn(n=0~7):

表示当前工作寄存器组R0~R7中的某一个寄存器。

@Ri(i=0~7):

可以作间接寻址的寄存器,只能是R0和R1两个寄存器,“@”是间接寻址标识符。

direct:

内部RAM的8位地址,可以是内部RAM的单元地址(00H~7FH)或特殊功能寄存器地址。

#data:

8位立即数,其中“#”是立即数标识符。

#data16:

16位立即数。

addr11:

11位目的地址。

用于ACALL和AJMP指令中,转移范围为2KB。

addr16:

16位目的地址。

用于LCALL和LJMP指令中,转移范围为64KB。

rel:

相对转移指令中的8位偏移地址,范围是-128~+127。

DPTR:

数据指针,用作16位的地址寄存器。

bit:

内部RAM或特殊功能寄存器中的直接寻址位。

rrr:

在操作码中,表示R0~R7寄存器的编码。

A:

累加器,写作“A”时,是寄存器寻址;

写作“ACC”时,是直接寻址。

B:

特殊功能寄存器,用于MUL和DIV指令中。

/:

位操作数的前缀,表示对该位操作数取反。

(存储单元地址):

表示某存储单元的内容。

(间址寄存器):

由寄存器间接寻址的单元中的内容。

一、数据传送指令

功能是实现计算机内不同存储区域之间的信息传递。

MCS-51数据传送如下图3.6:

图3.6数据传送示意图

1.内部RAM、特殊功能寄存器之间的数据传送

·

立即数传送指令

MOVA,#data;

A←data

MOVdirect,#data;

(direct)←data

MOVRn,#data;

Rn←data

MOV@Ri,#data;

(Ri)←data

MOVDPTR,#data16;

DPH←data高8位,DPL←data低8位

例3.1分析下列指令的寻址方式以及指令执行后存储单元和寄存器的内容。

MOVA,#20H;

目的操作数采用寄存器寻址,A=20H

MOV32H,#23H;

目的操作数采用直接寻址,(32H)=23H

MOVR4,#2FH;

目的操作数采用寄存器寻址,R4=2FH

MOV@R0,#5AH;

目的操作数采用寄存器间接寻址,(R0)=5AH

MOVDPTR,#203FH;

目的操作数采用寄存器寻址,DPTR=203FH

·

内部RAM单元之间的数据传送指令

MOVdirect1,direct2;

(direct1)←(direct2)

MOVdirect,Rn;

(direct)←Rn

MOVRn,direct;

Rn←(direct)

MOVdirect,@Ri;

(direct)←(Ri)

MOV@Ri,direct;

(Ri)←(direct)

例3.2分析指令的寻址方式和执行结果

MOVP2,R2;

目的操作数采用直接寻址,源操作数为寄存器寻址;

P2=R2,该指令等价于MOV0A0H,R2

MOV2FH,30H;

两个操作数均采用直接寻址,(2FH)=(30H)

MOV20H,@R1;

目的操作数为直接寻址,源操作数为寄存器间接;

寻址,执行结果:

(20H)=(R1)

与累加器有关的数据传送指令

MOVA,Rn;

A←Rn

MOVRn,A;

Rn←A

MOVA,direct;

A←(direct)

MOVdirect,A;

(direct)←A

MOVA,@Ri;

A←(Ri)

MOV@Ri,A;

(Ri)←A

例3.3分析下列指令的寻址方式和执行结果

MOVA,R5;

两操作数均采用寄存器寻址,A=R5

MOVA,0F0H;

原操作数为直接寻址,A=(0F0H)

MOVA,@R1;

源操作数为寄存器间接寻址,A=(R1)

2.累加器与外部RAM之间的数据传送

MOVXA,@DPTR;

A←(DPTR)

MOVX@DPTR,A;

(DPTR)←A

MOVXA,@Ri;

A←(Ri)

MOVX@Ri,A;

例3.4已知DPTR=2000H,片外RAM(2000H)=05H,R1=0F0H,片外RAM(0F0H)=0A0H。

MOVXA,@DPTR;

指令执行后,A=05H

MOVX@R1,A;

指令执行后,片外RAM(0F0H)=05H

3.程序存储器中的数据传送到累加器A的指令

只能从程序存储器向累加器传送数据。

MOVCA,@A+DPTR;

A←(A+DPTR)

MOVCA,@A+PC;

A←(A+PC)

例3.5把累加器A中的十六进制数字00H~0FH转换成ASCII码。

INCA;

调整偏移量(数据表的首地址与MOVC指令间隔1个单元)

MOVCA,@A+PC;

查表取数

RET;

子程序返回

DB30H,31H,32H,33H,34H;

在程序存储器中顺序存放

DB35H,36H,37H,38H,39H;

0~F的ASCII码

DB41H,42H,43H,44H,45H,46H

假如上述指令代码在程序存储器的存储如下图3.7所示。

如果累加器A=0FH,则执行INCA后,A=10H,程序存储器取出MOVC指令后,PC=2001H,则

A+PC=2011H,于是执行MOVC指令后A=(2011H)=46H,即将累加器A中十六进制数字F转换成相应的ASCII码46H。

图3.7例3.5程序存储器数据分布图

4.内部RAM单元与累加器A之间数据交换指令

字节交换指令

XCHA,Rn;

A←→Rn

XCHA,direct;

A←→(direct)

XCHA,@Ri;

A←→(Ri)

半字节交换指令

XCHDA,@Ri;

A(D3~D0)←→(Ri)(D3~D0),即累加器A的低4位与Ri间址的内部RAM单元的低4位交换。

累加器A的高4位与低4位交换指令

SWAPA;

A(D3~D0)←→A(D7~D4)

例3.6设A=4FH,R1=20H,内部RAM中(20H)=35H,则

XCHA,@R1;

执行指令后,A=35H,(20H)=4FH

例3.7设R0=50H,A=3FH,内部RAM中(50H)=21H,则

XCHDA,@R0;

指令执行后,A=31H,(50H)=2FH

5.堆栈操作指令

进栈指令

PUSHdirect;

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

出栈指令

POPdirect;

(direct)←(SP),SP←SP–1

例3.8已知SP=3AH,DPTR=1234H,则

PUSHDPL;

SP←SP+1=3BH,(3BH)=34H

POPDPH;

SP←SP+1=3CH,(3CH)=12H

执行指令后,SP=3CH,(3CH)=12H,(3BH)=34H

例3.9设SP=4FH,内部RAM的(4FH)=45H,(4EH)=01H则

POPPSW;

PSW←(4FH)=45H,SP←SP-1=4EH

POPACC;

ACC←(4EH)=01H,SP←SP-1=4DH

执行结果为:

SP=4DH,ACC=01H,PSW=45H

例3.10堆栈操作指令常用于子程序中

子程序入口处,保护现场的指令:

PUSHACC

PUSHPSW

子程序返回时,恢复现场的指令:

POPPSW

POPACC

注:

1.内部RAM的前128字节、特殊功能寄存器之间可以互相传送数据,但最多只允许一个操作数使用寄存器间接寻址。

2.访问特殊功能寄存器必须采用直接寻址,不能采用寄存器间接寻址,否则会引起错误。

3.MCS-51指令系统没有提供B寄存器寻址方式(乘法指令例外)。

4.注意累加器A和ACC两种写法的区别:

A为寄存器寻址方式,ACC为直接寻址方式。

二、算术运算指令

1.加减运算指令

加减运算指令的目的操作数是累加器A,源操作数可以是立即数、通用寄存器、内部RAM或特殊功能寄存器和Ri间址的内部RAM。

加法指令ADD

功能:

将累加器和源操作数相加,结果送累加器A,源操作数不变。

形式:

ADDA,Rn;

A+Rn→A

ADDA,direct;

A+(direct)→A

ADDA,@Ri;

A+(Ri)→A

ADDA,#data;

A+data→A

ADD指令影响程序状态字PSW的CY、AC、OV位。

例如,A=0C0H,R1=0AEH,执行ADDA,R1指令。

11000000

+10101111

01101111

运算结果:

A=6FH,AC=0,CY=1,OV=1。

带进位加法指令ADDC

将累加器A、源操作数以及进位标志CY相加,结果送累加器A。

A+Rn+CY→A

A+(direct)+CY→A

A+(Ri)+CY→A

A+data+CY→A

ADDC指令影响程序状态字PSW的CY、AC、OV位。

带借位减法指令SUBB

功能:

将累加器和源操作数相减,结果送累加器A,源操作数不变。

形式:

SUBBA,Rn;

A-Rn-CY→A

SUBBA,direct;

A-(direct)-CY→A

SUBBA,@Ri;

A-(Ri)-CY→A

SUBBA,#data;

A-data-CY→A

SUBB指令影响程序状态字PSW的CY、AC、OV位。

加1指令INC

该指令只有一个操作数,执行时把操作数的内容加1,结果送回原单元。

INCA;

A+1→A

INCRn;

Rn+1→Rn

INCdirect;

(direct)+1→(direct)

INC@Ri;

(Ri)+1→(Ri)

INCDPTR;

DPTR+1→DPTR

加1指令主要用于修改地址指针和计数次数,它对CY、AC、OV没有影响。

减1指令DEC

该指令只有一个操作数,执行时把操作数的内容减1,结果送回原单元。

DECA;

A-1→A

DECRn;

Rn1→Rn

DECdirect;

(direct)-1→(direct)

DEC@Ri;

(Ri)-1→(Ri)

该指令不影响CY、AC、OV。

2.乘除法指令

乘法指令MUL

把累加器A和寄存器B中的无符号数相乘,所得16位乘积的低位字节存入A中,高位字节存入B中。

MULAB

A=1AH,B=20H,执行指令MULAB

执行结果为A=40H,B=03H,OV=1,CY=0

除法指令DIV

用A中8位无符号数除以B中8位无符号数,所得商存入A中,余数存入B中,并将CY和OV置0。

DIVAB

A=0F4H,B=0AH,执行指令DIVAB

执行结果为A=18H,B=04H,OV=0,CY=0

3.十进制调整指令

把A中的数作为两个BCD数相加之和进行调整,得到两位正确的BCD数。

DAA

73-54=19

先执行9AH-54H,得到补熟46H,再执行73H+46H=0B9H,最后执行调整指令将0B9H加上60H得到19H,即得到正确的BCD数。

三、逻辑运算指令

1.逻辑与运算指令

逻辑与运算指令常用作字节清零或位清零。

共有6条指令:

ANLA,Rn;

A∧Rn→A

ANLA,direct;

A∧(direct)→A

ANLA,@Ri;

A∧(Ri)→A

ANLA,#data;

A∧data→A

ANLdirect,A;

(direct)∧A→(direct)

ANLdirect,#data;

(direct)∧data→(direct)

若A=0A6H,R1=0A4H,执行ANLA,R1后,A=0A4H

2.逻辑或运算指令

逻辑或运算可以实现对某个单元的某些位置1,其余位不变。

ORLA,Rn;

A∨Rn→A

ORLA,direct;

A∨(direct)→A

ORLA,@Ri;

A∨(Ri)→A

ORLA,#data;

A∨data→A

ORLdirect,A;

(direct)∨A→(direct)

ORLdirect,#data;

(direct)∨data→(direct)

3.逻辑异或运算

逻辑异或运算可以用来比较两个数据是否相等。

当两个数据异或结果为0,则表示相等,否则表示不相等。

共有6条指令。

XRLA,Rn;

ARn→A

XRLA,direct;

A(direct)→A

XRLA,@Ri;

A(Ri)→A

XRLA,#data;

Adata→A

XRLdirect,A;

(direct)A→(direct)

XRLdirect,#data;

(direct)data→(direct)

若A=7FH,R1=0A5H,则执行指令XRLA,R1后,A=0DAH。

4.累加器清0和取反指令

累加器清0指令:

CLRA;

0→A

累加器按位取反指令:

CPLA;

→A

若A=55H,则执行指令:

CPLA;

执行结果A=0AAH

CLRA;

执行结果A=00H

5.循环移位指令

循环右移指令:

RRA

将累加器A的内容逐位循环右移一位。

如图所示:

例如,若A=6AH=01101010B,执行RRA指令后,A=35H。

循环左移指令:

RLA

将累加器A的内容逐位左移一位,如图所示:

例如,若A=0A3H=10100011B,执行RLA指令后,A=47B。

带进位循环右移指令:

RRCA

将累加器A的内容和进位位一起逐位循环右移一位,如图所示:

例如,若A=4BH=01001011B,CY=1,执行RRLA指令后,A=0A5H,CY=1。

此操作影响CY位。

带进位循环左移指令:

RLCA

将累加器A的内容和进位位一起逐位循环左移一位,如图所示:

四、程序控制指令

程序控制指令完成程序的转移、子程序的调用与返回、中断返回等功能。

指令运行的实质是改变程序计数器PC的值,使程序不按顺序执行,从而实现程序的分支、循环等功能。

1.无条件转移指令

相对转移指令:

SJMPrel

执行指令时,先将PC+2,再把指令中带符号的偏移量rel加到PC上,得到转移目标地址。

绝对转移指令:

AJMPaddr11

指令执行时,先将PC+2,然后将addr11送入PC10~PC0,而PC15~PC11保持不变。

这样就得到转移目标地址。

绝对转移范围是以AJMP指令的下一条指令高5位地址所确定的2KB范围内。

长转移指令:

LJMPaddr16;

addr16→PC

执行指令时,把16位地址addr16装入程序计数器PC,转移范围可达64KB。

间接转移指令:

JMP@A+DPTR;

A+DPTR→PC

执行指令时,数据指令DPTR和累加器A的内容相加装入程序计数器PC。

2.条件转移指令

累加器判零转移指令

JZrel;

若A=0,则PC+2+rel→PC,否则PC+2→PC

JNZrel;

若A≠0,则PC+2+rel→PC,否则PC+2→PC

比较转移指令

CJNEA,direct,rel

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

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1