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

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

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

3.1 指令格式

每一种系列的单片机都有自己的指令系统。因为单片机主要应用于测控领域,所以它的指令系统也具有这方面的特色。MCS-51系列(含其兼容系列)有111条指令,这111条指令是由表明操作性质的42个助记符结合对操作数的不同寻址方式形成的。指令格式往往以汇编语言格式给出:

[标号:]:指令行的符号地址,通常由英文字母和数字组成,开头必须是字母,标号后加冒号。

[助记符]:表示指令操作性质的符号,是由几个特定的英文字母表示的。[操作数]:表示参加指令规定操作的数据或数据所在的地址。指令不同,操作数个数也不同(0-3个)。在传送指令中,一般第一个操作数为目

的操作数,第二个为源操作数。

[;注释]:是对指令的说明,便于程序阅读。

标号可以根据需要设置,一般用于程序分支、转移目的地址处。助记符与操作数之间必须用空格分开,操作数之间用“,”号分隔,注释与指令用“;”号分隔,注释项可有可无。

3.2 MCS-51的寻址方式

所谓寻址方式,就是寻找操作数或操作数所在地址的方式。MCS-51共有7种寻址方式。

1. 立即寻址

指令中的操作数是立即数,对该操作数的寻址称之为立即寻址。在指令中,立即数加前缀“#”号。

例如:MOV A,#3CH;将立即数3CH送至累加器A中

该指令由助记符MOV和两个操作数组成,对第二个操作数#3C的寻址方式是立即寻址。在指令表中用#data表示立即数。

2. 直接寻址

如果指令中的操作数是参加操作的数据所在地址,那么对该操作数寻址称为直接寻址。在MCS-51中能进行直接寻址的地址空间是:内部数据空间的低128个RAM字节地址、21个特殊功能寄存器的字节地址。它们都是用8位地址表示的。

例如:MOV 30H,#4FH;将立即数4FH送入30H地址单元。

30H是内部128个RAM空间的30H单元,对该操作数寻址是直接寻址,对#4FH是立即寻址。

例如:MOV 0D0H,A;将累加器A中的内容传送到D0H地址中。

D0H是特殊功能寄存器PSW的字节地址,对它的寻址是直接寻址。本指

令也可写作MOV PSW ,A。

在指令表中,用direct表示操作数所在内部字节的地址。

3. 寄存器寻址

如果指令中某个操作数是用具有寄存器寻址功能的寄存器表示的,那么对该操作数的寻址称为寄存器寻址。在MCS-51中规定的具有寄存器寻址功能的寄存器有:A、AB(乘除指令用)、Rn(n=0~7)、DPTR。

例如:MOV A,#3FH;对第一个操作数A是寄存器寻址。指令编码74 3F。

MOV R1,A;对第一、二个操作数都是寄存器寻址。指令编码F9。

MUL AB;A×B → BA,对操作数AB是寄存器寻址。指令编码A4。

MOV DPTR,#6000H;对DPTR是寄存器寻址。指令编码90 60 00 寄存器寻址可以提高指令执行速度,缩短指令编码,凡寄存器寻址的操作数编码已隐含在操作码中了。

4. 寄存器间接寻址

