MCS-51单片机指令系统2_第1页
MCS-51单片机指令系统2_第2页
MCS-51单片机指令系统2_第3页
MCS-51单片机指令系统2_第4页
MCS-51单片机指令系统2_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

第四章MCS-51指令系统 主要内容1、指令格式2、寻址方式3、MCS-51单片机的指令系统与指令系统相关的一些概念 指令:是让CPU根据人们的意图来执行某种操作的命令。

指令系统:是计算机所能够执行的全部指令的集合。

程序:是按人们的要求所编制的指令操作序列。

程序设计语言:是编写程序的某种规则。

三类编程语言:机器语言、汇编语言、高级语言4.1指令格式4.1.1汇编指令

MCS-51汇编指令由操作码助记符字段和操作数字段所组成。指令格式如下:[标号:]操作码[操作数1][,操作数2][,操作数3][;注释]

第一部分为标号,标号加在指令之前,标号必须以字母开始,后跟1~8个字母或数字,并以“:”结尾,用户定义的标号不能和汇编保留符号(包括指令操作码助记符以及寄存器名等)重复。标号的值是它后面的指令存储地址。第二部分为指令操作码助记符,它由2~5个英文字母所组成,如JB、MOV、CJNE、LCALL等。第三部分为操作数,它以一个或几个空格和操作码隔开,根据指令功能的不同,操作数可以有1、2、3个或没有(如NOP)。操作数之间以“,”分开。第四部分为注释,它以“;”和操作数分开。如果一行写不下,可以另起一行,但都必须以“;”开始。注释的作用:是用户对某一条指令或某一段程序的功能说明,在指令中不起作用。指令汇编后,注释没有被汇编成机器码。4.1.2伪指令

标准的MCS-51汇编程序还定义了许多伪指令供用户使用,大多数伪指令汇编时不产生机器语言指令,仅提供汇编控制信息。最常用的伪指令有以下几条:1、定位伪指令

ORGm m为十进制或十六进制数。m指出该伪指令后的指令的汇编地址。在一个汇编语言源程序中允许使用多条定位伪指令,但其值应和前面生成的机器指令存放地址不重叠。2、定义字节伪指令

DBX1,X2,X3,…,XnXi为单字节数据,它为十进制或十六进制数,也可以为一个表达式。Xi也可以为由两个单引号“‘”所括起来的一个字符串,这时Xi定义的字节长度等于字符串的长度,每个字符为一个ASCII码该伪指令把X1,X2,X3,…,Xn送目标程序存储器,通常用于定义一个常数表。6、汇编结束伪指令

END

该伪指令指出结束汇编,即使后面还有指令,汇编程序也不作处理。

3、字定义伪指令

DWY1,Y2,Y3,…,YnYi为双字节数据,它可以为十进制或十六进制数,也可以为一个表达式。该伪指令把Y1,Y2,Y3,…,Yn送目标程序存储器,经常用于定义一个地址表。

4、字或字节赋值伪指令 标号EQUm

该伪指令把值m赋给前面的标号,在程序中标号和m是等价的。例如:

DBUFEQU30H,则符号DBUF等价于30H。

5、位赋值伪指令 标号bitn

该伪指令把值n赋给前面的标号,n一般指位地址,在程序中标号和n是等价的。例如:HIGHbit20H,则HIGH等价于位地址20H。4.1.3常用的缩写符号在描述MCS-51指令系统的功能时,我们经常使用下面的缩写符号,其意义如下:A

累加器ACCAB

累加器ACC和寄存器B组成的寄存器对

direct

直接地址,取值范围为0~0FFH

#data

立即数,表示一个常数,取值范围为0~0FFH@

间接寻址

+加;-减; *乘; /除与;或;+异或;

=

等于

<小于;>大于;〈〉

不等于;传送× 寄存器名;(×) ×寄存器内容;

((×))由寄存器寻址的存储器单元内容;

(×)×寄存器内容取反;

rrr

指令编码中rrr三位值由工作寄存器Rn确定,R0~R7对应的rrr为000~111

$ 指本条指令起始地址

rel

相对偏移量,其值为-128~+1274.2寻址方式寻址方式概述寻址方式:就是指令中给出参与运算的操作数的方式MCS-51指令操作数有五种寻址方式:

1、寄存器寻址2、寄存器间接寻址

3、直接寻址4、立即数寻址

5、基寄存器加变址寄存器间接寻址4.2.1寄存器寻址由指令指出某一个寄存器的内容作为操作数,这种寻址方式称为寄存器寻址。可用寄存器寻址方式访问的寄存器有:

