第三章汇编语言及程序设计_第1页
第三章汇编语言及程序设计_第2页
第三章汇编语言及程序设计_第3页
第三章汇编语言及程序设计_第4页
第三章汇编语言及程序设计_第5页
已阅读5页,还剩149页未读 继续免费阅读

下载本文档

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

文档简介

第3章MCS-51单片机的指令系统

♦:♦教学提示:指令是CPU用于控制功能部件完成某一指定动

作的指示和命令。一台计算机全部指令的集合称为指令系

统。指令系统体现了计算机的性能,也是计算机重要的组

成部分,应用计算机进行程序设计的基础。

♦:♦教学要求:了解单片机指令系统的特点和功能、操作的对

象和结果、汇编语言程序结构的设计。重点掌握指令的基本

形态、格式、寻址方式及汇编语言编程的基本方法,熟悉常

用的子程序,能够正确运用汇编指令编制单片机应用系统的

用户程序和监控程序。

❖3.1指令格式及其符号说明

❖3.2寻址方式

*3.3MCS-51的指令集

❖3.4汇编语言程序的基本形式

❖3.5汇编语言程序的基本结构

3.6本章小节

3.1指令格式及其符号说明

。MCS-51单片机汇编语言与指令格式

指令由操作码助记符和操作数两部组成。

指令格式如下:

[标号:]操作码助记符[目的操作数]L源操作数注释]

(1)符号“[]”其包含的内容因指令的不同可有可无。

(2)标号:根据编程需要给指令设定的符号地址,可有可

无;通常在子程序入口或转移指令的目标地址

处才赋予标号。标号由1〜8个字符组成,第一

个字符必须是英文字母,不能是数字或其他符

号,标号后必须用冒号。

(3)操作码助记符:指令的核心部分,用于指示机器执行何种

操作,如加、减、乘、除、传送等。

⑷操作数:是指令操作的对象,可以是一个具体的数据,也

可以是参加运算的数据所在的地址。操作数一般有以下几种

形式:

没有操作数,操作数隐含在操作码中,如RET指令;

只有一个操作数,如INCA指令;

有两个操作数,如MOVA,30H指令;

有3个操作数,如CJNEA,#00H,10H指令。

(5)注释:对指令的解释说明,用以提高程序的可读性,注释

前必须加办号,注释换行时行前也要加分号。

3.1指令格式及其符号说明

指令的字节

1.单字节指令(49条)

♦:♦无操作数单字节指令

这类指令只有操作码字段,操作数隐含在操作码中。

例如:INCDPTR

指令码为:

十六进

位D7D6D5D4D3D2D1DO

制码

操作

10101XA3H

码00

含有操作数寄存器号的单字节指令

指令码由操作码字段和指示操作数所在寄存器号的字段组成。

例如:MOVA,Rn

指令码为

十六进

位D7D6D5D4D3D2D1DO

制码

操作码+E8H~

11101rrr

操作数EFH

其中,rrr为寄存器Rn的编号。

2.双字节指令(46条)

双字节指令的操作码字节在前,其后的操作数字节可

以是立即数,也可以是操作数所在的片内RAM地址。

例如:MOVA,#23H

指令码为

十六进制

位D7D6D5D4D3D2D1DO

操作码01110100

操作数(立即74H23H

00100011

数)

3.三字节指令(16条)

这类指令的指令码的第1字节为操作码;第2和第3字节为

操作数或操作数地址,有如下4类:

(1)16位数据

例如:MOVDPTR,#26ABH

指令码为

位D7D6D5D4D3D2D1DO十六进制码

操作码10010000

90H26H

操作数(立即数高)00100110

ABH

操作数(立即数低)10101011

(2)8位地址和8位数据

例如:MOV74H,#0FFH

指令码为

十六进制

位D7D6D5D4D3D2D1DO

操作码01110101

操作数(地

0111010075H74H

址)

FFH

操作数(立

11111111

即数)