如果用具有间址功能的寄存器内容作为操作数的地址来表示操作数,那么对该操作数的寻址就称为寄存器间接寻址。具有间接寻址功能的寄存器有R0、R1和DPTR,在指令中分别表示为@R0、@R1和@DPTR(即在寄存器名称前面加前缀标志“@”。可以用寄存器间接寻址的空间有:内部RAM空间和外部数据空间。内部RAM空间可用@R i进行寄存器间接寻址,外部数据空间,根据外部数据空间编址情况,可用@R i,或@DPTR进行寻址,对外部数据空间的寻址,只有寄存器间接寻址这一种寻址方式。

例如:对内部RAM空间进行寄存器间接寻址。

MOV @R0,A;(R0)←A

该指令对第一个操作数寻址是寄存器间接寻址,对第二个操作数寻址是寄

存器寻址,该指令的功能是:将累加器A 的内容传送给以R 0内容为地址的内部

RAM 单元。

空间

图3-1对内部RAM 的寄存器间接寻址

对外部数据空间寻址。如果外部数据空间采用16位二进制编码(用两个

字节表示地址,)一般采用@DPTR 进行间接寻址,DPTR 是16位寄存器。

例如:MOVX @DPTR ,A ;(DPTR)←A

该指令的功能是将累加器A 的内容,传送给以DPTR 内容为地址的外部数

据空间。如图3-2:

图3.2对外部数据空间寄存器间接寻址

对于用16位二进制编码的外部数据空间地址,如果只对低256字节寻址,

在高字节地址确定后,也可采用@R 0或@R 1进行间接寻址。

MOV P2, #2BH ; 由P2口输出确定外部数据空间高8位地址

MOV R 0, #01H ; R 0放入低8位地址。

MOVX @R 0,A ; 利用@R 0间接寻址外部数据空间的低8位地址。

对于只用8位二位进制编码的外部数据空间,直接利用@R 0或@R 1进行间

接寻址即可。

5. 变址寻址 DPTR A R 0

所谓变址寻址,就是以DPTR或PC的内容为基地址,以累加器A的内容为变地址,将基地址加上变地址的和作为目的地址而实现对操作数的寻址。该寻址方式只用于对程序空间寻址。常用于查表指令中。

例如:MOVC A,@A+DPTR; A←(A+DPTR)

该指令为单字节指令,指令代码为93H。如果DPTR=1000H且A=03H,则A+DPTP=1003H,1003H为外部程序空间的地址,将该地址中的数据传送给累加器A。操作如图3.3所示。

程序空间

图3-3执行MOVC A,@A+DPTR指令过程示意图例如:MOVC A,@A+PC; A ←(A+PC)

该指令为单字节指令,指令代码为83H,设其存放在程序空间的0F00H单元。PC的内容是该指令代码所在地址加1(PC指出下一条要执行指令的首地址),因此在执行该指令时,PC的内容是0F01H,如果A的内容为03H,那么该指令是将03+0F01=0F04H中的内容传送给累加A。其操作过程如图2-4所示。

图3-4执行MOVC A,@A+PC过程示意图

6. 相对寻址

相对寻址就是在执行含有相对转移功能的指令时,将当前PC的内容加上指令中所给出的偏移量,二者之和原码作为转移的目的地址。在这里,所谓当前PC的内容是指该指令后面的下一条指令的首地址。指令所给出的偏移量有正、有负,因此,用补码表示偏移量。因为一个字节的补码能表示的最大范围是+127~-128,所以相对寻址的最大范围是+127~ -128。零偏移量所对应的目的地址就是该指令后面的下一条指令的首地址。

7. 位寻址

位寻址是对片内RAM的位寻址区(20H~2FH,共16个单元128位)和可以进行位寻址的特殊功能寄存器进行位操作时的寻址方式。进位位C相当于位操作的累加器。位地址和内部字节地址虽然都用两位16进制表示,但在指令中是可以区分的。

例如:MOV A,20H;20H是字节地址

MOV C,20H;20H是位地址

JB 10H,rel; 10H是位地址

DJNZ 10H,rel; 10H是字节地址

七种寻址方式所对应的地址空间见表3-1。

3.3 指令系统:

MCS-51单片机指令系统共有111条指令,按其功能可以归纳为五类:数据传送类指令(29条)、算术运算类指令(24条)、逻辑运算类指令(24条)、控制转移类指令(17条)、位操作类指令(17条)。

3.3.1 数据传送类:

该类指令在程序编写中用的最多。掌握这类指令,要求对单片机内部RAM 空间、特殊功能寄存器以及外部数据、程序空间的分布有清楚的了解。在数据传送指令中,特别注意MOV、MOVX、MOVC三个助记符的区别。

MOV 用于单片机内部空间(内部RAM空间和特殊功能寄存器)的相互传送,而不能用于单片机内部与外部空间的数据的传送。

MOVX 用于累加器A与外部数据空间的数据传送。MCS-51单片机访问I/O采用的是存储器映象方式,因此,该助记符也用于对I/O 的

数据传送。

MOVC 该助记符是访问程序空间的唯一指令助记符,用于查表指令,表格存放在程序空间。

数据传送类指令可分为通用传送类指令、累加器专用传送类指令、堆栈操作指令。

1. 通用传送类指令

这类指令都是以MOV作为指令助记符,其功能是将源操作数所指定的内容传送给目的操作数所指定的单片式寄存器,并且源操作数内容不变。

指令指令码功能

MOV A,R n E8~EF A ←R n

MOV A,direct E5 direct A ←(direct)

MOV A,@R i E6/E7 A ←(R i)

MOV A,#data 74 data A ←立即数

在上述四条指令中,目的操作数都是累加器A,源操作数是以四种寻址方式产生的,其中Rn代表R0~R7,分别有8个指令码与其对应。Ri代表R0和R1,分别由两个指令码与其对应。一旦状态寄存器PSW的工作寄存器区选择位的值设定以后,那么R0~R7所对应的RAM字节地址就确定了,在不同程序段中使用不同寄存器区的R0~R7时,可以通过改变PSW的工作寄存器区选位来切换工作器

*

存器区。

上面三条指令的目的操作数都是寄存器Rn,源操作数是由寄存器寻址、直接寻址、立即寻址方式产生的。

MOV direct,A; F5 direct (direct) ← A

MOV direct,Rn; 88~8F direct (direct) ←Rn

MOV direct1,direct2; 85 direct2 direct1 (direct1) ←(direct2)

MOV direct,@Ri; 86~87 direct (direct) ←(Ri)

MOV direct,#data; 75 direct data (direct) ←立即数

上面5条指令的目的操作数都是直接地址,这直接地址direct,指的仅是内部前128RAM地址(MCS-52系列内部有256个字节RAM),和特殊功能寄存器的地址。对于MCS-52系列的256个字节RAM ,前128个RAM地址可用直接地址direct访问,而后面128个字节RAM用寄存器间接寻址访问,以避免和特殊功能寄存器寻址冲突。在上述5条指令中,尤其注意MOV direct1, direct2指令,其指令码书写顺序是85 direct2 direct1,例如:MOV 20H,30H指令的功能是将30H单元的内容传送给20H单元,其指令码是85 30 20。

MOV @Ri,A;F6~F7 (Ri)←A

MOV @Ri,direct;86~87 direct (Ri)←(direct)

MOV @Ri,#data;76~77 data (Ri)←立即数

上面三条指令,目的地址都是用寄存器间接寻址方法,而这方法只适用于对内部RAM区寻址。在52系列中有256个字节RAM,但后128字节(80H~FFH)的RAM用寄存器间接寻址,而共用这后128个字节逻辑地址的特殊功能寄存器只能采用直接寻址方式,以免冲突。

MOV DPTR,#data;90 data(h)data(l) ( DPTR) ←#data16 该指令是唯一的16 位数据传送指令,因为DPTR是16位的数据指针寄存器,它用来对外部空间寻址,在访问外部数据空间时,首先要将访问的外部数据空间的目的地址装入DPTR,在访问外部程序空间的表格时,要把表首地址装入

DPTR 。DPTR 映射在特殊功能寄存器中,是DPH (高8位)和DPL (低8位)两8位特殊功能寄存器组成的。将一个16位数的高8位和低8位分别装入DPH 和DPL 与将这个16位数装入DPTR 是等效的,在应用中可灵活应用。

2. 交换指令

指令 指令码 功能

XCH A ,Rn ; C8~CF A Rn XCH A ,direct ; C5 direct A (direct) XCH A ,@Ri ; C6~C7 A (Ri)

XCHD A ,@Ri ; D6~D7 A 的低4位 (Ri )的低4位 SW AP A ; C4 A 的低4位 A 的高4位

交换指令就是内容互换,在第四条指令中,二者低4位互换,高4位保持不变,第5条指令是累加器内容自身的高4位和低4位互换。例如若原来A 中内容是38H ,经过SW AP A 指令作用后,A 的内容变为83H 。

3. 栈操作指令

PUSH direct ; C0 direct SP ← SP+1

(SP) ←(direct)

POP direct ; D0 direct (direct )←(SP )

SP ←SP-1

第一条指令为入栈操作指令,计算机执行此指令时,首先将堆栈指针SP 的内容加1,然后将直接地址(direct )的内容压入当前SP 所指的栈顶单元。

第二条指令为出栈指令。当计算机执行到这条指令时,首先将堆栈指针SP 所指的当前栈顶单元的内容弹出,并传送到指令中指定的直接地址单元中去。然后将SP 的内容减1。

4. 累加A 与外部数据空间、程序空间传送数据指令

MOVX A , @DPTR ; E0 A ←(DPTR ) MOVX @DPTR , A ; F0 (DPTR)外← A MOVX A , @Ri ; E2~E3 A ←(Ri)外

MOVX @Ri ,A ; F2~F2 (Ri)外←A

这4条指令是51单片机对外部数据空间的读、写指令。因此,指令助记符←

→← →

←→←

→← ←

为MOVX。前两条指令用DPTR对外部数据空间进行间接寻址。第一条指令是读外部数据空间指令,在执行该指令过程中,对外部数据空间读RD有效。第二条指令是写外部数据空间指令,在执行该指令过程中,对外部数据空间写WR 有效。第三、第四条指令是用Ri对外部数据空间进行间接寻址。当外部数据空间采用8位地址编址或用8位地址访问较方便时,可采用该两条指令访问。当外部数据空间用16位地址编址时,用该两条指令寻址前,需将高8位地址以I/O 方式从P2口输出。

例如:若外部数据空间存贮单元地址是1458H,访问该单元,将其内容读入A.。

方法1:MOV DPTR,#1458H

MOVX A,@DPTR

方法2:MOV P2,#14H ;将高8位地址→P2

MOV R0, #58H ;低8位地址→R0

MOV A,@R0 ;指定的外部RAM内容→ A MOVC A,@A+DPTR;93 A←(A+DPTR)

MOVC A,@A+PC;83 A←(A+PC)

上述两条指令是访问程序空间指令,也称查表指令,表格作为程序的一部分,放在程序空间。第一条指令所查表格所在的位置与指令所在位置没有直接关系,只要将表首地址放入DPTR,与表首地址的偏移量(本指令A中的偏移量为正数)放入A。

第二条指令,表格所在位置与该指令所在位置有关,指令中PC的内容是该指令所在地址加1。所以,使用该指令查表的表格,一般从该指令所在地址的下一个相邻地址放置,也可以修正A中的数字,使表格下移。在灵活性上不如用第一条指令。

3.3.2 算本运算类指令

MCS-51单片机算术运算类指令包括加法指令、带进位的加法指令、带借位的减法指令、乘法指令和除法指令。

1. 加法类指令

(1) 加法指令

ADD A,Rn 28~2F A←Rn

ADD A,direct 25 direct A←A+(direct)

ADD A,@Ri 26~27 A←A +(Ri)

ADD A,#data 24 data A←A + #data

上面四条指令是将累加器A的内容和工作寄存器Rn的内容、直接地址单元中的内容、由Ri间接寻址内部RAM单元的内容以及立即数相加,所得的和在存入到累加器A中。

上述将影响AC、CY、OV和P标志位。例如在执行上述指令时,第3位向第4位有进位,则将AC置1,否则清0;第7位向上有进位,则将CY置1,否则清0;最高位向上的进位和次高位向最高的进位相异或若为1,则置OV为1,否则清0;同样对P标志的影响也是如此,若相加后A中1的个数为奇数,则将P置1,否则清0。

(2) 带进位的加法指令

ADDC A,Rn 38~3F A←A +Rn+C

ADDC A,direct 35 direct A←A +(direct) + C

ADDC A,@Ri 36~37 A←A +(Ri) +C

ADDC A,#data 34 data A←A +#data+ C

这四条带进位的加法指令是将累加器A的内容加上源操作数的内容再加上进位位内容。最后将和存于累加器A中。本指令将影响AC、CY、OV和P标志位。

(3) 加1指令

INC A 04 A←A +1

INC Rn 08~0F Rn←Rn+1

INC direct 05 direct (direct)←(direct)+1

INC @Ri 06~07 (Ri)←(Ri)+1

INC DPTR A3 DPTR←DPTR+1

上述指令可完成对累加器A、工作寄存器Rn、直接地址单元中的内容及由Ri间接寻址的内部RAM单元中的内容加1,并将结果存入原单元中。其最后一条指令是数据指针DPTR加1指令,这条指令为单片机访问外部数据空间提供了很大方便。上述指令只有INC A 指令影响标志位P,其它指令都不影响标志位。

(4) 十进制调整指令

DA A D4 十进制加法调整指令

本指令是对累加器A进行十进制加法的调整指令。两个压缩型BCD码按二进制做完加法之后,必须通过本指令进行调整,才能得到和的压缩型BCD码。本指令的调整规则如下:经加法运算之后,若累加器A的低4位大于9或AC=1(有

半进位),则累加器A的内容加6;若累加器A的高4位大于9或CY=1(有进位),则加60H进行修正,如果上述二种情况都具备,则加66H进行修正。本指令影响CY标志位。但是它对CY的影响是:若最高位向上有进位,则将CY置1,否则保留CY的原来状态。

应当注意:该指令不能简单地把十六进制数调整成BCD码,也不能用于减法的十进制调整。该指令用在加法指令之后,并且参加加法运算的数必须是BCD 数。

例如:若累加器A原BCD码为30,即30H。执行下列指令:

ADD A ,# 99H

DA A

执行结果:累加器A的内容为29H,同时进位标志位CY=1,即所得十进制数为129,若不计进位位内容,和数为29。相当于30-1,因此可以得出结论:将十进制数加99,相当于减1,条件是不计进位位内容。因此,可利用上述二条指令,完成BCD码减1操作。

2. 减法指令

(1)带借位减法指令

SUBB A,Rn 98~9F A←A-Rn-C

SUBB A,direct 95 direct A←A-(direct)-C

SUBB A,@Ri 96~97 A←A-(Ri)-C

SUBB A,#data 94 data A←A-#data-C

上述四条指令是先将累加器A的内容减去操作数的内容、再减C最后将差存于累加器A中。上述指令将影响AC、CY、OV和P标志位。在执行上述指令时,若第3位向上有错位,则置AC为1,否则清0;若第7位向上有借位,则置CY为1,否则清0;若最高位向上的借位和次高位的借位相异或为1 ,则置OV位为1,否则清0;若相减累加器A中1的个数为奇数,则置P为1,否则清0。

(2)减1指令

DEC A 14 A←A-1

DEC Rn 18~1F Rn←Rn-1

DEC direct 15 direct (direct)←(direct)-1

DEC @Ri 16~17 (Ri)←(Ri)-1

上面四条指令是分别将累加器A的内容,工作寄存器Rn的内容、直接地址direct中的内容以及由间接寻址Ri所指定内部RAM的内容减1,再将结果存入到原单元中。DEC A影响P,其它指令不影响标志位。

不论是加1指令还是减1指令,需注意,当使用这些指令对单片机四个I/O 口进行操作时,是通过读——修改——写操作。即读口锁存器内容,加1或减1,然后将结果写入到该口的锁存器中。

3. 乘法和除法指令

(1)乘法指令

MUL AB A4 A ←A * B 积的低8位

B ← A * B 积的高8位

本指令是将累加器A和寄存器B中两个8位的无符号数相乘,所得16位乘积的低8位存于A中,高8位存于B中。如果乘积大于255,则将OV标志位置1,否则清0。CY标志位总是清0。

例如:若A=50H,B=A0H

执行下述指令

MUL AB

执行结果:B=32H, A=00H, OV=1,(CY)=0

(2)除法指令

DIV AB 84 A ← A / B的商

B ← A / B的余数

本指令是将累加器A的8位无符号数除以寄存器B的8位无符号数,所得整数商存于累加器A中,整数余数存于寄存器B中。

在执行本条指令时,若除数为00H,即寄存器B中的内容为00H时,那么执行本指令之后累加器A和寄存器B中的内容不确定,并且将溢出标志位置1。

该指令对CY标志清0。

例如:若A=FBH, B=12H

执行除法指令

DIV AB

执行结果:A=0DH,B=11H

OV=CY=0

3.3.3逻辑操作指令

MCS—51有专门对位和专门对字节的逻辑操作指令,关于位操作指令在最后专门讲述。对于字节操作又分为单操作数逻辑指令和双操作数逻辑指令。

1. 单操作数逻辑操作指令

(1)累加器A 清0指令

CLR A E4 A ← 0

其功能是将累加器A 清0。

(2)累加器A 取反指令

CPL A F4 A ← A

本条指令是将累加器A 中各位分别求反。

(3)累加器A 循环左移指令

RL A 23

本条指令是将累加器A 中的各位依次

循环左移一位,并且A 7位移到A 0位。

(4)累加器

A 连同进位位CY 循环左移指令

RLC A

33 An+1←An, A 0 ← C

C ←A 7

此指令是累加器A 连同进位位CY

循环左移一位,其A7位移入到CY 位,

CY 位移入到A0位。

(5)累加器A 循环右移指令

RR A 03 An ←An+1, A 7←A 0

本指令是将累加器A 中各位循环

右移一位,其最低位A 0位移到A 7位。

(6)累加器A 连同进位位CY 循环右移指令

RRC A 13 An ← An+1, A 7← CY

C ←A 0

本指令是将累加器A 连同进位位CY 依次

循环右移一位,其CY 移到A 7,A 0移到CY 位。2. 双操作数逻辑操作指令

(1)逻辑与操作指令

ANL A,Rn 58~5F A←A∧Rn

ANL A,direct 5 5 ditect A←A∧(direct)

ANL A,@Ri 57 A←A∧(Ri)

ANL A,#data 54 data A←A∧#data

ANL direct, A 52 direct (direct)←(direct)∧A

ANL direct, #data 53 direct data (direct)←(direct)∧#data

在上述逻辑与指令中,前四条指令是将工作寄存器Rn中的内容、直接地址单元中的内容、由间接寻址Ri所指定的内部RAM单元中的内容及立即数与累加器A中的内容按位进行与运算,结果存于累加器A中。最后二条指令是分别将累加器A中的内容及立即数和直接地址单元中的内容按位进行与运算,结果存放在直接地址单元中。

(2)逻辑或操作指令

ORL A,Rn 48~4F A←A∨Rn

ORL A, direct 45 dircet A←A∨(direct)

ORL A,@ Ri 46~47 A←A∨(Ri)

ORL A, #data 44 data A←A∨#data

ORL direct, A 42 direct (direct)←(direct)∨A

ORL direct, #data 43 direct data (direct)←(direct)∨#data

在上面逻辑或指令中,是将目的操作数的内容和源操作数的内容按位进行或运算,其运算结果存于累加器A中或直接地址单元中。

(3)逻辑异或指令

XRL A,Rn 68~6F A←A Rn

XRL A,direct 65 direct A←A direct)