R0~R7、A、B、DPTR、进位标志C(布尔处理器的累加器C)等如:MOV A,R0 ;(R0)A DEC B ;(B)-1B ADD A,R1 ;(A)+(R1)AINC DPTR ;(DPTR)+1DPTRMOV bit,C ;(C)bit寄存器寻址对所选的工作寄存器区中的R0~R7进行操作时,由PSW的4、3位决定是哪个工作寄存器区4.2.2直接寻址在指令中含有操作数的直接地址,该地址指出了参与运算或传送的数据所在的字节单元或位的地址。即直接给出操作数所在存储单元的地址或位地址。直接寻址方式访问以下三种存储空间:●特殊功能寄存器(SFR只能用直接寻址方式访问);●内部数据存储器RAM低128字节(对于8032/8052等单片机,其内部高128字节RAM(80H~0FFH)不能用直接寻址方式访问)●位地址空间如: MOV A,3AH ;(3AH)A MOV R0,P1 ;(P1)R0 INC 58H ;(58H)+158H SUBB A,TL0 ;(A)-(TL0)A

例如:ANL 70H,#48H ;(70H)∧48H70H4.2.3寄存器间接寻址由指令指出某一寄存器中的内容作为操作数的地址。这种寻址方式称为寄存器间接寻址。寄存器间接寻址用符号@

。8051规定:R0、R1和DPTR可以作为间接寻址寄存器。1、用选定的工作寄存器区中的R0或R1作地址指针来寻址片内RAM的256B(00~0FFH)或片外RAM的低256B空间(00~0FFH)。如:设(R0)=65H,(65H)=47H MOV A,@R0;(65H)A,A中的值是47H MOV @R0,#3AH;3AH65H MOVX A,@R0;外RAM的(65H)A

带X为访问外部RAM的指令2、用DPTR作地址指针来寻址片外RAM的64KB空间如:设(DPTR)=2000HMOVX@DPTR,A;A外部RAM的2000H单元

MOVXA,@DPTR;外RAM的2000H单元的内容

A

例如:ANL A,@R0;(A)∧((R0))A4.2.4立即寻址立即寻址方式中操作数包含在指令字节中。即操作数以指令字节的形式存放于程序存储器中。

操作数可以是8位的,也可以是16位的。用“#”表示。如:MOVA,3AH ;(3AH)A× MOVA,#3AH ;3AHA MOV DPTR,#23C8H ;23C8HDPTR

ADDA,#0D4H ;(A)+0D4HA

例如:MOVA,#70H ;70HA

五、基寄存器加变址寄存器间接寻址这种寻址方式以16位的程序计数器PC或数据指针DPTR作为基寄存器,以8位的累加器A作为变址寄存器。基寄存器和变址寄存器的内容相加形成16位的地址,该地址即为操作数的地址。只能访问程序存储器。MCS-51指令系统中总共有如下三条基寄存器加变址寄存器间接寻址指令如:MOVCA,@A+DPTR;((A)+(DPTR))A MOVCA,@A+PC;((A)+(PC))A JMP@A+DPTR;((A)+(DPTR))PC该寻址方式多用于查表操作。五、相对寻址这种寻址方式以16位的程序计数器PC的内容作为基地址,加上指令中给定的偏移量所得结果作为转移地址。 注意:偏移量是有符号数,在-128~127之间。

例如:JC80H;C=1转跳MCS-51具有五个存贮器空间,且多数从零地址开始编址:程序存贮器空间 0000H~0FFFFH

内部RAM空间 00H~0FFH

特殊功能寄存器空间 80H~0FFH

位地址空间 00H~0FFH

外部RAM/IO空间 0000H~0FFFFH指令对哪一个存贮器空间进行操作是由指令的操作码和寻址方式确定的。对程序存贮器只能采用立即寻址和基寄存器加变址寄存器间接寻址方式。特殊功能寄存器只能采用直接寻址方式,不能采用寄存器间接寻址方式。8052/8032等单片机内部RAM的高128字节(80~0FFH)只能采用寄存器间接寻址,不能使用直接寻址方式。位操作指令只能对位寻址区操作。外部扩展的数据存贮器只能用MOVX指令访问,而内部RAM的低128字节(00~7FH)既能用直接寻址,也能用寄存器间接寻址,操作指令最丰富。表4-1寻址方式及相关的存储器空间寻址方式寻址范围寄存器寻址R0~R7A、B、C(CY)、DPTR(双字节)直接寻址内部RAM低128字节(00H~7FH)特殊功能寄存器(80H~0FFH)内部RAM位寻址区的128位(00H~7FH)特殊功能寄存器中可寻址的位(80H~0FFH)寄存器间接寻址内部数据存储器RAM[@R0,@R1,@SP(仅PUSH,POP)]外部RAM或I/O口(@R0,@R1,@DPTR)立即寻址程序存储器(常数)基寄存器加变址寄存器间接寻址程序存储器(@A+DPTR,@A+PC)4.3数据操作和指令类型

4.3.1数据操作

在特殊功能寄存器中有一个程序状态字寄存器PSW,保存数据操作的结果标志。其中有些位状态是根据指令执行结果,由硬件自动设置的,而有些位状态则是使用软件方法设定的。程序状态字PSW的格式和功能如下:D7D6D5D4D3D2D1D0CYACF0RS1RS0OVF1PCY

进位标志。又是布尔处理机的累加器C。如果数据操作结果最高位有进位输出(加法时)或借位输入(减法时)则置位CY;否则清“0”CY。AC