(3)8位数据和8位地址

例如:CJNEA,#00,60H

指令码为

十六进制

位D7D6D5D4D3D2D1D0

操作码10110100

B4H00H

操作数(立即数)00000000

60H

操作数(地址)01100000

(4)16位地址

例如:LCALL2020H

指令码为

十六进制

位D7D6D5D4D3D2D1DO

操作码00010010

12H20H

操作数(地址高)00100000

20H

操作数(地址低)00100000

程序设计中,应尽可能选用字节少的指令。这

样,指令所占存储单元少,执行速度也快。

.:♦MCS-51单片机的助记符语言

为了便于人们识别、读/写、记忆和交流用英文单词或缩

写字母来表征指令功能,这些指令的助记符形式称为汇编语

言指令,常用于汇编语言源程序的程序设计。

MCS-51单片机制造厂家对每一条指令都给出了助记符。

不同的指令,具有不同的功能和不同的操作对象。

如附录一MCS-51助记符意义

助记符意义助记符意义

MOV送数MUL乘法

MOVCROM送累加器(A)DIV除法

MOVX外部送数DA十进制调整

PUSH压入堆栈AJMP绝对转移

POP堆栈弹出LJMP长转移

XCH数据交换SJMP短转移

XCHD交换低4位JMP相对转移,

ANL与运算JZ判累加器A为0转移

ORL或运算JNZ判累加器A非0转移'

XRL异或运算JC判CY为0转移

SETB置位JNC判CY非0转移

CLR清。JB直接位为1转移

CPL取反JNB直接位为。转移

RL循环左移JBC直接位为1转移,并清该位)

RLC带进位循环左移CJNE比较不相等转移

RR循环右移DJNZ减1不为。转移

RRC带进位循环右移ACALL绝对调用子程序

SWAP高低半字节交换LCALL长调用子程序

ADD加法RET子程序返回

ADDC带进位加法RETI中断子程序返回

SUBB带进位减法NOP空操作

-fin1nrr泪

常用符号说明

/rfvD

付节含义

Rn表于当前选定寄存器组的工作寄存器RO〜R7,0〜7

Ri表不作为间接寻址的地址指针RO〜Rl,z-0,1

#data表示8位立即数,即00H〜FFH

#datal6表示16位立即数,即0000H〜FFFFH

Addrl616位地址,可表示用于64KB范围内寻址,用于LCALL和LJMP指令中

Addrll11位地址,可表示2KB范围内寻址,用于ACALL和AJMP指令中

direct8位直接地址,可以是片内RAM区的某单兀或某一专用功能寄存器的地址

rel带符号的8位地址偏移量(128〜+127),用于SJMP和条件转移指令中

bit位寻址区的直接寻址位,表示片内RAM中可寻址位和SFR中的可寻址位

(X)X地址单元中的内容,或X作为间接寻址寄存器时所指单元的内容

((X))由X寻址的单元的内容

<—将箭头后面的内容传送到箭头前面去

$当前指令所在地址

DPTR数据指针

/加在位地址之刖,表示该位状态取反

@间接寻址寄存器或基址寄存器的前缀

3.2寻址方式

i.立即寻址

指令中跟在操作码后面的字节就是直接参加运算的操

作数,称为立即数,用符号表示,以区别直接地址。

立即数通常使用8位二进制数#data,但指令系统中有一条立

即数为#datal6的指令。

【例】执行指令:

MOVA,#30H;(A)-30H

MOVDPTR,#1638H;(DPH)-16H,(DPL)-38H

结果:(A)=30H

(DPTR)=1638H

图3.1立即寻址示意图

2.直接寻址

指令中含有操作数的地址,该地址指出了参与运算或

传送的数据所在的字节单元或位。直接寻址方式可访问的存

储空间包括特殊功能寄存器和片内RAM的低128B。

(1)特殊功能寄存器:只能用直接寻址方式访问,并且

特殊功能寄存器常以符号的形式表示。