XRL A,@ Ri 66~67 A←(Ri)

XRL A,#data 64 data A←#data

XRL direct, A 64 direct (direct)←(direct A

XRL direct,#data 63 direct data (direct)←(direct#data

在上面逻辑异或指令中,是将目的的操作数的内容和源操作数的内容按位进行异或运算,运算结果存于累加器A中或直接地址单元中。

在MCS-51单片机逻辑操作指令中,除带进位的循环移位指令外,所有其它指令都不影响标志位(CY、AC、OV)。带进位的循环移位指令影响标志位CY,由移入CY中的值而定。

对于逻辑与指令、或指令及异或指令,若指令中的目的操作数为单片机某一口地址时,是将该口锁存器的内容和指令中源操作数的内容进行指令指定的逻辑操作,并将结果写入到该口锁存器中。

例 1.若A=C5H,CY=0,执行下述指令

RRC A

执行结果:A=62H,CY=1

例 2.要求将累加器A的低5位传送到单片机P1口的低5位,但不能影响P1口的高3位。

ANL A, #1FH

ORL P1, A

3.3.4控制转移类指令

MCS-51单片机控制转移指令包括无条件转移指令、条件转移指令和循环转移指令。

1. 无条件转移指令

无条件转移指令包括无条件调用、返回指令和转移指令。

(1)绝对调用指令

ACALL addrll *1 目标低8位地址PC←PC+2

SP←SP+1

(SP)←PC0-7

SP←SP+1

(SP)←PC8-15

PC0-10←addr0-10

PC11-15不变在64K程序地址空间,从低到高依次可以划分为32个2K区段:

0000H—07FFFH、0800H—0FFFH、1000H—17FFH、…、F000H—F7FFH、

F8000H—FFFFH。每2K区段是绝对的、固定的。子程序绝对调用指令AcaLL,只能在同一2K区段内实现子程序调用,而不能跨不同的2K区段调用。2K地址是绝对的地址空间,而不是相对的2K地址空间,所以该指令称绝对子程序调用指令。在同一2K区段内,该指令程序的指令码生成与目标地址低8位和目标地址的页号有关。所谓页号是指高8位地址的低4位码。该指令的指令码是由两个字节组成的,第一个字节与目的地址的页号有关,见表3-2。指令码的第二字节是目的地址的低8位。

* 本页号是指在同一2K区段内的子程序首地址高8位中的低4位码。

例1:ORG 7900H 指令码

ACALL 7E30H D1 30

例2:ORG 2600H

ACALL 2800H ;2600H和2800H不在同-2K

区段内该指令跨越2K区段,

错误。

(2)长调用指令

LCALL addr16 12 a15-8 a7-0 PC←PC+3

SP←SP+1

(SP)←PC0-7

SP←SP+1

(SP)←PC8-15

PC←addr16 子程序长调用指令的调用范围在64K字节之内,所以子程序可以设置在程序空间中的任何位置上。长调用指令是三字节指令,第一字节为操作码,第二字节为子程序入口地址的高8位,第三字节为子程序入口地址低8位。计算机在执行长调用指令时,首先将PC的当前内容压入堆栈进行保护,然后将子程序的入口地址装入PC,计算机开始去执行子程序。

(3)子程序返回指令

RET 22 PC8-15←(SP)

SP←SP-1

PC0-7←(SP)

SP←SP-1

子程序返回指令是一个单字节指令,它是子程序中设置的最后一条指令。当计算机执行到该指令时,把原来保护的断点地址从堆栈中弹出先高后低,并装入到程序计数器PC中,使程序返回到调用该子程序的主程序中去,从断点继续向下执行。

(4)中断子程序返回指令

RETI 32 PC8-15←(SP)

SP←SP-1

PC0-7←(SP)

SP←SP-1

该指令是中断返回指令,它是中断服务子程序中所设置的最后一条指令。就返回原断点所执行的操作来讲,它和子程序返回指令是相同的。但是这两条指令的功能却有很大差别。当计算机执行中断返回指令时,除了恢复断点地址之外,还要恢复中断逻辑,以接受新的中断请求。因此,中断返回指令必须使用RETI,而不能用子程序返回指令RET来代替。

(5)绝对转移指令

AJMP addrll * 1 目的低8位地址PC←PC+2

PC←addr0-10

PC11-15不变绝对转移指令AJMP和前面ACALL一样,只限定在绝对的2K区段内转移,而不能跨越绝对2K区段。AJMP指令码的生成,第一字节与转移目的地址页号有关,见表3-3,第二字节由目的地址低8位生成。

* 本表页号是指在同一2K区段内的目标地址高8位中的低4位码。

例1:ORG 0500H 指令码

AJMP 0703H ;E1 03

例2:ORG 0700H

AJMP 0832H ;该指令跨越2K区段,错误。

(6)长转移指令

LJMP addrl6 02 H L PC←addr0-16

该指令提供16位目标地址,所以程序可以转移64K字节程序存贮器地址的任何单元。该指令为三字节指令,其第一字节为指令操作码,第二和第三字节为转移的目标地址,地址高8位在前,低8位在后,计算机执行本条指令时,就将指令中给定的16位转移目标地址装入PC,从而使程序无条件转向指定目标地址去执行。

(7)相对转移指令

SJMP rel 80 rel PC←PC+2

PC←PC+ rel

该指令是双字节相对转移指令。指令的第一字节为指令操作码,第二字节提供的是相对偏移量,即转移的目标地址减去PC的当前内容所得差的补码。因此该指令可实现以PC当前内容为起始地址的+127~-128字节范围内转移。计算机在执行这条指令时,将PC的当前内容加上指令中第二字节给定的相对偏移量,而形成转移的目标地址。

(8)间接转移指令

JMP @A+DPTR 73 PC←A+DPTR

本指令是单字节间接转移指令。在计算机执行这条指令时,是将累加器A 中的8位无符号数和16位数据指针寄存器DPTR中的内容相加,其和装入程序计数器PC,从而实现无条件间接转移。

(9)空操作指令

NOP 00 PC←PC+1

本指令为单字节指令,当计算机执行该指令时,除占用一个机器周期时间和将PC内容加1使程序得以执行下一条指令外,并不进行任何其他操作。

例1:若SP=53H,子程序SUBP入口地址为1FF0H,而子程序调用指令ACALL SUBP的首地址为1800H,即:

ORG 1800H

ACALL SUBP

·

·

·

ORG 1FF0H

SUBP:MOV R2,#00H

·

·

·

RET

计算机执行ACALL SUBP指令后,SP=55H PC=1FF0H

ACALL SUBP指令码为:F1H F0H

例2.若程序存贮器中,指令LJMP $O的首地址为1000H,其转向的目标地址为1234H,执行下列程序:ORG 1000H

LJPM $O

·

·

·

ORG 1234H

$O:MOV A, R2

·

·

·

此时指令LJPM $O的指令码为:02H 12H 34H。

例3.若程序存贮器中,指令SJMP $O的首地址为13A0H,其转向的目标地址为1372H,若执行程序:

·

·

·

OGR 1372H

$O:MOV A, @R0

·

·

·

OGR 13A0H

SJMP $O

·

·

·

此时指令SJMP $0的指令码是:80H DOH

2.条件转移指令

(1)跳转指令

JZ rel 60 rel PC←PC+2

若A=0,则PC←PC+ rel

JNZ rel 70 rel PC←PC+2

若A≠0,则PC←PC+ rel

上述二条指令分别对累加器A的内容为零或不为零进行检测并转移。当不满足各自条件时,程序继续向下执行。当各自条件满足时,则程序转移到指定的目标地址。其目标地址是计算机执行该条指令时PC的当前内容加上指令中第二字节指定的相对偏移量,所以指令转移的目标地址应位于以PC当前内容为起始地址的+127~-128字节范围之内。

(2)比较转移指令

CJNE A,direct ,rel B5 direct rel 不相等转移

若A=(direct),则PC←PC+3,C←0

若A>(direct),则PC←PC+3+ rel,C←0

若A<(direct),则PC←PC+3+ rel,C←1

CJNE A,#data ,rel B4 data rel 不相等转移

若A=data,则PC←PC+3,C←0

若A>data,则PC←PC+3+ rel,C←0

若A

CJNE Rn, #data ,rel B8~BF data rel 不相等转移

若Rn=data,则PC←PC+3,C←0

若Rn>data,则PC←PC+3+ rel,C←0

若Rn

CJNE @Ri, #data ,rel B6~B7 data rel 不相等转移

若(Ri)=data,则PC←PC+3,C←0

若(Ri)>data,则PC←PC+3+ rel,C←0

若(Ri)

本类指令含有三个操作数。第一操作数为目的操作数,第二操作数源操作数,第三操作数为转移目的地址。指令功能是对目的操作数的内容和源操作数的内容

单片机汇编语言查表实例

下面是汇编语言实现楼宇对讲功能的查表实例: 当单片机外部系统发来不同的指令时,便启动查表功能,实现不同的操作,如单片机接收到的指令保存在RXD中,RXD+1保存指令终止符号,如要实现某个操作,外部发来0XA0操作符到RXD中,0XFF到RXD+1中,即开启查表,开始执行下列程序: MOV A,(RXD_Buf+1) CJNE A,RXD_Buf,Exit_Receive_Msg_Proc如果为退出指令,则退出 MOV B,RXD_Buf JmpX_By_Ins Division_Instruction,Run_Instr_Addr子程序 ;================================== Division_Instruction: DB00H,01H,03H,05H,06H,07H,09H,0AH,13H,14H,15H,16H DB28H,29H,2AH,2CH,2EH,30H,31H,33H,35H,FAH;FLAG OF END ;================================== Run_Instr_Addr: LJMP Call_By_Manger;00H; LJMP Put_Down_Hook;01H; LJMP Put_Off_Hook;03H; LJMP Disable_Calling;05H; LJMP Enable_Get_Msg;06H; LJMP There_Are_Msg;07H; LJMP Call_By_Door;09H; LJMP FeedBack_Alarm;0AH LJMP Put_Off_Hook_For_Out;13H; LJMP Set_Up_Fortify_By_GLC;14H; LJMP Disable_Alarm_By_GLC;15H; LJMP Reset_Divi_Password;16H; LJMP Calling_By_T_Main;28H; LJMP Hook_On_By_Brother;29H; LJMP Hook_Off_By_Brother;2AH; LJMP Hook_On_By_T_Main;2CH; LJMP Calling_By_Brother;2EH; LJMP Define_Baud_Rate;30H LJMP GLC_Proced_Alarm;31H LJMP Graphic_Msg_In_Main;33H LJMP Rst_Standart_Rate;35H Return_Main_Body_For_Divi_Ins: LJMP Exit_Receive_Msg_Proc;FAH JmpX_By_Ins MACRO I_Table,F_Table MOV DPTR,#I_Table将指令表首地址赋给DPTR LCALL DPTR_Comp_B调用 MOV A,R05此时R05表示查找到的位置 MOV B,#03LJMP指令占三个字节 MUL AB

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

MCS-51指令表

MCS-51单片机指令汇总表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1 XCH A, @Ri 间接RAM 和累加器交换 1 1 XCHD A, @Ri 间接RAM 和累加器交换低4 位字节 1 1 (算术运算类指令) INC A 累加器加1 1 1 INC Rn 寄存器加1 1 1 INC direct 直接地址加1 2 1 INC @Ri 间接RAM 加1 1 1 INC DPTR 数据指针加1 1 2 DEC A 累加器减1 1 1 DEC Rn 寄存器减1 1 1

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

51单片机指令表

此表主要是为了方便大家查阅每条指令的作用,写法以及字节数和周期数,建议大家保存为书签。 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器传送到累加器 1 1 MOV A,direct 直接地址传送到累加器 2 1 MOV A,@Ri 累加器传送到外部RAM(8 地址) 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器传送到寄存器 1 1 MOV Rn,direct 直接地址传送到寄存器 2 2 MOV Rn,#data 累加器传送到直接地址 2 1 MOV direct,Rn 寄存器传送到直接地址 2 1 MOV direct,direct 直接地址传送到直接地址 3 2 MOV direct,A 累加器传送到直接地址 2 1 MOV direct,@Ri 间接RAM 传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 直接地址传送到直接地址 1 2 MOV @Ri,direct 直接地址传送到间接RAM 2 1 MOV @Ri,#data 立即数传送到间接RAM 2 2 MOV DPTR,#data16 16 位常数加载到数据指针 3 1 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8 地址)传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16 地址)传送到累加器 1 2 MOVX @Ri,A 累加器传送到外部RAM(8 地址) 1 2 MOVX @DPTR,A 累加器传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址压入堆栈 2 2 POP direct 直接地址弹出堆栈 2 2 XCH A,Rn 寄存器和累加器交换 1 1

MCS-51单片机指令系统

一、填空题 1、寻址是指( )。80C51单片机指令系统有7种寻址方式,分别是:( )。 2、访问内部RAM可以采用的两种寻址方式为:( )和( )。 3、MCS-51单片机指令的基本格式为:( )。 4、Rn代表( ),其中n的取值范围是( );Ri代表( ),其中i的取值范围是( )。@Ri的含义是( )。 5、在单片机指令中,30H和#30H的区别是( );R0和@ R0的区别是( );A←R1 和A←(R1) 的区别是( );DPTR和@DPTR的区别是( )。 6、汇编是指由( )“翻译”为( )的过程。 7、常用的伪指令有8条,试写出其中的5条( )、( )、( )、( )、( )。 8、LJMP指令的转移范围是(); AJMP指令的转移范围是(); SJMP指令的转移范围是()。 二、简答题 1、指出下列指令中的操作数的寻址方式。 (1)MOV R0,#30H (2)MOV A,30H (3)MOV A,@R0 (4)MOV @R0,A (5)MOVC A,@A+DPTR (6)CJNE A,#00H,30H (7)MOV C,30H (8)MUL AB (9)MOV DPTR,#1234H (10)POP ACC 2、80C51指令中,常用字符代表立即数或存储单元,试判断下列字符ABC的含义。(1)MOV A,#ABC (2)MOV A,ABC (3)MOV C,ABC (4)MOV DPTR,#ABC 3、若R0=11H,(11H)=22H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV A,@R0 (3)MOV A,33H (4)MOV A,#33H 4、若A=11H,(11H)=22H,B=44H,写出执行下列指令后的结果。 (1)MOV R1,A (2)MOV R3,11H (3)MOV R3,#11H (4)MOV R3,B 5、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV 40H,A (2)MOV 40H,R0 (3)MOV 40H,@R0 (4)MOV 40H,22H (5)MOV 40H,#22H 6、若A=11H,R0=33H,(22H)=66H,(33H)=44H,写出执行下列指令后的结果。 (1)MOV @R0,A (2)MOV @R0,22H (3)MOV @R0,#22H 7、若 A=11H,R0=33H,B=44H,(11H)=22H,(22H)=66H,(33H)=44H,分别写出执行下列指令后的结果。 (1)MOV A,R0 (2)MOV B,#55H (3)MOV 40H,@R0 (4)MOV 11H,22H (5)MOV @R0,22H 8、试将30H、R7、B、A、PSW、DPTR中的数据依次压入堆栈。并指出每次堆栈操作后,SP=?、(SP)=?设原SP=60H,当前工作寄存器区为0区,(30H)=11H,R7=22H,B=33H,A=44H,PSW=55H,DPTR=6677H。 9、若A=78H,R0=34H,(34H)=DCH,(56H)=ABH,求分别执行下列指令后A和Cy中的数据。 (1)ADD A,R0 (2)ADDC A,@R0 (3)ADD A,56H (4)ADD A,#56H

常见51单片机指令及详解

常见51单片机指令及详解 数据传递类指令 (1)以累加器为目的操作数的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一条指令中,Rn代表的是R0-R7。第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。第四条指令是将立即数data送到A中。 下面我们通过一些例子加以说明: MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。 MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。 MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。 MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。 (2)以寄存器Rn为目的操作的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。 (3)以直接地址为目的操作数的指令 MOV direct,A 例: MOV 20H,A MOV direct,Rn MOV 20H,R1

MOV direct1,direct2 MOV 20H,30H MOV direct,@Ri MOV 20H,@R1 MOV direct,#data MOV 20H,#34H (4)以间接地址为目的操作数的指令 MOV @Ri,A 例:MOV @R0,A MOV @Ri,direct MOV @R1,20H MOV @Ri,#data MOV @R0,#34H (5)十六位数的传递指令 MOV DPTR,#data16 8051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。反之,如果我们分别向DPH,DPL送数,则结果也一样。如有下面两条指令:MOV DPH,#35H,MOV DPL,#12H。则就相当于执行了MOV DPTR,#3512H。 累加器A与片外RAM之间的数据传递类指令 MOVX A,@Ri MOVX @Ri,A MOVX #9; A,@DPTR MOVX @DPTR,A 说明: 1)在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM 的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。 2)要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以

51单片机指令表汇总

51单片机指令表 助记符指令说明字节数周期数 (数据传递类指令) MOV A,Rn 寄存器内容传送到累加器 1 1 MOV A,direct 直接地址内容传送到累加器 2 1 MOV A,@Ri 间接RAM内容传送到累加器 1 1 MOV A,#data 立即数传送到累加器 2 1 MOV Rn,A 累加器内容传送到寄存器 1 1 MOV Rn,direct 直接地址内容传送到寄存器 2 2 MOV Rn,#data 立即数传送到寄存器 2 1 MOV direct,Rn 寄存器内容传送到直接地址 2 2 MOV direct,direct 直接地址传内容传送到直接地址 3 2 MOV direct,A 累加器内容传送到直接地址 2 1 MOV direct,@Ri 间接RAM内容传送到直接地址 2 2 MOV direct,#data 立即数传送到直接地址 3 2 MOV @Ri,A 累加器内容传送到间接RAM 1 1 MOV @Ri,direct 直接地址内容传送到间接RAM 2 2 MOV @Ri,#data 立即数传送到间接RAM 2 1 MOV DPTR,#data16 16 位地址传送到数据指针 3 2 MOVC A,@A+DPTR 代码字节传送到累加器 1 2 MOVC A,@A+PC 代码字节传送到累加器 1 2 MOVX A,@Ri 外部RAM(8位地址)内容传送到累加器 1 2 MOVX A,@DPTR 外部RAM(16位地址)内容传送到累加器 1 2 MOVX @Ri,A 累加器内容传送到外部RAM(8位地址) 1 2 MOVX @DPTR,A 累加器内容传送到外部RAM(16 地址) 1 2 PUSH direct 直接地址内容压入堆栈 2 2 POP direct 堆栈内容弹出到直接地址 2 2 XCH A,Rn 寄存器和累加器交换 1 1 XCH A, direct 直接地址和累加器交换 2 1

MCS-51单片机指令周期表

MCS-51单片机指令周期表 mcs-51指令速查表 类别指令格式功能简述字节数周期MOV A,Rn寄存器送累加器11 MOV Rn,A累加器送寄存器11 MOV A,@Ri内部RAM单元送累加器11 MOV@Ri,A累加器送内部RAM单元11 MOV A,#data立即数送累加器21 MOV A,direct直接寻址单元送累加器21 MOV direct,A累加器送直接寻址单元21 MOV Rn,#data立即数送寄存器21 MOV direct,#data立即数送直接寻址单元32 MOV@Ri,#data立即数送内部RAM单元21 MOV direct,Rn寄存器送直接寻址单元22 数据传送类指令期 MOV Rn,direct直接寻址单元送寄存器22 MOV direct,@Ri内部RAM单元送直接寻址单元22 MOV@Ri,direct直接寻址单元送内部RAM单元22 MOV direct2,direct1直接寻址单元送直接寻址单元32 MOV DPTR,#data1616位立即数送数据指针32 MOVX A,@Ri外部RAM单元送累加器(8位地址)12 MOVX@Ri,A累加器送外部RAM单元(8位地址)12 MOVX A,@DPTR外部RAM单元送累加器(16位地址)12 MOVX@DPTR,A累加器送外部RAM单元(16位地址)12 MOVC A,@A+DPTR查表数据送累加器(DPTR为基址)12 MOVC A,@A+PC查表数据送累加器(PC为基址)12 XCH A,Rn累加器与寄存器交换11 算术运算类指令 XCH A,@Ri累加器与内部RAM单元交换11 XCHD A,direct累加器与直接寻址单元交换21 XCHD A,@Ri累加器与内部RAM单元低4位交换11 SWAP A累加器高4位与低4位交换11 POP direct栈顶弹出指令直接寻址单元22 PUSH direct直接寻址单元压入栈顶22 ADD A,Rn累加器加寄存器11 ADD A,@Ri累加器加内部RAM单元11 ADD A,direct累加器加直接寻址单元21 ADD A,#data累加器加立即数21 ADDC A,Rn累加器加寄存器和进位标志11 ADDC A,@Ri累加器加内部RAM单元和进位标志11

51单片机指令集

51单片机指令集.txt我这辈子只有两件事不会:这也不会,那也不会。人家有的是背景,而我有的是背影。肉的理想,白菜的命。肉的理想,白菜的命。白马啊你死去哪了!是不是你把王子弄丢了不敢来见我了。MCS-51单片机的指令集 1、数据传送类指令 助记符功能说明字节数振荡周期 MOV A,Rn 寄存器内容送入累加器 1 12 MOV A,direct 直接地址单元中的数据送入累加器 2 12 MOV A,@Ri 间接RAM中的数据送入累加器 1 12 MOV A,#data8 8位立即数送入累加器 2 12 MOV Rn,A 累加器内容送入寄存器 1 12 MOV Rn,direct 直接地址单元中的数据送入寄存器 2 24 MOV Rn,#data8 8位立即数送入寄存器 2 12 MOV direct,A 累加器内容送入直接地址单元 2 12 MOV direct,Rn 寄存器内容送入直接地址单元 2 24 MOV direct,direct 直接地址单元中的数据送入直接地址单元 3 24 MOV direct,@Ri 间接RAM中的数据送入直接地址单元 2 24 MOV direct,#data8 8位立即数送入直接地址单元 3 24 MOV @Ri,A 累加器内容送入间接RAM单元 1 12 MOV @Ri,direct 直接地址单元中的数据送入间接RAM单元 2 24 MOV @Ri,#data8 8位立即数送入间接RAM单元 2 12 MOV DPTR,#data16 16位立即数地址送入地址寄存器 3 24 MOV A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@A+PC 以PC为基地址变址寻址单元中的数据送入累加器 1 24 MOV A,@Ri 外部RAM(8位地址)送入累加器 1 24 MOV A,@DPTR 外部RAM(16位地址)送入累加器 1 24 MOV @Ri,A 累加器送入外部RAM(8位地址) 1 24 MOV @DPTR,A 累加器送入外部RAM(16位地址) 1 24 PUSH direct 直接地址单元中的数据压入堆栈 2 24 POP DIRECT 堆栈中的数据弹出到直接地址单元 2 24 XCH A,Rn 寄存器与累加器交换 1 12 XCH A,direct 直接地址单元与累加器交换 2 12 XCH A,@Ri 间接RAM与累加器交换 1 12 XCHD A,@Ri 间接RAM与累加器进行低半字节交换 1 12 2、算术操作类指令 助记符功能说明字节数振荡周期 ADD A,Rn 寄存器内容加到累加器 1 12 ADD A,direct 直接地址单元加到累加器 2 12 ADD A,@Ri 间接RAM内容加到累加器 1 12 ADD A,#data8 8位立即数加到累加器 2 12 ADDC A,Rn 寄存器内容带进位加到累加器 1 12

51单片机111条指令

51单片机111条指令一览表 指令字节周期动作说明 算数运算指令 1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器13.INC A 1 1 将累加器的值加1 14.INC Rn 1 1 将寄存器的值加l 15.INC direct 2 1 将直接地址的内容加1 16.INC @Ri 1 1 将间接地址的内容加1 17.INC DPTR 1 1 数据指针寄存器值加1 说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位 18.DEC A 1 1 将累加器的值减1 19.DEC Rn 1 1 将寄存器的值减1 20.DEC direct 2 1 将直接地址的内容减1 21.DEC @Ri 1 1 将间接地址的内容减1 22.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器 说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0 23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器 说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0 24.DA A 1 1 将累加器A作十进制调整, 若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6 若(A) 7-4>9或(C)=1,则(A) 7-4←(A)7-4+6 逻辑运算指令 25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器 26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器 27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结

)1MCS51单片机的指令格式中操作码与操作数之间必须用.