辅助进位标志。如果数据操作结果低4位有进位(加法时)或低4位向高4位借位(减法时),则置位AC;否则清“0”AC。AC主要用于二--十进制数加法的十进制调整。OV

溢出标志。如果数据操作结果有进位(D6)进入最高位(D7)但最高位没有产生进位或者最高位(D7)产生进位而低位(D6)没有向最高位进位,则置位溢出标志OV;否则清“0”溢出标志。溢出标志位用于补码运算。P奇偶标志。这是累加器ACC的奇偶标志位,表明累加器A中1的个数的奇偶,在每个指令周期由硬件根据A的内容对P位进行置位或复位。若累加器ACC中1的个数为奇数,则P=1;否则P=0。由于P总是表示ACC的奇偶性,只随A的内容变化而变化,所以一个数写入PSW,P的值不变。RS1工作寄存器区选择位高位。RS0工作寄存器区选择位低位。F0用户标志位。供用户使用的软件标志,用户可根据需要用软件方法置位或复位,其功能和内部RAM中位寻址区的各位相似。F1目前大多数的产品该位可以作为用户标志位F1使用,用法和F0相同4.3.2指令类型

MCS-51指令系统共有111条指令。如果按字节数分类,则有49条单字节指令、45条双字节指令和17条3字节指令。若按指令执行时间分类,就有64条单周期指令、45条双周期指令、2条(乘、除)4周期指令。可见,MCS-51指令系统具有存贮效率高、执行速度快的特点。按功能分类,MCS-51指令系统可分为:

数据传送指令;

算术运算指令;

逻辑运算指令;

位操作指令;控制转移指令; 下面我们根据指令的功能特性分类介绍指令系统。4.4数据传送指令

绝大多数指令都有操作数,所以数据传送操作是一种最基本最重要的操作之一。数据传送是否灵活快速对程序的编写和执行速度产生很大影响。MCS-51的数据传送操作可以在累加器A、工作寄存器R0~R7、内部数据存贮器、外部数据存贮器和程序存贮器之间进行,其中对A和R0~R7的操作最多。MCS-51数据传送操作4.4.1内部数据传送指令一、以累加器A为目的操作数的指令(4条)MOVA,Rn

;(Rn)A n=0~7

MOVA,direct ;(direct)A

MOVA,@Ri

;((Ri))A i=0~1

MOVA,#data ;dataA这组指令的功能是把源操作数的内容送入累加器A。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。例1:

MOVA,R6 ;(R6)

A,寄存器寻址

MOVA,70H ;(70H)

A,直接寻址

MOVA,@R0 ;((R0))

A,间接寻址

MOVA,#78H ;78HA,立即寻址二、以Rn为目的操作数的指令(3条)

MOVRn

,A

;(A)

Rn

MOVRn

,direct

;(direct)

Rn

MOVRn

,#data

;data

Rn

这组指令的功能是把源操作数的内容送入当前工作寄存器区的R0~R7中的某一个寄存器。源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。例2:

MOVR2,A ;(A)

R2,寄存器寻址

MOVR7,70H ;(70H)

R7,直接寻址

MOVR3,#0A0H ;0A0HR3,立即寻址三、以直接寻址的单元为目的操作数的指令(5条)

MOVdirect,A

;(A)directMOVdirect,Rn

;(Rn)directMOVdirect,direct

;(源direct)目的directMOVdirect,@Ri

;((Ri))directMOVdirect,#data

;datadirect这组指令的功能是把源操作数送入由直接地址指出的存贮单元。源操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。例3:

MOVP1(90H),A ;(A)

P1,寄存器寻址

MOV70H,R2 ;(R2)

70H,寄存器寻址

MOV0E0H(A),78H ;(78H)

ACC,直接寻址

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

MOV01H,#80H ;80H01H,立即寻址四、以寄存器间接寻址的单元为目的操作数的指令(3条)

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

MOV @Ri,direct

; (direct)(Ri)

MOV @Ri,#data

data

(Ri)这组指令的功能是把源操作数的内容送入当前工作寄存器区的R0或R1内容所指出的内部RAM存贮单元中。源操作数有寄存器寻址、直接寻址和立即寻址等寻址方式。例4:

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

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

MOV@R1,#80H ;80H(R1)立即寻址MOV指令在片内RAM的允许操作图不允许的操作有:@Ri@Ri

RnRn@RiRn五、十六位数据传送指令(1条)MOVDPTR,#data16

;dataHDPH,dataL

DPL

这条指令的功能是把16位常数送入DPTR。16位的数据指针DPTR由DPH和DPL组成,这条指令执行结果把高位立即数送入DPH,低位立即数送入DPL。上述MOV指令中,累加器A是一个特别重要的8位寄存器,CPU对它具有其它寄存器所没有的操作指令,后面将介绍的加、减、乘、除指令都是以A作为操作数的。Rn为CPU当前选择的寄存器区中的R0~R7,在指令编码中rrr=000~111,分别对应于R0~R7。直接地址指出的存贮单元为内部RAM的00~7FH和特殊功能寄存器。间接寻址中,用R0或R1作地址指针,访问内部RAM的00~0FFH这256个单元。例5设(70H)=60H,(60H)=20H,P1口为输入口,当前的输入状态为B7H,执行下面的程序:

MOV R0,#70H ;70HR0 MOV A,@R0 ;60HA MOV R1,A ;60HR1 MOV B,@R1 ;20HB MOV @R0,P1 ;B7H70H结果(70H)=B7H,(B)=20H

(R1)=60H,(R0)=70H六、堆栈操作指令

如前所述,在MCS-51内部RAM中可以设定一个后进先出(LIFO)的堆栈,在特殊功能寄存器中有一个堆栈指针SP,它指出栈顶的位置,在指令系统中有两条用于数据传送的堆栈操作指令。1.进栈指令PUSHdirect ;(SP)+1

SP,(direct)SP这条指令的功能是首先将堆栈指针SP加1,然后把直接地址指出的内容传送到堆栈指针SP寻址的内部RAM单元中。例6设(SP)=60H,(ACC)=30H,(B)=70H,执行下述指令:

PUSH ACC ;(SP)+1,61HSP,(ACC)61H

PUSH B ;(SP)+1,62HSP,(B)62H结果:(61H)=30H,(62H)=70H,(SP)=62H进栈指令用于保护CPU现场。

2.退栈指令

POPdirect

这条指令的功能是把堆栈指针SP寻址的内部RAM单元内容送入直接地址指出的字节单元中,堆栈指针SP减1。例7设(SP)=62H,(62H)=70H,(61H)=30H,执行下述指令:

POPDPH ;((SP))

DPH,(SP)-1SP POPDPL ;((SP))

DPL,(SP)-1SP结果:(DPTR)=7030H,(SP)=60H退栈指令用于恢复CPU现场。七、字节交换指令(5条)

XCHA,Rn

;(A)(Rn)

XCHA,direct ;(A)(direct)

XCHA,@Ri

;(A)((Ri))这组指令的功能是将累加器A的内容和源操作数内容相互交换。源操作数有寄存器寻址,直接寻址和寄存器间接寻址等寻址方式。例8设(A)=80H,(R7)=08H,执行指令:

XCHA,R7 ;(A)(R7)结果:(A)=08H,(R7)=80H

八、半字节交换指令XCHD A,@Ri

;(A)0~3((Ri))0~3这条指令将A的低4位和R0或R1指出的内部RAM单元的低4位相互交换,各自的高4位不变。例9设(A)=15H,(R0)=30H,(30H)=34H,执行指令:

XCHDA,@R0 ;

结果:(A)=14H,(30H)=35H4.4.2累加器A与外部数据存贮器传送指令(4条)MOVXA,@DPTR ;((DPTR))A

MOVXA,@Ri

;((Ri))Ai=0,1MOVX@DPTR,A ;(A)(DPTR)

MOVX@Ri

,A ;(A)(Ri)i=0,1这组指令的功能是累加器A和外部扩展的RAM/IO口之间的数据传送指令。由于外部RAM/IO口是统一编址的,共占一个64K字节的空间,所以指令本身看不出是对RAM还是对I/O口操作,而是由硬件的地址分配确定的。1.

第1,3两条指令以DPTR作为外部RAM的16位地址指针,寻址范围为(0000H~0FFFFH)64KB空间;2.

第2,4两条指令以R0或R1作为低8位地址指针,由P0口送出,寻址范围为(0000H~00FFH)256B空间(P2口仍可作通用I/O口)。4.4.3查表指令(i)MOVC A,@A+PC ;((A)+(PC))A

这条指令以PC作为基址寄存器,A的内容作为无符号数和PC内容(下一条指令的起始地址)相加后得到一个16位的地址,由该地址指出的程序存贮器单元内容送到累加器A。例10设(A)=30H,执行指令:地址指令

1000HMOVC A,@A+PC

结果:将程序存贮器中1031H单元内容送入A。

这条指令以PC作为基寄存器,当前的PC值是由该查表指令的存贮地址确定的,而变址寄存器A的内容为0~255,所以(A)和(PC)相加所得到的地址只能在该查表指令以下256个单元的地址之内,因此所查的表格只能存放在该查表指令以下256个单元内,表格的大小也受到这个限制。例11 ORG 8000H MOV A,#30H ;11100100,0011000 MOVC A,@A+PC ;10000011 ┆ ORG 8030H DB 41H,42H,43H,44H,45H DB 46H,47H,48H,49H,4AH ┆上面的查表指令执行后,将8003H+30H=8033H所对应的程序存贮器中的常数44H送A。(ii)MOVCA,@A+DPTR ;((A)+(DPTR))这条指令以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,由该地址指出的程序存贮器单元的内容送到累加器A。例12设(DPTR)=8100H,(A)=40H,执行指令:

MOVC A,@A+DPTR结果:将程序存贮器中8140H单元中内容送入累加器A。