(2)片内RAM的低128B:52及以上子系列单片机的高

128B不能用直接寻址方式访问,只能用后面提到的寄存器间

接寻址方式,因为高128B的编码与特殊功能寄存器的地址重

叠。

【例】已知:(30H)二OAAH,执行指令:

MOVA,30H;(A)-(30H)

MOVPS肌#20H;(PSW)-20H

结果:(A)=OAAH(PSW)二20H

第1条指令的功能是将片内RAM的30H单元内容“OAAH”

传送到累加器(A)o第2条指令的功能是将立即数20H传送给

特殊功能寄存器PSW。操作数采用直接寻址方式。第1条指令

寻址如图3.2所示。

SFRROM

图3.2指令MOVA,30H执行于意图

3.寄存器寻址

由指令指出某一个寄存器的内容作为操作数。可以采

用寄存器寻址的寄存器有:

(1)工作寄存器R0〜R7;组别的选择由程序状态字(PSW)

中的RSO、RS1决定;

(2)累加器(A);

(3)寄存器(B);

(4)数据指针(DPTR)。

【例】已知:(RO)二OAAH,执行指令:

MOVA,RO;(A)—(RO)

指令码为:E8H

结果:(A)二OAAH

该指令的功能是将R0中的内容30H传送到累加器(A)。

操作数采用寄存器寻址方式。寻址如图3.3所示。

图3.3指令MOVA,R0的执行示意图

4.寄存器间接寻址

指令中寄存器中存放的不是操作数而是操作数的地址,

操作数是通过寄存器间接得到的。而寄存器寻址中寄存器存

放的就是操作数。在间接寻址的寄存器前加前缀标志“贮।

相区别。

寄存器间接寻址时访问片内RAM和片外RAM有一些区别:(

⑴片内RAM:I

共有128B,采用形式为@R0、@R1或SP,访问时用MOV操

作符。

(2)片外RAM:

最大容量64KB,寻址时由P2口提供高8位地址,RO、R1

提供低8位地址共同寻址64KB范围;也可用16位的DPTR作寄

存器间接寻址64KB存储空间,访问时用MOVX操作符。

【例】已知:(RO)-OAAH,(OAAH)二5BH,执行指令:

MOVA,©RO;A-((RO))

结果:(A)-5BH

该例中用寄存器间接寻址将片内RAM中由RO的内容为地

址所指示的单元的内容传送到累加器(A)。该指令的操作数

采用寄存器间接寻址方式,如图3.4所示。

SFRROM

图3.4指令MOVA,@R0的执行示意图

采用“MOVX”类操作的片外RAM的数据传送指令如:

MOVXA,@R0

MOVXA,@DPTR

5.变址寻址

操作数地址=基址寄存器的内容+变址寄存器的内容。

>基址寄存器:程序计数器(PC)或数据指针(DPTR);

>变址寄存器:Ao

形成的地址是16位地址,这种寻址方式只能用来访问

ROM的查表操作,所以变址寻址操作只有读操作而无写

操作。变址寻址指令操作符有M0VC查表指令。

【例】已知:(A)=08H,(DPH)=20H,(DPL)二OOH,即

(DPTR)二2000H,(2008H)=88H,执行指令:

MOVCA,©A+DPTR

首先将DPTR的内容2000H与累加器(A)的内容08H相加,

得到地址2008H。然后将该地址的内容88H取出传送到累加器

(A),这时,累加器(A)的内容为88H,原来累加器(A)的内容

08H被冲掉。如图3.5所示。

SFRROM

另外两条变址寻址指令为:

MOVCA,@A+PC;JMP@A+DPTR

【例】已知:(A)二30H,(1031H)=20H

执行地址1000H处的指令:

1000H:MOVCA,©A+PC

这条指令占用一个单元,下一条指令的地址为1001H,

即执行完本指令后(PC)二1001H,(PC)二1001H再加上累加

器(A)中的30H,指令执行结果将ROM1031H的内容20H传

送给累加粳A),不改变程序计数器(PC)的内容。示意图