第2章汇编语言----智能电子产品的指令系统 判断题 ()1.MCS—51单片机的指令格式中操作码与操作数之间必须用“,”分隔。 ()2.MCS—51指令:MOV A,#40H ;表示将立即数40H 传送至A 中。 ()3.MCS—51指令:MOV A,@R0 ;表示将R0指示的地址单元中的内容传送至A 中。()4.MCS—51 指令:MOVX A,@DPTR ;表示将DPTR 指示的地址单元中的内容传送至A 中。 ()5.MCS—51 的数据传送指令是把源操作数传送到目的操作数,指令执行后,源操作数改变,目的操作数修改为源操作数。 ()6.MCS—51指令中,MOVX 为片外RAM 传送指令。 ()7.MCS—51指令中,MOVC 为ROM 传送指令。 ()8.将37H 单元的内容传送至A的指令是:MOV A,#37H。 ()9.MCS—51指令中,16 位立即数传送指令是:MOV DPTR,#data16。 ()10.MCS—51 单片机,CPU 对片外RAM 的访问只能用寄存器间接寻址的方式,且仅有4 条指令。 ()11.如JC rel 发生跳转时,目标地址为当前指令地址加上偏移量。 ()12.对于8051 单片机,当CPU 对内部程序存储器寻址超过4K 时,系统会自动在外部程序存储器中寻址。 ()13.指令MUL AB 执行前(A)=F0H,(B)=05H,执行后(A)=FH5,(B)=00H。()14.已知:DPTR=11FFH 执行INC DPTR 后,结果:DPTR=1200H。 ()15.已知:A=11H B=04H,执行指令DIV AB后,其结果:A=04H,B=1 CY=OV=0。()16.已知:A=1FH,(30H)=83H,执行ANL A,30H 后,结果:A=03H (30H)=83H P=0。 ()17.无条件转移指令LJMP addr16 称长转移指令,允许转移的目标地址在128KB 空间范围内。 ()18.MCS—51 指令系统中,执行指令FGO bit F0 ,表示凡用到F0 位的指令中均可用FGO 来代替。 ()19.MCS—51指令系统中,执行指令ORG 2000H;BCD:DB “A,B,C,D”表示将A、B、C、D 的ASII 码值依次存入2000H 开始的连续单元中。

