求一MCS-51系列单片机指令表

RT,求MCS-51系列单片机全部指令,最好有详解和实例。

请发到我的邮箱,采纳的追加50分!!
忘了说邮箱了。。。

[email protected]

传送指令是指令系统中最基本,使用最多的一类指令,主要用于数据的传送、保存以及交换等场合。

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

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

有寄存器、直接、寄存器间接和立即4种寻址方式。

MOV A, Rn MOV A, data
MOV A,@Rn MOV A,#data

2.以寄存器Rn为目的的操作数的指令(3条)
这组指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。

有寄存器、直接和立即3种寻址方式。

MOV Rn, A MOV Rn,data
MOV Rn,#data

3.以直接地址为目的操作数的指令(5条)
这组指令的功能是把源操作数指定的内容送到由直接地址data所指定的片内RAM中。

有寄存器、直接、寄存器间接和立即4种寻址方式。

MOV data,A MOV data,Rn
MOV data1,data2 MOV data,@Ri
MOV data,#data

4.以间接地址为目的操作数的指令(3条)
这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。

有寄存器、直接和立即3种寻址方式。

MOV @Ri,A MOV @Ri,data
MOV @Ri,#data

5.查表指令(2条)
这组指令的功能是对存放于程序存储器中的数据表格进行查找传送。使用变址寻址方式。

MOVC A,@A+DPTR MOVC A, @A+PC

6.累加器A与片外AM传送指令(4条)
这组指令的功能为累加器A与片RAM间的相互传送。由于MCS-51指令系统中没有专门的输入/输出指令,且片外扩展的I/O口与片外RAM是统一编址的,故以下4条指令也可作为输入/输出指令。使用寄存器间接寻址方式。

MOVX A,@DPAR MOVX @DPTR,A
MOVX A,@Ri MOVX @Ri,A

7.堆栈操作类指令(2条)
该类指令的功能是把直接寻址单元的内容传送到堆栈指针SP所指的单元中,以及把SP所指单元的内容送到直接寻址单元中。

PUSH data POP data

前一条指令称为入栈操作指令,后一条指令称为出栈指令。由于开机复位后,(SP)=07H,故一般需重新设置SP的初值。由于压入堆栈的第一个数必须存放在SP+1所指存储单元,故实际的栈底为SP+1所指存储单元。

8.交换指令(4条)
该类指令的功能是把累加器A中的内容与源操作数所指出的数据相互交换。

有寄存器、直接和寄存器间接3种寻址方式。

XCH A,Rn XCH A,data
XCH A,@Ri XCHD A,@Ri

9.16位数据传送类指令(1条)
MOV DPTR,#data

该指令的功能是把16位常数送入数据指针寄存器,使用立即寻址方式。译成机器码时,是高位字节在前,低位字节在后。
MCS-51具有强大的加、减、乘、除四则算术运算指令。

1.程序状态字PSW

MCS-51有一个程序状态字寄存器PSW,用来保存指令执行结果的标志,供程序查讯和判别。PSW是特殊功能寄存器中的一个,其格式如下:
PSW7--既是布尔处理机的累加器C,又是进位标志CY,如果操作结果在最高位有进位输出(加法时)或借位输入(减法时),置位CY,否则清“0”CY。
AC--辅助进位(半进位)标志。如果操作结果的低4位有进位(加法时)或向高4位借位时(减法),置AC,否则清“0”AC,AC主要用于二-十进制数加法调整。
OV--溢出标志。如果操作结果有进位进入最高位,但最高位没有产生进位,或者最高位产生进位而低位没有向最高位进位,这时置位溢出标志位,否则OV清“0”。溢出标志位用于补码运算,当有符号的数运算结果不能用8位二进制数表示时,OV将置位。
P--累加器A的奇偶标志位,如果累加器A的8位的模2和为1(奇),则P=1;否则P=0。由于P总是表示A的奇偶性,随着A的内容变化的,所以一个值写入PSW的P位的值不变。
RS1、RS0--指示当前使用的工作寄存器区。
F0--用户标志位。可作为软件标志,它的作用和内部RAM位寻址区的各位相似。
PSW1--保留位,对它的操作无效。

2.加法指令

1、不带进位加法指令
ADD A,#data ADD A,data
ADD A,@Ri ADD A,Rn