这条查表指令的执行结果只和数据指针DPTR及累加器A的内容有关,与该指令存放的地址无关,因此表格大小和位置可在64K字节程序存贮器中任意安排,只要在查表之前对DPTR和A赋值,就使一个表格可被各个程序块公用。4.5算术运算指令MCS-51的算术运算指令有加、减、乘、除法指令,增量和减量指令;第一操作数一般为A;一般影响标志位CY、AC、OV和P。共24条指令。4.5.1加法指令一、不带进位的加法指令(4条)ADDA,Rn

;(A)+(Rn)A

ADDA,direct ;(A)+(direct)A

ADDA,@Ri

;(A)+((Ri))A

ADDA,#data ;(A)+#dataA这组加法指令的功能是把所指出的第二操作数和累加器A的内容相加,其结果放在累加器A中。如果位7有进位输出,则置“1”进位CY;否则清“0”CY。如果位3有进位输出,置“1”辅助进位AC;否则清“0”AC。如果位6有进位输出而位7没有或者位7有进位输出而位6没有,则置位溢出标志OV;否则清“0”OV。第二操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。例13设(A)=53H,(R0)=0FCH,执行指令:

ADDA,R001010011+11111100

(1)01001111

结果:(A)=4FH,CY=1,AC=0,OV=0,P=1

例14设(A)=85H,(R0)=20H,(20H)=0AFH,执行指令:

ADDA,@R010000101+10101111

(1)00110100

结果:(A)=34H,CY=1,AC=1,OV=1,P=1

二、带进位加法指令(4条)

ADDCA,Rn

;(A)+(Rn)+CYA ADDCA,direct ;(A)+(direct)+CYA ADDCA,@Ri

;(A)+((Ri))+CYA ADDCA,#data ;(A)+#data+CYA此指令影响程序状态字PSW的CY、AC、OV、P位例15设(A)=85H,(20H)=0FFH,CY=1,执行指令:

ADDCA,20H1000010111111111+1 (1)10000101

结果:和(A)=85H,CY=1,AC=1,OV=0,P=1这组带进位加法指令的功能是把所指出的第二操作数、进位标志与累加器A的内容相加,其结果放在累加器A中。

三、增量指令(5条)INCA ;(A)+1A

INCRn

;(Rn)+1

Rn

INCdirect ;(direct)+1direct

INC@Ri

;((Ri))+1(Ri)

INCDPTR ;(DPTR)+1DPTR这组增量指令的功能是把所指出的操作数加1,若原来为0FFH将溢出为00H,除对A操作影响P外,此类指令不影响标志位。操作数有寄存器寻址、直接寻址和寄存器间接寻址方式。例16设(A)=0FFH,(R3)=0FH,(30H)=0F0H,(R0)=40H,(40H)=00H,执行指令:

INCA ;(A)+1A INCR3 ;(R3)+1R3 INC30H ;(30H)+130H INC@R0 ;((R0))+1(R0)结果:(A)=00H,(R3)=10H,(30H)=0F1H,(40H)=01H PSW状态不改变。四、十进制调整指令(1条)DAA这条指令对累加器A中由上一条加法指令(加数和被加数均为压缩的BCD码)所获得的8位结果进行调整,使它调整为压缩BCD码的数;调整方法:若(A)0~3>9或AC=1,则(A)+06H

(A);

若(A)4~7>9或CY=1,则(A)+60H

(A);

对标志的影响:若结果(A)>99H,则CY=1;不影响OV。例17设(A)=56H,(R5)=67H,执行指令:

ADDA,R5DAA结果:(A)=23H,CY=1DA A指令执行示意图ACC0~ACC3>9?开始AC=1?(A)+06H→AACC4~ACC7>9?CY=1?(A)+60H→A结束YYYYNNNN

例18

6位十进制加法程序

完成功能:(32H)(31H)(30H)+(42H)(41H)(40H)52H51H50H,假设32H,31H,30H,42H,41H,40H中的数均为2位BCD码,程序如下:MOV A,30H ;(30H)+(40H)ACC ADD A,40H DA A ;对(A)十进制调整后50H MOV 50H,A MOV A,31H ;(31H)+(41H)+CYACC ADDC A,41H DA A ;对A十进制调整后51H MOV 51H,A MOV A,32H ;(32H)+(42H)+CYACC ADDC A,42H DA A ;对A十进制调整后52H MOV 52H,A4.5.2减法指令一、带进位减法指令

SUBBA,Rn SUBBA,direct SUBBA,@Ri SUBBA,#data这组带进位减法指令从累加器A中减去第二操作数和进位标志,结果放在累加器A中。影响CY、AC、OV、P第二操作数允许有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式。例19设(A)=0C9H,(R2)=54H,CY=1,执行指令

SUBB A,R21100100101010100

101110100

结果:(A)=74H,CY=0,AC=0,OV=1,P=0二、减1指令(4条)DECA DECRn

DECdirectDEC@Ri