MCS-51系列单片机指令表

MCS-51系列单片机指令A表 MCS-51系列单片机指令以A开头的指令有18条,分别为: 1、ACALL addr11 指令名称:绝对调用指令 指令代码: 指令功能:构造目的地址,进行子程序调用。其方法是以指令提供的11位地址(al0~a0), 取代PC的低11位,PC的高5位不变。 操作内容: PC←(PC)+2 SP←(SP)+1 (SP)←(PC)7~0 SP←(SP)+1 (SP)←(PC)15~8 PC10~0←addr l0~0 字节数: 2 机器周期:2

使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。 2、ADD A,Rn 指令名称:寄存器加法指令 指令代码:28H~2FH 指令功能:累加器内容与寄存器内容相加 操作内容:A←(A)+(Rn), n=0~7 字节数: 1 机器周期;1 影响标志位:C,AC,OV 3、ADD A,direct 指令名称:直接寻址加法指令 指令代码:25H 指令功能:累加器内容与内部RAM单元或专用寄存器内容相加 操作内容:A←(A)+(direct) 字节数: 2 机器周期:1 影响标志位:C,AC,OV 4、ADD A,@Ri ’ 指令名称:间接寻址加法指令 指令代码:26H~27H 指令功能:累加器内容与内部RAM低128单元内容相加 操作内容:A←(A)+((Ri)), i=0,1 字节数: 1 机器周期:1