如囱3.6折不。

SFRROM

MOVCA,@A+PC

图3.6指令MOVCA,@A+PC的执行示意图

【例】已知:(A)=08H,(DPTR)=2000H

执行指令JMP@A+DPTR后,(PC)二2008H,程序从ROM

的2008H地址开始执行。示意图如图3.7所示。

SFRROM

08H<—ACC(EOH)

20H<—DPH(83H)73HpJMP@A+DPTR

OOH<—DPL(82H)

指令执行后PC=2008HOOH1NOP

PC=(A)+(DP1R)=2OO8H

程序转到此处开始执行

OFFFFHf

图3.7指令JMP@A+DPTR的执行示意图

6.位寻址

指令中对数据位直接进行操作。位寻址与直接寻

址不同,位寻址只给出位地址,而不是字节地址。可位

寻址区为:

(1)片内RAM中的位寻址区20H〜2FH,共16个单元,

128个位,位地址是00H〜7FH。

(2)特殊功能寄存器(SFR)的可寻址位。习惯上可寻

址位常用符号位地址表示,如TI、RR

【例】执行指令:

CLRACC.0

MOV30H,C

第1条指令的功能都是将累加器(ACC)的位。清“0”。第

2条指令的功能是把位累加器(注:在指令中用表示)的

内容传送到片内RAM位地址为30H的单元。

7.相对寻址

转移的目的地址可用如下公式表示:

B的地址二转移指令下条指令地址+rel

此种寻址方式主要用于实现程序的分支转移。

其中,rel是一个带符号的8位二进制数,取值范围

是-128〜+127,以补码形式置于操作码之后。执行

跳转指令时,先取出该指令,PC指向下一条指令地

址。再把rel的值加到PC上以形成转移的目标地

址。

【例】已知:(PC)=2000H执行指令:

ORG2000H

2000HSJMP08H

2002HNOP

••••••

200AHNOP

结果:程序转移到200A处开始继续执行。因为“SJMP

08H”指令码本身占2B,CPU执行完该指令之后PC值已等于

下一条指令的地址即2002H,此时的PC值加上偏移量08H后

赋给PC,(PC)二200AH,程序转到200AH处开始执行。操作

示意图如图3.8所示。

ROM

图3.8指令SJMPO8H的执行示意图

3.3MCS-51单片机指令系统

以MCS-51为内核的单片机指令系统为例,用44种操

作码助记符来描述33种操作功能,构成了111条基本指令。

r单字节指令49条;

r按字节分1双字节指令45条;

〔三字节指令17条;

r单周期指令64条;

J按指令执行时间分双周期指令45条;

ni条基本指令:14个机器周期指令2条;

f数据传送类指令;

算术运算类指令;

〔按功能分逻辑运算及移位类指令;

控制转移类指令;

布尔变量操作类指令。

3.3.1数据传送类指令

。CPU在进行算术运算和逻辑运算时总需要有操作数

据,所以数据传送是一种最基本最主要的操作。在

MCS-51系列单片机中的数据传送指令相当丰富。数

据传送指令按数据传送的区域可分为3组:

>一组:内部数据传送;

>二组:与片外RAM或I/O接口之间的数据传送;

»三组:ROM到累加器(A)的传送。

3.3.1数据传送类指令

1.片内数据传送

这组指令是实现片内RAM之间数据交换的。这组指令共有7

种方式。

1)以累加器(A)为目的操作数的指令

操作符指令编码指令功能

'Rn11101rrrB(A)<-(Rn)

direct11100101B(A)<-(direct)

MOVA,<

