1、本章要点n 指令系统是编写程序的基础,本章将介绍指令系统是编写程序的基础,本章将介绍用于用于80518051类单片机的类单片机的MCS-51指令系统。指令系统。n 在在MCS-51指令系统中,包括有数据传送指令系统中,包括有数据传送指令指令、算术、算术与逻辑运算指令、控制转移指令、与逻辑运算指令、控制转移指令、位操作指令等位操作指令等111111条条指令指令,本章介绍各种,本章介绍各种指指令令的书写格式、寻址方式以及各指令的特点的书写格式、寻址方式以及各指令的特点与使用场合。与使用场合。第一节 概述一、一、MCS-51指令系统分类指令系统分类按机器码的长度分类有按机器码的长度分类有 单字节单字
2、节 两字节两字节 三字节三字节等三种类型等三种类型按指令功能分类有按指令功能分类有 数据传送指令数据传送指令 算术运算指令算术运算指令 逻辑运算指令逻辑运算指令 位操作指令位操作指令 控制转移指令控制转移指令等五种类型等五种类型 二、二、MCS-51指令书写格式指令书写格式 MCS-51指令的书写格式为每条指令写成一行,每行指令的书写格式为每条指令写成一行,每行分成若干段,第一段为操作符,第一段之后为操作数,有分成若干段,第一段为操作符,第一段之后为操作数,有的指令有操作数也有的指令没有操作数,例如:的指令有操作数也有的指令没有操作数,例如:无操作数指令无操作数指令 RETRET 有一个操作数
3、指令有一个操作数指令 INC AINC A 有两个操作数指令有两个操作数指令 MOV AMOV A,21H21H 有三个操作数指令有三个操作数指令 CJNE ACJNE A,#50H#50H,TARGETTARGET指令码也称操作符指令码与操作数间应留一空格操作数与操作数之间应用逗号隔开操作数 三、三、MCS-51寻址方式寻址方式 1.立即寻址立即寻址 操作数值直接标明在指令上,称为立即数,采用操作数值直接标明在指令上,称为立即数,采用立即数的寻址方式称为立即寻址。立即数要用立即数的寻址方式称为立即寻址。立即数要用#号号打头,例如指令打头,例如指令 MOV AMOV A,#44H (#44H
4、(对应机对应机器码为器码为74 4474 44,其中,其中#44#44即为立即数即为立即数)。将立即数44送ACC 2.直接寻址直接寻址 操作数不是立即数,而是地址值,所需的数从该地操作数不是立即数,而是地址值,所需的数从该地址单元中获得,由于这类指令的地址直接标注在指令址单元中获得,由于这类指令的地址直接标注在指令上,所以称为直接寻址。地址值和立即数的区别是前上,所以称为直接寻址。地址值和立即数的区别是前面是否加面是否加#号,例如号,例如MOVMOVA A,44H44H,其中,其中44H44H为地址,为地址,与加与加#号的号的#44H#44H不同,不同,#44H#44H为立即数为立即数。从4
5、4H中取出数据08H送给ACC 3.寄存器寻址寄存器寻址 操作数不是立即数,也不是地址,而是一个操作数不是立即数,也不是地址,而是一个寄存器名称,则称为寄存器寻址,例如寄存器名称,则称为寄存器寻址,例如 指令指令MOV AMOV A,R1R1。其中其中R1R1即寄存器名称。即寄存器名称。从寄存器R1中取数将R1中的数据送ACC 4.寄存器间接寻址寄存器间接寻址 这类指令先从指令上所标明的寄存器中找出存放数据的这类指令先从指令上所标明的寄存器中找出存放数据的地址,然后再从所标明的的地址中取数。由于存储数据地址,然后再从所标明的的地址中取数。由于存储数据的地址不直接标明在指令中,所以称之为间接寻址
6、。例的地址不直接标明在指令中,所以称之为间接寻址。例如指令如指令MOV AMOV A,R0 R0 (注意注意!只有只有R0R0、R1R1可以间接寻可以间接寻址)。址)。从寄存器中找出存放数据的地址从该地址中取数将数送ACC 5.变址间接寻址变址间接寻址 这种寻址方式是将基址值这种寻址方式是将基址值(包括寄存器包括寄存器PCPC或或DPTR)DPTR)加加上变址值上变址值(只能是只能是A)A),并以此为地址,从该地址单元中并以此为地址,从该地址单元中取数,例如指令取数,例如指令MOVC A,A+DPTRMOVC A,A+DPTR和和MOVC A,A+PCMOVC A,A+PC。1.从ACC中取出
7、变址30H2.从DPTR.取出基址值2010H4.求得2010H+30H=2040H从2040H中取数27H送ACC 6.相对寻址相对寻址 相对寻址只限于转移类指令使用,例如相对寻址只限于转移类指令使用,例如SJMP SJMP relrelDJNZDJNZ Rn,relRn,rel 它以它以PCPC当前值为基地址,加上指令中的偏移当前值为基地址,加上指令中的偏移量量relrel,求出转移地址值。由于转移地址可能,求出转移地址值。由于转移地址可能位于基址之前,也可能位于基址之后,如果位位于基址之前,也可能位于基址之后,如果位于基址之后,则实际的转移地址等于基址加偏于基址之后,则实际的转移地址等于
8、基址加偏移量。如果位于基址之前,则实际的转移地址移量。如果位于基址之前,则实际的转移地址等于基址减偏移量。由于指令上的偏移量采用等于基址减偏移量。由于指令上的偏移量采用补码以表示正负,故计算转移地址可以一律使补码以表示正负,故计算转移地址可以一律使用加法。用加法。返回本章首页 数据传送指令的功能是将数据从源送到目标,数据传送指令的功能是将数据从源送到目标,源可以是立即数、寄存器、寄存器间接地址,片源可以是立即数、寄存器、寄存器间接地址,片外存储器或片外存储器间接地址。目标也可以是外存储器或片外存储器间接地址。目标也可以是寄存器、寄存器间接地址,片外存储器或片外存寄存器、寄存器间接地址,片外存储
9、器或片外存储器间接地址。储器间接地址。一、一、源是立即数的源是立即数的传送指令传送指令 例如例如 MOV R1,#12HMOV R1,#12H MOV MOV 24H,#34H 24H,#34H MOV R1,#56H MOV R1,#56H 第二节 数据传送指令源源(立即数)立即数)目标目标(寄存器或寄存器间接地址寄存器或寄存器间接地址)二、源和二、源和目标是片内目标是片内数据存储器的传送指令数据存储器的传送指令 源和目标在片内,可使用源和目标在片内,可使用 MOVMOV类指令。类指令。例如:例如:MOV A,R1 MOV A,R1MOV R1,A MOV R1,A MOV A,R1 MOV
10、 A,R1MOV R1,AMOV R1,A MOV 12H,R1 MOV R1,12HMOV 12H,R1 MOV R1,12H MOV R1MOV R1,34H 34H MOV MOV 34H,R134H,R1 MOV 12H,A MOV 12H,AMOVMOVA,12H A,12H MOVMOV 12H,34H 12H,34H源源(寄存器或寄寄存器或寄存器间接地址)存器间接地址)目标目标(寄存器或寄寄存器或寄存器间接地址存器间接地址)三、源或三、源或目标是片外目标是片外数据存储器的传送指令数据存储器的传送指令 源和目标在片外,必须使用源和目标在片外,必须使用MOVXMOVX或或MOVCMO
11、VC类指令,类指令,例如:例如:MOVXMOVX A A,DPTRDPTR MOVXMOVX DPTR DPTR,A A MOVC A MOVC A,A+PC A+PC MOVC A,A+DPIR MOVC A,A+DPIR MOVX MOVX A A,RiRi MOVX MOVX RiRi,A A 源源(A(A或或片外存储器间片外存储器间接地址)接地址)目标目标(A或片外存储器间或片外存储器间接地址接地址)四、交换指令四、交换指令 交换指令所指定的交换对象。一方必须是交换指令所指定的交换对象。一方必须是A A,另一方另一方为寄存器或寄存器间接地址。为此交换前要先把交换一为寄存器或寄存器间接地
12、址。为此交换前要先把交换一方传送到方传送到A A,然然后进行交换。例如:后进行交换。例如:XCHXCH A,RnA,Rn XCHXCH A,direct A,direct XCHXCH A,RiA,RiXCHDXCHD A A,RiRi (低半字节交换,高半字节不变低半字节交换,高半字节不变)五、堆栈操作指令五、堆栈操作指令 堆栈是指在片内堆栈是指在片内RAMRAM中划定的一个区,它可以用来暂中划定的一个区,它可以用来暂时保存一些需要重新使用的数据或地址。使用堆栈可以时保存一些需要重新使用的数据或地址。使用堆栈可以是在执行某些指令时自动完成;例如调用子程序时,把是在执行某些指令时自动完成;例如
13、调用子程序时,把当前当前PCPC值保存于堆栈,以便返回时便用。也可以使用堆值保存于堆栈,以便返回时便用。也可以使用堆栈操作指令,将数据压入或弹出栈操作指令,将数据压入或弹出,例如:例如:PUSH direct PUSH direct POPPOPdirectdirect 返回本章首页第三节 算术与逻辑运算指令 一、算术运算指令一、算术运算指令 1.1.加法运算指令加法运算指令 加法运算指令包括加法运算指令包括ADDADD、ADDCADDC和和INCINC。其中其中ADDADD为不为不带进位位的加法指令;带进位位的加法指令;ADDCADDC为带进位位的加法指为带进位位的加法指令令;INCINC为
14、加为加1指令。例如:指令。例如:ADDADD 第一操作数第一操作数,第二操作数第二操作数 ADDC ADDC 第一操作数第一操作数,第二操作数第二操作数 其中第一操作数是累加器其中第一操作数是累加器A,A,第二操作数可以是立第二操作数可以是立即数、直接地址、或间接地址。即数、直接地址、或间接地址。INC INC 操作数操作数 其中操作数可以是累加器其中操作数可以是累加器A,A,立即数、直接地址、立即数、直接地址、或间接地址。或间接地址。2 2减法运算指令减法运算指令 减法运算指令都是带进位位的,助记符为减法运算指令都是带进位位的,助记符为SUBBSUBB例如例如 SUBB A,R1SUBB A
15、,R1。减法运算中减法运算中,所谓进位就是借位,带进位所谓进位就是借位,带进位位的减法运算就是两数相减后还要再减去前位的减法运算就是两数相减后还要再减去前一次运算留下的进位位一次运算留下的进位位CYCY。减减1 1运算指令可以使指定单元内容减运算指令可以使指定单元内容减1 1,和,和加法指令同样,指令加法指令同样,指令 DEC ADEC A比指令比指令SUBC ASUBC A,#01H#01H所占用字节少;但前者不会影响标志。所占用字节少;但前者不会影响标志。除法运算指令为:DIV ABDIV AB被乘数放在累加器A乘数放在寄存器B两个8位无符号数相乘,可能得到16位数,因此规定积的低8位送到
16、A,积的高8位放在寄存器B。被除数放在累加器A除数放在寄存器B相除结果的商数回送到A,余数回送到B 3乘除运算指令乘除运算指令 MCS51 MCS51指令系统设有两条乘除指令,要求两个相乘指令系统设有两条乘除指令,要求两个相乘或相除的数必须是无符号的或相除的数必须是无符号的8 8位数。并分别放在位数。并分别放在A A、B B中。中。乘法运算指令为:MUL ABMUL AB 4十进制调整指令十进制调整指令 执行加法运算指令时,被运算的数属于什么类执行加法运算指令时,被运算的数属于什么类型,型,CPUCPU并不了解,运算时一律视之为二进制数。并不了解,运算时一律视之为二进制数。如果所运算的数不是二
17、进制数而是如果所运算的数不是二进制数而是BCDBCD码,必须在码,必须在编制编制BCDBCD码加法程序时,在加法指令之后加一个码加法程序时,在加法指令之后加一个DAADAA指令,进行加指令,进行加6 6调整。调整。例如例如3333H H与与3434H H两个存储单元内容为两个存储单元内容为BCDBCD码,求和码,求和时必须进行调整。即时必须进行调整。即MOVMOVA A,33H33HADDADDA A,34H34H DA DA A A;十进制调整指令十进制调整指令 M MOVOV42H42H,A A33H与34H两个存储单元内容为BCD码求和时必须进行调整二、二、逻辑逻辑运算指令运算指令1.逻
18、辑与指令逻辑与指令 ANLANL 第一操作数第一操作数,第二操作数第二操作数2.2.逻辑或指令逻辑或指令 ORL ORL 第一操作数第一操作数,第二操作数第二操作数 3.3.逻辑异或指令逻辑异或指令 XRL XRL 第一操作数第一操作数,第二操作数第二操作数4.4.清零指令和求反指令清零指令和求反指令(只对累加器只对累加器A进行操作进行操作)对对A A清零指令清零指令 CLRCLR A A 将将A A求反指令求反指令 CPLCPL A A 三三.移位操作指令移位操作指令 循环左移循环左移 RL ARL A 带进位循环左移指令带进位循环左移指令 RLC ARLC A 循环右移指令循环右移指令 R
19、R ARR A 带进位循环右移指令带进位循环右移指令 RRC ARRC A A A半字节交换指令半字节交换指令 SWAPSWAP 返回本章首页第四节 控制转移指令一、无条件转移指令一、无条件转移指令长跳转指令长跳转指令 LJMPLJMP addrl6 addrl6长跳转指令必须用长跳转指令必须用1616位的转移目标地址。位的转移目标地址。短跳转指令短跳转指令 AJMPAJMP addrl1 addrl1短跳转指令用短跳转指令用1111位的转移目标地址,目标地址的位的转移目标地址,目标地址的高高5 5位与当前地址相同。位与当前地址相同。相对跳转指令相对跳转指令SJMPSJMP relrel 相对
20、跳转指令目标地址相对跳转指令目标地址=下一条指令地址下一条指令地址+relrel。(relrel必须用补码以示正负)必须用补码以示正负)散转指令散转指令JMPJMPA+DPTRA+DPTR 散转指令的转移目标地址为散转指令的转移目标地址为A+DPTRA+DPTR。二、条件转移指令二、条件转移指令零条件转移指令零条件转移指令 JZ JZ relrelA A为为0 0转移。转移。JNZ JNZ relrelA A非非0 0转移。转移。比较转移指令比较转移指令 CJNE CJNE A,direct,relA,direct,rel CJNE CJNE A,#data,relA,#data,rel CJ
21、NE CJNE Rn,#data,relRn,#data,rel CJNE CJNE Ri,#data,relRi,#data,rel第一操作数不等于第二操作数时转移。第一操作数不等于第二操作数时转移。减减1 1非零跳转指令非零跳转指令 DJNZ DJNZ RnRn,relrel DJNZ DJNZ directdirect,relrel 第一操作数不等零时加第一操作数不等零时加1 1转移。转移。以上都属于相对转移指令以上都属于相对转移指令,目标地址等于下一条指令地址目标地址等于下一条指令地址 加加 relrel 即即目标地址目标地址=下一条指令地址下一条指令地址+rel 指令上指令上relr
22、el可以直接用目标地址标号。可以直接用目标地址标号。返回本章首页 三、子程序调用与返回指令三、子程序调用与返回指令 若程序中几个地方都需要使用同样的程序段,可将这个程序段从程序中分离出来,形成子程序模块,然后通过调用子程序的指令,运行这段模块。调用子程序指令分为长调用和短调用两种,长调用指令LCAIL的操作数是子程序的16位首地址,使用时比较直观;但机器码需占用3个字节。短调用指令ACALL的机器码只有两字节,但操作数只注明子程序首地址的低11位、而其高5位与程序运行的当前地址高5位相同,因此调用范围不能超过当前地址2KB。四、空操作指令四、空操作指令 CPU遇到空操作指令NOP时,不进行任何
23、操作。第五节 位操作指令 一、一、对进位位对进位位CYCY进行操作的指令进行操作的指令CLR CCLR CSETB CSETB CCPLCPL C C 在在MCS-51MCS-51指令系统中,有些指令操作时要有进位位指令系统中,有些指令操作时要有进位位CYCY参与,参与,例如例如ADDCADDC,SUBBSUBB,RLCARLCA,RRCA RRCA 等等,因此在使用这些指令前,等等,因此在使用这些指令前,要先对进位位要先对进位位CYCY做一些必要的处理,例如使之置做一些必要的处理,例如使之置0 0、置、置1 1或取反。或取反。有了以上指有了以上指令,要进行这些操作,就比较方便。令,要进行这些操作,就比较方便。二二.对具有位地址的空间进行操作的指令对具有位地址的空间进行操作的指令CLRCLR bit bitSETSET bit bitCPLCPL bit bitANLANL C C,bitbit ORLORL C C,bitbit
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。