这组指令的功能是将指定的操作数减1。若原来为00H,减1后下溢为0FFH,不影响标志(除(A)减1影响P外)。例20设(A)=0FH,(R7)=19H,(30H)=00H,(R1)=40H,(40H)=0FFH,执行指令: DECA ;(A)-1A DECR7 ;(R7)-1R7 DEC30H ;(30H)-130H DEC@R1 ;((R1))-1(R1)

结果:(A)=0EH,(R7)=18H,(30H)=0FFH,(40H)=0FEH,P=1不影响其它标志。4.5.3乘法指令

MULAB这条指令的功能是把累加器A和寄存器B中的8位无符号整数相乘,其16位积的低位字节放在累加器A中,高位字节放在B中。如果积大于255(0FFH),则置位溢出标志OV;否则清“0”OV。进位标志CY总是清“0”例21设(A)=50H(80),(B)=0A0H(160)。执行指令:

MULAB

结果:(B)=32H,(A)=00H,即积为3200H(12800)。

4.5.4除法指令DIVAB这条指令的功能是把累加器A中的8位无符号整数除以寄存器B中的8位无符号整数,所得商的整数部分存放在累加器A中,余数放在寄存器B中。如果原来B中的内容为0,即除数为0,则结果A和B中内容不定,并置位溢出标志OV。在任何情况下,都清“0”CY例22设(A)=0FBH(251),(B)=12H(18),执行指令:

DIVAB

结果:

(A)=0DH(13),(B)=11H(17),CY=0,OV=04.6逻辑运算指令4.6.1累加器A的逻辑操作指令一、CLRA

这条指令的功能是将累加器ACC清“0”,不影响CY、AC、OV等标志。只影响P。二、CPLA

这条指令的功能是将累加器ACC的每一位逻辑取反,原来为1的位变0,原来为0的位变为1。不影响CY、AC、OV等标志。例23设(A)=10101010B,执行指令:

CPLA结果:(A)=01010101B三、左环移指令

RLA

这条指令的功能是将累加器ACC的内容向左环移1位,位7循环移入位0。不影响标志。

四、带进位左环移指令RLCA

这条指令的功能是将累加器ACC的内容和进位标志一起向左环移1位,ACC.7移入进位位CY,CY移入ACC.0,不影响其它标志。五、右环移指令RRA这条指令的功能是将累加器ACC的内容向右环移1位,ACC.0环移入ACC.7。不影响标志。

六、带进位右环移指令

RRCA这条指令的功能是将累加器ACC的内容和进位标志CY一起向右环移1位,ACC.0进入CY,CY移入ACC.7。不影响其它标志。

七、累加器ACC半字节交换指令

SWAPA这条指令的功能是将累加器ACC的高半字节(ACC.7~ACC.4)和低半字节(ACC.3~ACC.0)互换。例24设(A)=0C5H,执行指令:

SWAPA结果:(A)=5CH4.6.2两个操作数的逻辑操作指令一、逻辑与指令(6条)

ANLA,RnANLA,directANLA,@RiANLA,#dataANLdirect,AANLdirect,#data这组指令的功能是在指出的操作数之间执行按位的逻辑与操作,结果存放在目的操作数中。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式

①目的操作数只能是A或direct②前四条指令仅影响标志位P。

后两条不影响标志位。③与运算常用于使某些位清“0”(任何位与0相与后该位都为0)例25:ANL A,R1 ;(A)∧(R1)→A ANL A,70H ;(A)∧(70H)→A ANL A,@R0 ;(A)∧((R0))→A ANLA,#07H ;(A)∧07H→A ANL70H,A ;(70H)∧(A)→70H ANLP1,#0F0H ;(P1)∧0F0H→P1例26设(A)=07H,(R0)=0FDH,执行指令:

ANLA,R0

00000111

∧11111101

00000101

结果:(A)=05H

二、逻辑或指令(6条)这组指令的功能是在所指出的操作数之间执行按位的逻辑或操作,结果存到目的操作数中去。操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址方式。

ORLA,Rn ORLA,direct ORLA,@Ri ORLA,#data ORLdirect,A ORLdirect,#data①目的操作数只能是A或direct②前四条指令仅影响标志位P。

后两条不影响标志位。③或运算常用于使某些位置“1”(任何位与1相或后该位都为1)三、逻辑异或指令(6条)XRLA,Rn

XRLA,direct XRLA,@Ri

XRLA,#data XRLdirect,A XRLdirect,#data 这组指令的功能是在所指出的操作数之间执行按位的逻辑异或操作,结果存放到目的操作数中去,操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等寻址方式,①目的操作数只能是A或者direct;②前4条指令仅影响标志位P;后两条不影响标志位。③异或运算常用于使某些位取反。(任何位与1异或后使该位取反,与0异或使该位不变)逻辑操作类指令操作图

4.7位操作指令在MCS-51系列单片机内有一个布尔处理机,它以进位标志CY(程序状态字PSW.7)作为累加器C,以内部RAM和SFR内的位寻址区的位单元作为操作数,进行位变量的传送、修改和逻辑等操作。只有部分指令影响CY标志。位地址的表示方法(1)直接用位地址(0~0FFH) 如:D4H(PSW.4或RS1)(2)用直接地址加位数 如:PSW.4(D0.4),20H.0