工作寄存器、内部RAM单元内容或立即数的8位无符号二进制数和累加器A中数相加,所得和存放于累加器A中,当和的第3、7位有进位时,分别将AC,CY标志位置1;否则为0。
上述指令的执行将影响标志位AC、CY、OV、P。

对于无符号数,进位标志位CY=1,表示溢出;CY=0表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位,而另一位不产生进位,溢出标志位OV置“1”否则被清“0”。OV=1表示两个正数相加,和变为负数,或两个负数相加,和变为正数的错误结果。
源操作数有四种寻址方式:寄存器、直接、间接和立即数。

2、带进位加法指令:
ADDC A,#data ADDC A,data
ADDC A,@Ri ADDC A,Rn

这是四条带进位的加法指令。将累加器A内容加当前CY标志位内容,再加无符号单字节的数,和存于累加器A中。当运算结果第3、7位产生进位溢出时,则分别置位AC、CY和OV标志位。本指令执行将影响标志位AC、CY、OV、P。
本指令常用于多字节加法。

3、加1指令:
INC A INC data
INC @Ri INC Rn
INC DPTR

INC指令将指定的内容加1,结果仍存放于原A或原单元中。如原值为0FFH,加1运算后将变成00H,运算结果不影响标志位。
本指令可对累加器A、工作寄存器RN、RI间址和直接寻址的单元内容进行加1运算。可见MCS-51加1指令是较丰富的。
注意:当用本指令使输出并行I/O内容加1时,用作输出口原始值,将从输出口的数据锁存器中读入,而不是从输出口的引脚上读入。

4、二-十进制调正指令:
DA A

若[(A0-3)>9]或[(AC)=1),则(A0-3)(A0-3)+06H

本指令是对A的BCD码加法结果进行调正。两个压缩型BCD码按二进制数相加之后,必须经本指令调正,才能得到压缩型BCD码的和数。

本指令的操作为:若累加器A的低4位数值大于9或者第3位向第4位产生进位,即AC辅助进位位为1,则需将A的低4位内容加6调正,以产生低4位正确的BCD码值。如果加0调正后,低4位产生进位,且高4位均为1时,则内部加法将置位CY,反之,它并不清“0”CY标志位。
若累加器A的高4位值大于9或最高进位位CY=1,则高位4位需加6调正,以产生高4位的正确BCD码值。同样,在加6调正后产生最高进位,则置位CY,反之,不清“0”CY这时CY的置位,表示和数BCD码值大于等于100。这对多字节十进制加法有用。不影响OV标志。
由此可见,本指令是根据累加器A的原始数值和PSW的状态,对累加器A进行加O6H、60H或66H的操作。
必须注意:本指令不能简单地把累加器A中的16进制数交换成BCD码,也不能用于十进制减法的调正。

3.减法指令

MCS-51在MCS-48的基础上增加了带借位减法指令,加强了计算机的运算功能。
1、带借位减法指令:

SUBB A,#data SUBB A,data
SUBB A,@Ri SUBB A,Rn

带借位减法指令SUBB,从累加器A中减去进位标志位CY和指定的变量,结果在累加器A中,若第七位有借位,则置位位CY,否则CY清0。若第3位有错位,则置位辅助进位标志AC,否则清0 AC。若第7和第6位中有一位需借位,而另一位不借位,则置位溢出标志OV。溢出位OV用于带符号的整数减法,它表示(OV=1)一个正数减负数结果为负数;或一个负数减正数结果为正数的错误结果。
源操作数允许有四种寻址方式:寄存器RN,直接地址direct,间址Ri或立即数。
当在进行单字节或多字节减法前,不知道进位标志位CY的值,则应在减法指令前先将CY清“0”。

4.乘法指令

MUL AB

乘法指令是MCS-51新增加的,运算速度只需4个机器周期。它大大增加了MCS-51单片机的运算功能,克服了MCS-48系列单片机的不足。
本指令将累加器A和寄存器B中二个8位无符号整数进行相乘,16位乘积的低8位存于A中,高8位存于B中,如果乘积大于255(0FFH),即B的内容不为0时,则置位溢出标志位OV,否则清“0”OV。进位标志位CY总是清“0”。

5.除法指令

DIV AB