5、ADD A,#data 指令名称:立即数加法指令 指令代码:24H 指令功能:累加器内容与立即数相加 操作内容:A←(A)+data 字节数: 2 机器周期:1 影响标志位:C,AC,OV 6、ADDC A,Rn 指令名称:寄存器带进位加法指令 指令代码:38H~3FH 指令功能:累加器内容、寄存器内容和进位位相加 操作内容:A←(A)+(Rn)+(C), n=0~7 字节数: 1 机器周期:1 影响标志位:C,AC,OV 7、ADDC A,direct 指令名称:直接寻址带进位加法指令 指令代码:35H 指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C) 字节数: 2 机器周期:1

单片机的查表程序

在单片机开发过程中.一些非线性的控制过程.最适合做一个表格来.时时改变系统的参数.达到控制的目的.最常的如产生正弦的的程.就是建一个大的数组时时改变输出的8位字节送给外部DA.由DA生成一个完整的正弦波.当然了.LED显示也是一个例子.通过建一个数组来实现段码的点亮点灭.下面就是一个LED表---digits[0] #define SEG_a 0x01 #define SEG_b 0x02 #define SEG_c 0x04 #define SEG_d 0x08 #define SEG_e 0x10 #define SEG_f 0x20 #define SEG_g 0x40 #define SEG_dot 0x80 unsigned char digits[10] = { (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f), // 0 (SEG_b|SEG_c), // 1 (SEG_a|SEG_b|SEG_d|SEG_e|SEG_g), // 2 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_g), // 3 (SEG_b|SEG_c|SEG_c|SEG_f|SEG_g), // 4 (SEG_a|SEG_c|SEG_d|SEG_f|SEG_g), // 5 (SEG_a|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 6 (SEG_a|SEG_b|SEG_c), // 7 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_e|SEG_f|SEG_g), // 8 (SEG_a|SEG_b|SEG_c|SEG_d|SEG_f|SEG_g) // 9 }; C查表就太简单了temp2 = digits[ show_data[i] ];一句搞定,C中还有一个switch语句也是一个很好的用查表语句 C51汇编就相对麻烦一点.不过MCS-51指令系统中有专用的查表指令:MOVC A,@A+DPTR和MOV A,@A+PC. MOVC A,@A+DPTR指令,DPTR作为基址寄存器时,其值为16位而且可根据需要设计,故可用于在64KROM范围内查表。编写查表程序时,首先把表的首址送入DPTR中,再将要查找的数据序号(或下表值)送入A中,然后就可以使用该指令进行查表操作,并将结果送累加器A中。 MOVC A,@A+PC指令,PC作为基址寄存器时,其值由指令的位置确定,它只能设在查表指令操作码下