(3)用位名称(位有名称) 如:RS1

(4)用bit定义的有名字的位地址4.7.1位变量传送指令MOV C,bitMOV bit,C这组指令的功能是把由源操作数指出的位变量送到目的操作数的位单元中去。其中一个操作数必须为位累加器C,另一个可以是任何直接寻址的位,也就是说位变量传送必须经过C进行。例31

MOV C,06H ;(20H).6→CY MOV P1.0,C ;CY→P1.0

结果:(20H).6→P1.04.7.2位变量修改指令 CLR C CLR bit CPL C CPL bit SETBC SETBbit这组指令的功能是将操作数指出的位清“0”、取反、置“1”,不影响其它标志例32 CLR C ;0→CY CLR 27H ;0→(24H).7 CPL 08H ;(21H).0→(21H).0 SETB P1.7 ;1→P1.7;(90H).7=14.7.3位变量逻辑操作指令

一、位变量逻辑与指令 ANLC,bit ANLC,/bit这组指令功能是,如果源位的布尔值是逻辑0,则进位标志清“0”,否则进位标志保持不变。操作数前斜线“/”表示用寻址位的逻辑非作源值,但不影响源位本身值,不影响别的标志。源操作数只有直接位寻址方式。例33设P1为输入口,P3.0作输出口,执行下列命令:

MOVC,P1.0 ;(P1.0)→C ANLC,P1.1 ;(C)∧(P1.1)→C ANL C,/P1.2 ;(C)∧(P1.2)→C MOVP3.0,C ;(C)→P3.0结果:P3.0=(P1.0)∧(P1.1)∧(P1.2)

二、位变量逻辑或指令 ORL C,bit ORLC,/bit这组指令的功能是,如果源位的布尔值为1,则置位进位标志;否则进位标志CY保持原来状态。同样,斜线“/”表示逻辑非例34设P1口为输出口,执行下述指令:

MOV C,00H ;(20H).0→C ORL C,01H ;(C)∨(20H).1→C ORL C,02H ;(C)∨(20H).2→C ORL C,03H ;(C)∨(20H).3→C ORL C,04H ;(C)∨(20H).4→C ORL C,05H ;(C)∨(20H).5→C

ORL C,06H

;(C)∨(20H).6→C ORL C,07H ;(C)∨(20H).7→C MOVP1.0,C ;(C)→P1.0结果:内部RAM的20H单元中只要有一位为1,P1.0就为1。4.8控制转移指令包括无条件转移、条件转移、子程序调用和返回指令等,共17条。只有比较转移指令影响标志。4.8.1无条件转移指令(4条)一、短跳转指令AJMPaddr11;先(PC)+2PC;addr11PC10~0,(PC15~11)不变这是2K字节范围内的无条件转跳指令,程序转移到指定的地址。该指令在运行时先将PC+2,然后通过把PC的高5位和指令第一字节高3位以及指令第二字节相连得到跳转的目标地址,送入PC。因此,目标地址必须与它下面的指令存放地址在同一个2K字节区域内。例35KWR:AJMPaddrll

如果addrll=00100000000B(0100H),标号KWR地址为1030H,则执行该条指令后,程序转移到1100H;当KWR为3030H时,执行该条指令后,程序转移到3100H。二、长跳转指令LJMPaddr16;addr16PC这条指令执行时把指令的第二和第三字节分别装入PC的高位和低位字节中,无条件地转移到指定地址。转移的目标地址可以在64K字节程序存贮器地址空间的任何地方,不影响任何标志。例37执行指令:LJMP8100H

结果使程序转移到8100H,不管这条长跳转指令存放在什么地方。这和AJMP、SJMP指令是有差别的。三、相对转移指令SJMPrel

;先(PC)+2PC

;后(PC)+relPC这也是一条无条件转跳指令,执行时先把PC加2,再把指令中有符号的位移值rel加到PC上,计算出转移地址。因此,转移的目标地址可以在它下面的指令前128字节到后127字节之间。说明:(1)该指令执行时PC值为下一条指令的首地址;(2)转移范围:-128~+127;

例36KRD:SJMPPKRD

如果KRD标号值为0100H,即SJMP这条指令的机器码存放于0100H和0101H这两个单元中;标号PKRD值为0123H,即转移的目标地址为0123H,则指令的第二个字节(相对偏移量)应为:

0100+2+rel=0123H

则:rel=0123H-0102H=21H四、基寄存器加变址寄存器间接转移指令(散转指令)JMP@A+DPTR;(A)+(DPTR)PC 这条指令的功能是把累加器A中8位无符号数与数据指针DPTR中的16位数相加,结果作为下条指令地址送入PC,不改变累加器A和数据指针DPTR内容,也不影响标志。利用这条指令能实现程序的散转。说明:(1)具有多分枝转移功能,即散转功能,又叫散转指令;