Ri1110011iB(A)<-((Ri))(

.#data

11100100B(A)<-data

这组指令的功能是把源操作数的内容送入累加器(A)。

源操作数有寄存器寻址、直接寻址、寄存器间接寻址和

立即寻址方式。

【例】执行指令:

MOVA,R6;(A)-(R6),寄存器寻址

MOVA,70H;(A)-(70H),直接寻址

MOVA,©RO;(A)-((RO)),寄存器间接寻址(

MOVA,#78H;(A)<-78H,立即寻址

2)以Rn为目的操作数的指令

操作符指令编码指令功能

[AlllllrrrB(Rn)—(A)

I

MOVRn,^directlOlOlrrrB(Rn)<—(direct

ci1〕1

IOllllrrrB(Rn)<-data

这组指令的功能是把源操作数的内容送入当前工作寄存

器区的R0〜R7中的某一个寄存器。源操作数有寄存器寻址、

直接寻址和立即寻址等方式。

以Rn为目的操作数的指令如:

MOVR2,A;(R2)—(A),寄存器寻址

MOVR7,70H;(R7)—(70H),直接寻址

MOVR3,#0AH;(R3K0A0H,立即寻址

3)以寄存器间接地址为目的操作数的指令

操作数指令编码指令功能

A

llllOlliB((Ri))—(A)

MOV@Ri,《direct

lOlOOlliB((Ri))<—(direct

#data

OlllOlliB((Ri))<—data

这组指令的功能是把源操作数内容送入RO或R1指出

的存储单元中。源操作数有寄存器寻址、直接寻址和立即

寻址等方式。

【例】执行指令:

MOV@R1,A;((R1))—(A),寄存器寻址

MOV@R0,70H;((RO))—(70H),直接寻址

MOV@R1,#80H;((R1))<-80H,立即寻址

4)以直接地址为目的的操作数的指令

操作符指令编码指令功能

fA11110101B(direct)(A)

RnlOlOlrrr-B(diret)<r-(Rn)

MOVdirect,〈direct1OOOO1O1B(direct)(direct)

@RilOOOOlliB

(direct)<—(Ri)

#dataO111O1O1B

(diret)<—(data)

这组指令的功能是把源操作数送入由直接地址指出的

存储单元。

源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即

寻址等方式。

【例】执行指令:

MOVP1,A;(P1)—(A),直接寻址

MOV70H,R2;(70H)-(R2),寄存器寻址

MOVOEOH,78H;(OEOH)—(78H),直接寻址

MOV40H,@R0;(40H)一((R0)),寄存器间接寻址

MOV01H,#80H;(01H)-80H,立即寻址

Rn寄存器<----#data立即数

图3.5内部RAM间数据传递关系图

5)16位数据传送指令

操作数指令功能

MOVDPTR,#data16(DPTR)<-data16

这条指令的功能是把16位常数送入DPTR。16位的

DPTR由DPH和DPL组成,指令执行结果把高位立即数送入

DPH,低位立即数送入DPL。

【例】执行指令:

MOVDPTR,#1342H;

(DPH)-13H,(DPL)-42H,立即寻址

6)堆栈操作指令

堆栈操作是通过SP(堆栈指针寄存器)实现的,分为入

栈操作和出栈操作:

>入栈操作:把直接寻址单元的内容传送到SP所指的单元中;

>出栈操作:把SP所指单元的内容送到直接寻址单元中。

开辟栈区通过向SP中送一个数。MCS-51单片机开机或

复位后(SP)二07H,一般需重新设定SP的初始值。SP的初始

值就是栈顶的位置。

堆栈指令有两条,进栈指令和出栈指令:

操作符指令编码指令功能

PUSHdirect11000000B;入栈

POPdirect11010000B

□入栈指令PUSH:首先将栈顶指针(SP)加“1”,然后把直

接地址中的内容传送到SP寻址的片内RAM单元中。

□出栈指令POP:将SP寻址的片内RAM单元中的内容送入直接

地址指出字节单元中,SP减“1”。

【例】已知:(A)二30H,(B)二70H执行指令:

MOVSP,#60H;(SP)二60H设堆栈指针

PUSHACC;(SP)-(SP)+1,(SP)二61H,((SP))-(A)