MCS-51系列单片机增加的除法指令,运算时间亦只需4个机器周期,同样也增强了MCS-51的运算功能,使它能适用于复杂的且要求运算功能较强的控制系统。除法指令格式:
本指令将累加器A中8位无符号整数除以B寄存器中8位无符号整数,所得结果商的整数部分存于A中,整数作数部分存于寄存器B中。清“0”CY和OV标志位。当除数(B中内容)为00H时,则执行结果将为不定值,即执行结果送往A和B中的为不定值,且置位溢出标志位OV。在任何情况下,均清“0”CY。

6.减一指令

DEC A DEC data
DEC @Ri DEC Rn

DEC指令把所指的寄存器内容减1,结果仍送回原寄存器,若原来寄存器的内容为00H,则减1后将为FFH,运算结果不影响任何标志位,该组指令使用了直接、寄存器和寄存器间寻址。同加1指令一样,在第二条指令中,若直接地址是I/O口,则进行“读-改-写”操作。

逻辑操作类指令共有效25条,有与、或、异或、求反、左右移位、清0等逻辑操作,对应的寻址方式有直接、寄存器和间接寻址,该类指令的执行一般不影响PSW。

1.循环移位指令(4条)

RL A; RR A;
RLC A; RRC A;

前两条指令的功能分别是将累加器A的内容循环左移一位,后两条指令的功能分别是将累加器A的内容连同进位位CY一起循环左移或右移一位。

2.累加器半字节交换指令(1条)

SWAP A;

这条指令的功能是将累加器A的高低两半字节交换。如(A)=56H,执行指令SWAP A 后,结果(A)=65H。

3.求反指令(1条)

CPL A;

4.清0指令(1条)

CLR A;

5.逻辑与指令(6条)

ANL A,#data; ANL data,#data
ANL A,Rn ANL A,data
ANL data,A ANL A,@Ri

这组指令的第二条和第五条指令中,若直接地址正好是I/O口,则也是“读-改-写”操作。

6.逻辑或指令(6条)

ORL A,#data ORL data,#data
ORL A,Rn ORL A,data
ORL data,A ORL A,@Ri

这组指令的第二条和第五条也具有“读-改-写”功能。

7.逻辑异或指令(6条)

XRL A,#data XRL data,#data
XRL A,Rn XRL A,data
XRL data,A XRL A,@Ri

同样,这组指令的第二条和第五条也具有“读-写-改”功能。

控制转移类指令用于控制程序的走向,故其作用区间是程序存储器空间。利用具有16位地址的长调用、长转移指令可对64K程序存储器的任一地址单元进行访问,也可用具有11位地址的绝对调用和绝对转移指令,访问2K字节的空间。另外,还有在一页范围的短相对转移以及许多条件转移指令,这类指令一般不影响标志位,不面分别给予介绍。

1.无条件转移语句(4条)

LJMP addr16 AJMP addr11 SJMP rel JMP @(A)+DPTR

上述指令的功能是当程序执行完该指令时,程序就无条件地转移到指令所提供的地址上去。

第一条指令称为长转移指令,指令提供16位目标地址,将指令中第二字节和第三字节地址码分别装入PC的高8位中,所以无条件转移的目标地址范围是64K字节空间。

第二条指令称为绝对转移指令,指令提供11位目标地址,所以,无条件转移的目标地址范围是从下条指令开始的2K字节空间。

第三条指令称为相对短转移指令,指令控制程序无条件的转向指定地址。该指令的rel是一个带符号的相对偏移量,范围为-128~+127。负数表示向后转移,正数表示向前转移。这条指令的优点是指令给出的是相对转移地址,不具体指出地址值,这样当程序地址发生变化时,只要相对地址不发生变化,该指令就不需作任何改动。在用汇编语言写程序时,rel是一个标号,由汇编程序在汇编过程中自动计算偏移地址。在手工汇编时,可用下式计算偏移地址:

向后转移时:rel=FEH-(源、目的地址的绝对值)

向前转移时:rel=(源、目的地址差的绝对值)-2

第四条指令称为散转指令(又称为间接转移指令),该指令把累加器A中的8位无符号数与作为基址寄存器DPTR中的16位数据相加,所得的值送入PC作为转移的目的地址。该指令执行后不影响累加器A和数据指针DPTR中的原内容,也不影响任何标志位。这条指令的特点是其转移地址不是编程时确定的,而是在程序运行时动态决定的。因此,可以在DPTR中装入多条转移程序的首地址,而由累加器A中的内容来动态选择该时刻应转向那一条分支程序。