(2)转移范围:是以DPTR为首地址的256B。 例38

如果累加器A中存放待处理命令编号(0~7),程序存贮器中存放着标号为PMTB的转移表,则执行下面的程序,将根据A内命令编号转向相应的命令处理程序:

PM:

MOV R1,A ;(A)﹡3→A RL A ADD A,R1

MOV DPTR,#PMTB;转移表首址→DPTR JMP @A+DPTR PMTB: LJMPPM0 ;转向命令0处理入口

LJMPPM1 LJMPPM2 LJMPPM3 LJMPPM4 LJMPPM5 LJMPPM6 LJMPPM74.8.2条件转移指令(8条)

条件转移指令是依某种特定条件转移的指令。条件满足才转移(相当于执行一条相对转移指令),条件不满足时则顺序执行下面的指令。当条件满足时,把PC加到指向下一条指令的第一个字节地址,再把有符号的相对偏移量加到PC上,计算出转移地址。目标地址在以下一条指令的起始地址为中心的256字节范围中(-128~+127B)。均为相对寻址方式。条件满足否?(PC)+rel转向目标地址执行执行下条指令YN一、测试条件符合转移指令

JZrel

;当A=0时,(PC)+rel(PC)转移;当A≠0时,顺序执行。

JNZrel

;当A≠0时,(PC)+rel(PC)转移;当A=0时,顺序执行。

JCrel

如果进位标志CY为1,则执行转移;

JNCrel

如果进位标志CY为0,则执行转移;

JBbit,

rel

如果直接寻址的位值为1,则执行转移;

JNBbit,rel

如果直接寻址的位值为0,则执行转移;

JBCbit,rel

如果直接寻址的位值为1,则执行转移; 并清“0”直接寻址的位(bit)。

二、比较不相等转移指令

共4条,均为三字节指令。一般形式为:CJNE(目的操作数),(源操作数),rel这组指令的功能是比较两个操作数的大小,如果它们的值不相等,则转移。在PC加到下一条指令的起始地址后,通过把指令最后一个字节有符号的相对偏移量加到PC上,并计算出转移地址。如果目的操作数(无符号整数)小于源操作数,则置位进位标志CY;否则,清“0”CY。不影响任何一个操作数的内容。CJNEA,#data,rel

;若A>#data,则(PC)+relPC,且0CY;

;若A<#data,则(PC)+relPC,且1CY;

;若A=#data,则顺序执行,且0CY。CJNEA,direct,rel

;若A>(direct),则(PC)+relPC,且0CY;

;若A<(direct),则(PC)+relPC,且1CY;

;若A=(direct),则顺序执行,且0CYCJNERn,#data,rel

;若(Rn)>#data,则(PC)+relPC,且0CY;

;若(Rn)<#data,则(PC)+relPC,且1CY;

;若(Rn)=#data,则顺序执行,且0CY。

CJNE@Ri,#data,rel

;若((Ri))>#data,则(PC)+relPC,且0CY;

;若((Ri))<#data,则(PC)+relPC,且1CY;

;若((Ri))=#data,则顺序执行,且0CY。说明:

(1)PC值为下一条指令第一个字节的地址,为本条指令PC值加3,即(PC)+3(PC);

(2)×CY,实际是A-(direct)操作的借位值送CY;CY可以作为进一步操作的依据。

操作数有寄存器寻址、直接寻址、寄存器间接寻址和立即寻址等方式。例39执行下面程序后将根据A的内容大于60H、等于60H、小于60H三种情况作不同的处理:

CJNE A,#60H,NEQ ;(A)不等于60H转移

EQ: … ;(A)等于60H处理程序 :

NEQ: JCLOW ;(A)<60H转移 : ;(A)>60H处理程序

LOW: …;(A)<60H处理程序 :

三、减1不为0转移指令DJNZRn,rel

;(Rn)-1Rn; ;若(Rn)≠0,则(PC)+rel

PC; ;若(Rn)=0,顺序执行DJNZdirect,rel

;(direct)-1direct; ;若(direct)≠0,则(PC)+rel

PC; ;若(direct)=0,顺序执行这组指令把源操作数减1,结果回送到源操作数中去。如果结果不为0,则转移。源操作数有寄存器寻址和直接寻址方式。这组指令允许程序员把内部RAM单元或SFR用作程序循环计数器。说明:(1)PC的含义同上;(2)Rn、direct相当 于控制循环的计数器。计数器=0?计数器-1(PC)+relPC结束循环,顺序执行YN例40延时程序:

START:SETB P1.1 ;1→P1.1 DL:MOV 30H,#03H;03H→30H,置初值

DL0:MOV 31H,#0F0H;0F0H→31H,置初值

DL1:DJNZ 31H,DL1;(31H)-1→31H

;(31H)不为0重复执行

DJNZ 30H,DL0 ;(31H)-1→30H

;(30H)不为0转DL0 CPL P1.1 ;P1.1求反

AJMP DL ;转D

温馨提示

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

评论

0/150

提交评论