PUSHB;(SP)-(SP)+1,(SP)二62H,((SP))-(B)

♦结果:(61H)=30H,(62H)=70H,(SP)=62H.

POPB;(B)-((SP)),(SP)=(SP)-1,(SP)二61H

POPACC;(ACC)一((SP)),(SP)=(SP)-1,(SP)二60H

♦结果:(B)二70H,(ACC)二30H,(SP)二60H

由于MCS-51单片机堆栈操作指令中的操作数只能使用直

接寻址方式,不能使用寄存器寻址方式,所以将累加器(A)

压入堆栈时,累加器(ACC)不能简写A。堆栈操作时指令PUSH

和POP要成对出现,且先后顺序要相反排列,先进后出,后

进先出。

7)交换指令

操作符指令编码指令功能

fRnllOOlrrrB(Rn)3(A)

I

XCHA,〈direct11OOO1O1B(direct)<->(A)

@Ri

llOOOlliB((Ri))3((A))

这组指令的功能是将累加器(A)的内容和源操作数的

内容相互交换。源操作数有寄存器寻址、直接地址寻址、

寄存器间接寻址。

【例】已矢口:(ACC)=80H,(R7)=08H,(40H)=0F0H,

(R0)=30H,(30H)=0FH,执行指令:

XCHA,R7;(A)<-->(R7),寄存器寻址

XCHA,40H;(A)<-->(40H),直接地址寻址

XCHA,@R0;(A)<-->((R0)),寄存器间接寻址

♦结果:(ACC)=OFH,(R7)=80H,

(40H)=08H,(R0)=30H,(30H)=0FH

•操作符指令编码指令功能

XCHDA,@RillOlOlliB(A300、,C口『)

这条指令是低半字节交换指令,将累加器(A)的内容和

避操数内容的低半字节相互交换。它们各自的高半字节都不

受影响。

【例】已矢口:(ACC)=0FH,(R0)=30H,(30H)=0F0H

执行指令:

XCHDA,@R0;(ACC3-0)《-->((Ri)3~0)

♦结果:(ACC)=00H,(R0)=30H,(30H)=0FFH

操作符指令编码指令功能

SWAPA11000010B(A3〜0)一(A7〜4)

这条指令将累加器(A)的高半字节(A7〜4)和低半字节

(A3〜0)互换。

【例】已知:(A)=0C5H执行指令:

SWAPA

结果:(A)=5CH

2.累加器(A)与片外RAM或I/O接口的数据传送指令

操作符指令编码指令功能

[A,@DPTR111OOOOOB(A)一((DPTR))

((Ri))

A,@Ri1llOOOOiB

M0VX\

((DPTR))(A)

|@DPTR,A11110000B

((Ri))(A)

@Ri,A1lllOOliB

>片外RAM和I/O端口只能和累加器(A)进行一个8位数据传送。

>由DPTR间接寻址时,DPTR的DPH和DPL分别从P2端口和P0端口输

出组成16位地址,并由ALE信号将P0端口信号(低八位地址)锁

存在地址锁存器中。

由RO、R1进行间接寻址时,高8位地址在P2口中,由P2口输

出;低8位地址在R0或R1中,由P0口输出,组成16位地址,

并由ALE信号锁存在地址锁存器中。

向累加器(A)传送数据时MCS-51单片机P3.7产生信号RD选

通片外RAM或I/O口;

累加壑A)向片外RAM或1/端口传送数据时MCS-51单片机P3.7

产生西信号选通片外RAM或I/O口。

【例】已知:(DPTR)=3000H,(3000H)=30H,执行命令:

MOVXA,@DPTR;(A)一((DPTR)),寄存器间接寻址

♦结果:(A)=30H

【例】已知(P2)=20H,(R1)=48H,(A)=66H,执行命令:

MOVX@R1,A;(R1))—(A),寄存器寻址

♦结果:(2048H)=66H

3,只读存储器(ROM)到累加器(A)的传送