2.条件转移指令(8条)

1.JZ rel 2.JNZ rel
3.CJNEA,data,rel 4.CJNE A,#data,rel
5. CJNE Rn,#data,rel
6.CJNE @Ri,data,rel
7.DJNZ Rn,rel
8.DJNZ data,rel

上述指令执行满足某种特定条件的转移,其目标在以下一条指令的起始地址为中心的256个字节范围内(-128~+127)。

第一条和第二条指令是判别累加器A中的内容是否为0来确定是顺序执行还是转移。

第三条至第六条是比较转移指令,该指令通过比较前面两个操作数的大小,如果它们的值不相等则转移,相等则继续执行。指令执行后要影响进位位CY,若操作数1小于操作数2,则CY=1;若操作数1大于操作数2,则CY=0。

3.调用指程序及返回指令(4条)

1.LCALL addr16 2.ACALL addr11 3.RET 4.RETI

在程序设计中,经常需要对某段程序反复执行,为了减少程序的编写以及浪费不必要的地址空间,于是引入了主程序和子程序的概念,通常把某一段需要反复调用的程序称为子程序,子程序的最后一条指令为返回主程序指令(RET),而对具有调用子程序功能的指令称为调用指令。

第一条指令称为长调用指令,其与LJMP一样提供16位地址,可调用64K字节范围内的子程序。由于其为三字节指令,所以执行时首先(PC)+3,以获得下一条指令地址,并把此时的PC内容压入堆栈,作为返回地址,然后把地址addr16装入PC,转去执行子程序。

第二条指令称为绝对调用指令,该指令提供11位目标地址,限制在2K字节范围内调用,由于是双字节指令,所以执行时(PC)+2以获得下一条指令的地址,然后把该地址压入堆栈作为返回地址。其操作码的形成与AJMP指令相同。

第三条指令称为子程序返回指令,表示子程序结束需返回主程序,所以执行该指令时,分别从堆栈中弹出调用子程序时压入的返回地址。

第四条指令称为中断返回指令,该指令的执行过程类似指令RET,但其还能恢复中断逻辑,RETI和RET决不能互换使用。

4.空操作指令(1条)

NOP;

空操作指令除了PC加1外,CPC不作任何操作,而转向下一条指令去执行。这条指令常用于产生一个机器周期的延时。

位操作类指令共有17条,均以位为操作对象,分别完成位传送、位状态控制、位逻辑运算、位条件转移等功能,在汇编语言中,位地址的表示方式有以下4种:

直接用位地址表示:如91H。
字节地址位数方式:如P1.0(90H)。
位名称方式:如RS0。
用户使用伪指令事先定义过的符号地址。
1.位数据传送指令(2条)

MOV C,bit MOV bit,C

上述指令把源操作数指定的变量传送到目的操作数指定的单元中。第二条指令若是对I/O口的位进行操作,则也是“读-改-写”操作。

2.位状态控制指令(6条)

CLR C CLR bit CPL C
CPL bit SETB C SETB bit

上述指令的功能是分别对进位标志和直接寻址进行清0、求反以及直接位地址是I/O口的某一位时,也具有“读-改-写”功能。

3.位逻辑运算指令(4条)

ANL C,bit ANL C,/bit
ORL C,bit ORL C/bit

上述指令的功能是将位累加器C的内容与直接位地址的内容或直接位地址内容的反进行逻辑与、逻辑或,结果仍送回C中。

4.位条件转移指令(5)

JC rel JNC rel
JB bit,rel JNB bit,rel
JBC bit,rel

上述指令的功能分别是判别进位位C和直接位地址的内容是“1”还是“0”,以此来决定程序的走向。最后一条指令的功能是:若直接位址的内容为“1”则转移,并且同时将该位清0,否则顺序执行。这条指令若是对I/O口某一位操作,也具有“读-改-写”功能。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-08

8051系列单片机汇编语言指令速查表

我有个这个 word文档 相当不错 我自己编程的时候用的

邮箱拿来我来发 ,你也可以自己网上下 

邮件已发

注意查收

第2个回答  2010-04-08
哪你也要告诉我油箱撒!我的QQ77572682 加我 我发给你!请注明 “51”本回答被提问者采纳
相似回答