第3章-MCS-51系列单片机的指令系统和汇编语言程序

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

51单片机汇编指令速查表

51 单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A,Rn 寄存器送累加器1 1 MOV Rn,A 累加器送寄存器1 1 MOV A ,@Ri 内部RAM 单元送累加器1 1 MOV @Ri ,A 累加器送内部RAM 单元1 1 MOV A ,#data 立即数送累加器2 1 MOV A ,direct 直接寻址单元送累加器2 1 MOV direct ,A 累加器送直接寻址单元2 1 MOV Rn,#data 立即数送寄存器2 1 MOV direct ,#data 立即数送直接寻址单元3 2 MOV @Ri ,#data 立即数送内部RAM 单元2 1 MOV direct ,Rn 寄存器送直接寻址单元2 2 MOV Rn ,direct 直接寻址单元送寄存器2 2 MOV direct ,@Ri 内部RAM 单元送直接寻址单元2 2 MOV @Ri ,direct 直接寻址单元送内部RAM 单元2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元3 2 MOV DPTR ,#data16 16 位立即数送数据指针3 2 MOVX A ,@Ri 外部RAM 单元送累加器(8 位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM 单元(8 位地址) 1 2 MOVX A ,@DPTR 外部RAM 单元送累加器(16 位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM 单元(16 位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR 为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC 为基址) 1 2 XCH A ,Rn 累加器与寄存器交换1 1 XCH A ,@Ri 累加器与内部RAM 单元交换1 1 XCHD A ,direct 累加器与直接寻址单元交换2 1 XCHD A ,@Ri 累加器与内部RAM 单元低4 位交换1 1 SW AP A 累加器高4 位与低4 位交换1 1 POP direct 栈顶弹出指令直接寻址单元2 2 PUSH direct 直接寻址单元压入栈顶2 2 二、算术运算类指令 ADD A,Rn 累加器加寄存器1 1 ADD A,@Ri 累加器加内部RAM 单元1 1 ADD A,direct 累加器加直接寻址单元2 1 ADD A,#data 累加器加立即数2 1 ADDC A,Rn 累加器加寄存器和进位标志1 1 ADDC A,@Ri 累加器加内部RAM 单元和进位标志1 1 ADDC A,#data 累加器加立即数和进位标志2 1

相关文档
最新文档