操作符指令编码指令功能

(PC)—(PC)+1

@A+PC10000011B

MOVCA,《(A)—((A)+(PC))

@A+DPTR10010011B(A)<-((A)+(DPTR))

a这两条指令主要用于ROM的查表,只能读,不能写。

>以程序计数器(PC)内容为基址时:(PC)-(PC)+L以加“1”

后的当前值和累加器(A)的变址相加形成ROM源操作数地址,

然后将其地址内容送累加器(A)o

>以DPTR内容为基址时:DPTR的内容和累加器(A)的内容作16

位无符号数相加形成ROM源操作数地址,然后将其地址内容

送累加器(A)。

【例】已知:(PC)=1000H,(A)=3OH,(1031H)二12H,执行指令:

MOVCA,©A+PC

♦结果:(A)=12H(PC)=1OO1H

【例】已知:(DPTR)二8100H,(A)=40H(8140H)=0ABH执行指

令:

MOVCA,©A+DPTR

♦结果:(A)=OABH(DPTR)=8100H

♦:♦使用这两条查表指令时要注意,指令执行完后不改变程序计

数器(PC)和DPTR的内容,但是改变累加器(A)的内容。

以程序计数器(PC)内容为基址,地址改变量仅有8位,查表

的寻址空间只在该条查表指令的以下256B之内,表格只能被

一段程序使用。

以DPTR内容为基址,地址改变量有16位,查表可以在64KB程

序存储空间寻址,并且表格可以被各个程序块公用。

3.3.2笆3术运算类指令

。算术运算指令多数以累加器(A)为目的操作数。算

术运算指令大多数影响程序状态字(PSW)。主要分

为以下几类:

加法指令、减法指令、乘法指令、除法指令、

加“1”指令、减“1”指令、十进制调整指令。

1.不带进位的加法指令

操作符指令编码指令功能

f#data00100100B(A)<-(A)+data

(A)<-(A)+(direct)

direct00100101B

ADDA,〈

(A)<-(A)+((Ri))

|eRiOOlOOlliB

(A)<-(A)+(Rn)

RnOOlOlrrrB

这组指令采用立即数、直接地址、间接地址以及寄存器寻址方

式将其内容与累加器(A)内容相加,结果送入累加器(A)中。

>若结果的最高位D7有进位输出,则将进位标志位(CY)置

“1”,否则将CY清“0”;

>若D3有进位输出,将辅助进位标志位(AC)置“1”,否则将

AC清“0”;

>若D6有进位输出而D7没有或者D7有进位输出D6没有,将溢

出标志位OV置“1”,否则将(0V)清“0”;

奇偶标志位(P)随累加器(A)中1的个数的奇偶性变化。

【例】已知:(A)=53H,(RO)=OFCH,执行指令:

ADDA,RO

♦结果:(A)=4FHCY=1AC=0OV=0P=1

【例】已知:(A)=85H,(R0)=20H,(20H)=0AFH,执行指

令:

ADDA,@R0

♦结果:(A)=34HCY=1AC=1OV=1P=1

*2.带进位的加法指令

操作符指令编码指令功能

fRnOOlllrrrB(A)<-(A)+(Rn)+(c)

(A)<-(A)+(direct)+(C)

directOO11O1O1B

ADDCA,\

|@RiOOllOlliB(A)<-(A)+((Ri))+(C)

#dataOO11O1OOB(A)<-(A)+data+(C)

这组指令对程序状态字(PSW)的影响和指令的寻址方式都与

ADD指令相同。

这组带进位加法指令是同时把所指出的字节变量、进

位标志与累加器(A)内容相加,结果留在累加器(A)中。

【例】已知:(A)=85H(20H)二OFFHCY-1,执行指令:

ADDCA,20H

♦结果:(A)二85HCY=1AC=10V二0P二1

。3.带借位的减法指令

操作符指令编码指令功能

lOOllrrrB

