您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 80C51单片机 MCS-51指令系统
1第三章MCS-51指令系统3.1指令系统概述3.2寻址方式3.3指令系统2MCS-51系列单片机指令基本情况51系列单片机指令集含有111条指令每条指令在程序存储器ROM中占据一定空间,以字节为单位按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条)每条指令在执行时要花去一定的时间,以机器周期为单位按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条)按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(17条)第三章节MCS-51指令系统3ASM-51指令格式51系列单片机采用ASM-51指令格式,格式如下:[标号:]操作码[目的操作数][,源操作数][;注释]其中包含:方括符[]表示可选项标号代表指令所在地址,1-8个字母/数字,“:”结尾操作码就是指令功能助记符,指令实体目的操作数源操作数注释,以“;”开头4第一节MCS-51系列单片机寻址方式寻址方式:计算机指令中操作数(按地址)获取的方式MCS-51系列单片机提供了7种寻址方式,如果一条指令中包含多个操作数,就可能用到一种以上的寻址方式1、立即寻址2、直接寻址3、寄存器寻址4、寄存器间接寻址5、变址寻址6、相对寻址7、位寻址51、立即寻址(一)在指令中直接给出操作数的寻址方式称为立即寻址。这个操作数叫立即数,如指令:MOVA,#3AH该指令是将立即数3AH送累加器,由于MCS-51单片机的片内存储器是8位存储器,因此立即数一般为8位二进制数。在MCS-51的指令系统中,用#来识别立即数。74HA操作码立即数程序存储器PCPC+13AH3AH61、立即寻址(二)在有的指令中,也会用到16位立即数,如:MOVDPTR,#0123H该指令是将16位立即数0123H送数据指针DPTR(用于对16位地址的存储器寻址),DPTR由两个特殊功能寄存器DPH和DPL组成,在后面的寻址方式中会使用到DPTR。90H01H23H01H23HPCPC+1PC+2操作码高位立即数低位立即数程序存储器SFRDPHDPL72、直接寻址在指令中直接给出操作数地址的寻址方式称为直接寻址,直接寻址何以寻址特殊功能寄存器、内部RAM(128字节)和位地址,如:MOVA,70H;A←(70H)该指令是将RAM单元70H(地址)的内容送累加器。74H70HPCPC+1操作码直接地址程序存储器内部RAM70HAXXXX83、寄存器寻址在指令的操作码中包含了某一工作寄存器的地址(Rn:R0—R7),而操作数则存放在该寄存器中,如:MOVA,R5;A←(R5)该指令是将R5的内容送累加器。101PC操作码程序存储器内部RAMR5AXXXXR6R7110194、寄存器间接寻址在指令的操作码中包含了某一工作寄存器的地址(可用作地址指针的工作寄存器是@Ri:R0、R1),而操作数地址则存放在该寄存器中,如:MOVA,@R1;A←((R1))该指令是将R1的内容送作为地址,将该地址所对应的RAM单元的内容送累加器。1PC操作码程序存储器内部RAMR1AXX68H111001XX68H105、变址寻址将PC或DPTR的值作为基地址,将Acc的值作为变址地址,二者向加得到的值作为操作数的地址,如:MOVA,@A+DPTR;A←((A)+(DPTR))这种寻址方式一般用于常数表,DPTR的内容为表头地址,Acc的内容就是数据在表中的位置。PC操作码程序存储器SFRA100100111EH02HALU030FHXXDPHDPLF1H02F1H02F1H+1EH=030FHXX116、相对寻址(一)相对寻址以PC当前值(PC当前值是执行完指令后的值,也就是当前指令的PC值+指令所占的字节数)作为基地址,与指令中给定的偏移量rel相加,所得的结果作为程序的转移地址,指令中的偏移量rel是一个用补码表示的8位带符号数。相对寻址用于相对转移指令中,如:JZ30H;当A=0时,PC←PC+2+rel当A≠0时,PC←PC+2//程序顺序执行该指令以累加器Acc的值是否为0为转移条件,如果为Acc的值0则转移,如果Acc的值不为0则程序顺序执行。程序的执行过程见相对寻址(二)。在MCS-51的指令系统中,相对转移指令多为2字节指令,因此目的地址一般是PC+2+rel;如果是3字节指令,目的地址是PC+3+rel。偏移量rel是一个8位带符号数,因此程序转移的范围在PC当前值的+127—-128之间。126、相对寻址(二)60HPC操作码程序存储器PC0102HALU30HXX0100HPC+10101HPC+20102HPC0123H偏移量0102H+30H=0132Hrel=30H0132H137、位寻址MCS-51系列单片机中有专用的位运算指令,可以对位寻址区的每一个位进行数据传送、逻辑运算等操作,如:MOVC,07H;C←(07H)该指令属于位操作指令,作用是将位地址为70H的位单元(字节地址20H单元的D7位)传送到位累加器C中。PC操作码程序存储器C20HA2H00PC+107HPSWX07SFRX14MCS-51指令集(包含5大类功能)1、数据传送类指令:(29条)2、算术运算类指令:(24条)3、逻辑运算及移位类指令:(24条)4、控制转移类指令:(17条)5、位操作指令:(17条)151、数据传送类指令(一)片内数据存储器间传送:(MOV—16条)片外数据存储器送累加器:(MOVX—4条)程序存储器送累加器:(MOVC—2条)数据交换:(XCH,XCHD,SWAP—5条)数据交换:(PUSH,POP—2条)161、数据传送类指令(二)片内数据存储器间传送:(MOV—16条)MOV类指令带有两个操作数,前一个是目的地址,后一个是源操作数。作用是将源操作数送目的地址,如:MOVA,30H;A←(70H)AccDirect直接寻址@Ri间接寻址Rn寄存器寻址#data立即数171、数据传送类指令(三)片外数据存储器数据送累加器:(MOVX—4条)MOVX类指令可以在累加器和@Ri或@DPTR(@Ri为8位地址;@DPTR为16位地址)所指向的外部数据存储器间相互传送数据,具体指令有:MOVXA,@Ri;A←((Ri))MOVXA,@DPTR;A←((DPTR))MOVX@Ri,A;((Ri))←AMOVX@DPTR,A;((DPTR))←A181、数据传送类指令(四)程序存储器数据送累加器:(MOVC—2条)MOVX类指令采用变址寻址方式进行寻址。该类指令通常称为查表指令,送入累加器Acc的数据是事先写入的表格数据,通常使用伪指令DB或DW预先定义在程序存储器中,具体指令有:MOVCA,A+@DPTR;MOVXA,A+@PC;191、数据传送类指令(五)数据交换指令:(5条)XCHA,direct(字节互换)XCHA,@Ri(字节互换)XCHA,Rn(字节互换)XCHDA,@Ri累加器Acc的低4位与((Ri))的低4位互换,各自的高4位不变SWAPA累加器Acc的高低4位互换201、数据传送类指令(六)堆栈操作指令:(2条)PUSH压栈指令POP弹栈指令•堆栈由特殊功能寄存器SP(堆栈指针)进行管理•理论上堆栈在存储器中可以放在任意位置,但为了不和工作寄存器冲突,一般将堆栈放在存储器靠后的位置•堆栈指针SP总是指向栈顶(自动变化,见第二章相关内容)•PUSH和POP一般是成对使用的212、算术运算类指令(一)加法运算:(ADD—4条)带进位加法运算:(ADDC—4条)带借位减法运算:(SUBB—4条)加1/减1操作:(INC,DEC—9条)单字节乘/除法运算:(MUL,DIV—2条)算术运算类指令共有6种24条十进制调整:(DAA—1条)222、算术运算类指令(二)•加法运算:(ADD—4条)•带进位加法运算:(ADDC—4条)•带借位减法运算:(SUBB—4条)所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以Acc为一个加数或被减数,最终结果也存进Acc加法(ADD)、带进位加法(ADDC)以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1”带进位加法(ADDC):(A)←(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)←(A)-(Cy)-(第二操作数)232、算术运算类指令(三)加1/减1操作:(INC,DEC—9条)INC,DEC与用加/减法指令做加1/减1操作不同之处在于INC、DEC不影响标志位。单字节乘/除运算:(MUL,DIV—2条)两个单字节数的乘/除法运算只在A与B之间进行。MULAB:(A)与(B)相乘,积为16位数,(A)←积的高8位;(B)←积的低8位DIVAB:(A)除以(B),结果用2字节表示,(A)←商的整数部分;(B)←余数242、算术运算类指令(四)十进制调整:(DAA—1条)用于两个BCD码之间的相加,这条指令只能跟在ADD或ADDC之后BCD码是指“用二进制表达的十进制数”。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码00100000B或20H表示。4个二进制位就可以表示一位BCD码:0000~1001可表示十进制数(BCD数)0~9;8个二进制位就可以表示两位压缩的BCD码:00000000~10011001表示00~99。252、算术运算类指令(五)DAA指令的执行过程若(A)3~0>9或(AC)=1则(A)3~0←(A)3~0+6;若(A)7~4>9或(CY)=1则(A)7~4←(A)7~4+6;如:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。MOVA,#65HADDA,#58HDAA结果:(A)=23H(Cy)=165011001015801011000+)6601100110+)191800113200101263、逻辑运算及移位类指令(一)该类指令共有5种24条逻辑与运算:(ANL—6条)逻辑或运算:(ORL—6条)逻辑异或运算:(XRL—6条)累加器清零/取反:(CLR,CPL—2条)累加器移位操作:(RL,RLC,RR,RRC—4条)273、逻辑运算及移位类指令(二)逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11累加器清零/取反操作(CLR,CPL—2条)CLRA—对累加器清零1Byte1TmCPLA——对累加器按位取非1Byte1Tm283、逻辑运算及移位类指令(三)逻辑运算指令在程序中的应用(下面的例子认为Acc的内容为9AH)逻辑与ANL运算用于对某些位进行清0或者保留:例:ANLA,#0FH;则(A)=0AH逻辑或ORL运算用于对某些位进行置1或者保留:例:ORLA,#0FH;则(A)=9FH逻辑异或XRL运算用于对某些位进行取反或者保留:例:XRLA,#0FH;则(A)=95H(A)10011010#0FH0000111195H1001010129RRCA带进位循环左移3、逻辑运算及移位类指令(四)累加器移位操作:(RL,RLC,RR,RRC—4条)RLA循环右移CyRRA循环左移RLCA带进位循环右移累加器Acc累加器Acc累加器Acc累加器AccCy304、控制转移类指令(一)控制转移类指令用于对程序的执行顺序进行控制(即改变PC指针的当前值),该类指令共有4种17条无条件转移:(LJMP,AJMP,SJMP,JMP—4条)条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ—8条)子程序调用及返回:(LCALL,ACALL,RET,RETI—4条)空操作:(NOP—1
本文标题:80C51单片机 MCS-51指令系统
链接地址:https://www.777doc.com/doc-3977525 .html