fRn(A)<-(A)-(Rn)-(C)

1OO1O1O1B

direct(A)<-(A)-(direct)-(C)

SUBBA,{

|@RilOOlOlliB(A)<-(A)-((Ri))-(C)

#data10010100B(A)<-(A)-data-(C)

>带借位减法指令从累加器(A)中减去指定的变量和进位标志,

结果存在累加器(A)中。

>源操作数采用了寄存器寻址、直接寻址、寄存器间接寻址和

立即寻址的寻址方式。

>如果累加器(A)中的最高位D7需借位则将进位标志位(CY)置

“1”,否则将CY清“0”;

>如果D3需借位将辅助进位标志位(AC)置“1",否则将AC清

“0”;

>如果D7需借位而D6不需借位或D6需借位而D7不需借位将溢出

标志位(OV)置“1”,否则清“0”;

>奇偶标志位(P)随着累加器(A)中“1”的个数而变化。

£4,加“1”指令

操作符指令编码指令功能

fA00000100B(A)<-(A)+1

I

।Rn00001rrrB(Rn)<-(Rn)+1

工NC〈diirec:七00000101B(direct)<-(direct)+1

।@Ri00000111B((Ri))—((Ri))+1

IDPTR10100011B(DPTR)<-(DPTR)+1

>这条指令把所指的寄存器内容加"I",结果仍送回原寄存器。

>源操作数采用了直接寻址、寄存器寻址、寄存器间接寻址的

寻址方式。

>当所寻址的寄存器不是累加器(A)或程序状态字(PSW)时,不

影响任何标志,否则将对标志位影响。

>若直接地址是I/O口,则CPU进行“读一修改一写”操作,

不是从引脚读入。其功能是先读入端口锁存器的内容,然后

在CPU中力口“1”,继而输出到端口。

【例】已知:(A)=OFFH,(R3)=0FH,(30H)=0F1H,(R0)=40H,

(40H)=01H,(DPTR)=1235H执行如下指令:

INCA

INCR3

INC30H

INC@R0

INCDPTR

♦结果:(A)=OOH(R3)=10H(30H)=0F2H

(40H)=02H(DPTR)=1236HPSW中仅P改变

3.3.2算术运算类指令

❖5,减“1”指令

操作符指令编码指令功能

fA00010100B(A)~(A)-1

@RiOOOlOlliB((Ri))—((Ri))-1

DEC〈

|direct00010101B(direct)<-(direct)-1

RnOOOllrrrB(Rn)-(Rn)-1

这条指令把所指的寄存器内容减“1”,结果仍送回原寄存器。

>源操作数采用了直接寻址、寄存器寻址、寄存器间接寻址的

寻址方式。

>当所寻址的寄存器不是累加器(A)或程序状态字(PSW)时,不

影响任何标志位,否则将影响标志位。

>若直接地址是I/O端口,贝IJCPU进行“读一修改一写”操作,

不是从引脚读入。其功能是先读入接口锁存器的内容,然后

在CPU中减“1”,继而输出到端口。

【例】已知:(A)=OFH(R7)=19H,(30H)=00H,(R1)=40H,

(40H)=0FFHo执行指令:

DECA

DECR7

DEC30H

DEC@R1

♦结果:(A)=OEH(R7)=18H(30H)=0FFH

(40H)=0FEHP=1PSW其他位不变

6.乘法指令

操作符指令编码指令功能

MULAB10100100B(B)(A)一(A)x(B)

>这条指令把累加器(A)和寄存器(B)中的无符号8位整数相乘,

其16位积的低8位存放在累加器(A)中,高8位存在寄存器(B)

中。

>如果积大于OFFH,则将溢出标志位(0V)置“1",否则0V清

“0”。进位标志位(CY)总为“0”。

【例】已知:(A尸50H,(B)=0A0H,执行指令:

MULAB

♦结果:(B)=32H(A)=00H即积为3200H

温馨提示

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

评论

0/150

提交评论