当前位置:首页 > 电子/通信 > 综合/其它 > 单片机应用课件第4章
第四章MCS-51单片机指令系统4-1指令系统概述4-2指令寻址方式4-3MCS-51单片机指令指令是CPU指挥计算机进行某种操作的命令,指令系统是某种型号的计算机所能执行的所有指令的集合。4-1指令系统概述一.指令的表达形式1.助记符指令(汇编语言指令)2.二进制代码指令(机器码指令)二.汇编语言指令格式[标号:]操作码[操作数1],[操作数2][;注释]换行表示一条指令结束。例:LOOP:MOVA,#40H;取参数1.标号:指令的符号地址2.操作码:指明指令功能。3.操作数:指令操作对象数据、地址、寄存器名及约定符号。4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。MOV__move传送XCH__exchange交换ANL__andlogic与逻辑运算XRL__exclusiveor异或运算MUL__Multiply乘法RR__rotateright右循环SJMP__shortjump短跳转RET__return子程序返回4-1指令系统概述三.机器语言指令格式操作码[操作数1][操作数2]有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。举例:汇编语言:机器语言:MOVA,R0E8HMOVR6,#32H7E32HMOV40H,#64H754064H111010000111111000110010011101010100000001100100四.指令系统中有关符号说明4-2指令寻址方式4-2-1操作数类型位(b)─位寻址区中的一位二进制数据字节(B)─8位二进制数据字(W)─16位双字节数据4-2-2寻址方式一.立即寻址方式指令中给出实际操作数据(立即数),一般用于为寄存器或存储器赋常数初值。举例:8位立即数:MOVA,#40H;A40H16位立即数:MOVDPTR,#2100H;DPTR2100H二.直接寻址方式(只能在内部RAM中进行)指令中直接给出操作数所在存储器单元的地址。MOVA,40H;A(40H)直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。41H78H40H56H56H例:设存储器两个单元的内容如图所示,执行指令MOVA,40H后A=?思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?三.寄存器寻址方式(R0~R7、A、DPTR)指令中指定某个寄存器的内容作为操作数。例:MOVA,R0;A(R0)设指令执行前A=20H,R0=40H,执行指令后,A=?,R0=?四.寄存器间接寻址方式(不能访问特殊功能寄存器)指令中指定将某一寄存器的内容作为操作数的地址。存放地址的寄存器称为间址寄存器或数据指针。例:MOVA,@R0;A((R0))设指令执行前A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=?,R0=?,(40H)=?41H67H40H34H34H40H34H40H40H01000000A00100000R001000000R0→五.变址间接寻址方式(51特有,只能访问程序存储器)以16位寄存器(PC或DPTR)的内容作为基址,以累加器A的内容为偏移量,将两者进行相加的和作为操作数地址。例:MOVCA,@A+DPTR;A((A)+(DPTR))设指令执行前A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后,A=?DPTR=?12H2000H六.位寻址方式指令中直接给出位操作数的地址。例:MOVC,40H;Cy(位地址40H)设指令执行前Cy=1,位地址40H存储器单元为0,执行指令后,Cy=?28H0110001029H11010111位寻址区02008H89H2009H12H4-3MCS-51单片机指令指令功能分类:数据传送、数据操作、布尔处理、程序控制。4-3-1数据传送指令实现寄存器、存储器之间的数据传送。一.内部传送指令:片内数据存储器数据传送。二.外部传送指令:片外数据存储器数据传送。三.交换指令:片内数据存储器数据传送。四.堆栈操作指令:片内数据存储器数据传送。五.查表指令:程序存储器数据传送。1.以累加器A为目的地址2.以Rn为目的地址3.以直接地址为目的地址4.以寄存器间接地址为目的地址5.以DPTR为目的地址的16位指令(一)内部传送指令:实现片内数据存储器中数据传送。指令格式:MOV目的操作数,源操作数寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。例:顺序执行下列指令序列,求每一步执行结果。MOVA,#30HMOV4FH,AMOVR0,#20HMOV@R0,4FHMOV21H,20H地址内容…60H32H…32H58H习题2:用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。解:MOVA,#60HMOVR0,#60HMOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOVR0,60HMOVA,@R0解:MOVA,60H说明:只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。1.一条指令中不能同时出现两个工作寄存器:非法指令:MOVR1,R2MOVR2,@R02.间址寄存器只能使用R0、R1。非法指令:MOVA,@R23.SFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOVR0,#80HMOVA,@R04.指令表:B:指令字节数,M:机器周期数(二)外部传送指令实现片外数据存储器和A累加器之间的数据传送。指令格式:MOVX目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1.DPTR作16位数据指针,寻址64KB片外RAM空间MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;(DPTR)←A2.Ri作8位数据指针,寻址256B片外RAM空间MOVXA,@Ri;A←((Ri))MOVX@Ri,A;(Ri)←(A)例:实现片外数据存储器数据传送(2000H)(2100H)。MOVDPTR,#2000HMOVXA,@DPTRMOVDPTR,#2100HMOVX@DPTR,A片外RAM地址内容2000HX…DPTR→2100H片外RAM地址内容2000HX…DPTR→2100HX习题3:将片外RAM0000H单元的数据传送到片内RAM的60H单元。;DPTR=2000H;A=X;DPTR=2100H;(2100H)=X片外数据存储器不能直接寻址。下列为非法指令:MOVXA,2000HMOVX2100H,2000H思考题:为什么对DPTR的数据传送使用内部传送指令?(三)交换指令实现片内RAM区的数据双向传送。1.字节交换指令XCHA,Rn;(A)(Rn)XCHA,@Ri;(A)((Ri))XCHA,direct;(A)(direct)片内RAM地址内容2BH35H2AH38H…20H习题4:将片内RAM60H单元与61H单元的数据交换。例:设A=29H,执行指令XCHA,2AH后,A=?(2AH)=?38H29HXCH60H,61H←对吗?29H2.半字节交换指令XCHDA,@Ri;(A)0~3((Ri))0~3SWAPA;(A)4~7(A)0~3例:交换片内RAM40H单元和41H单元的低半字节。MOVA,40HMOVR0,#41HXCHDA,@R0MOV40H,A(四)堆栈操作指令入栈指令:PUSHdirect;SP(SP)+1,(SP)(direct)出栈指令:POPdirect;direct((SP)),SP(SP)-1例:设A=02,B=56H,执行下列指令后,SP=?,A=?,B=?片内RAM34H33H32H31H30H××××SP→××××SP→02×××SP→56H02×××56H02HSP→×××SP→56H02×××SP→56H02×××56HSP→02×02HA00H02H00H×02H02HSBR:MOVSP,#30H;设栈底PUSHACCPUSHBMOVA,#0MOVB,#01…POPBPOPACC(五)查表指令(访问程序存储器的传送指令)实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。1.DPTR为基址寄存器MOVCA,@A+DPTR;A((A)+(DPTR))查表范围为64KB程序存储器任意空间,称为远程查表指令。2.PC为基址寄存器PC(PC)+1MOVCA,@A+PC;A((A)+(PC))常数表只能在查表指令后256B范围内。例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM21H单元。1)ORG1000HSQU:MOVDPTR,#TAB;确定表首地址(基地址)MOVA,20H;取X(偏移量MOVCA,@A+DPTR;查表求Y=X2MOV21H,A;保存YRET;子程序结束…;其它程序段ORG3000H;常数表格首地址TAB:DB00,01,04,09,…,225;平方表2)指令地址源程序ORG1000H;程序起始地址1000HSQU:MOVA,20H;取X1002HADDA,#3;修正偏移量1004HMOVCA,@A+PC;查表求Y=X21005HMOV21H,A;存结果1007HRET;子程序结束1008HTAB:DB00,01,04;平方表100BHDB09,…,225思考题:当0≤X≤255时,如何用查表法编程求Y=X2。例:查表法求Y=X2。设X(0≤X≤15)在片内RAM的20H单元中,要求将查表求Y,存入片内RAM21H单元。习题:找出指令错误并改正:1.MOVA,#1000H;A←1000H2.MOVXA,1000H;A←(1000H)片外RAM3.MOVCA,1000H;A←(1000H)片外ROM4.MOVX60H,A;片外RAM(60H)←A5.MOVR0,60H;片内RAM:(61H)←(60H)MOV61H,@R06.XCHR1,R2;R1←→R27.MOVXDPTR,#2000H;DPTR←2000H8.MOVX60H,@DPTR;片内RAM←片外RAM4-3-2算术运算指令与数据传送指令不同,多数算术运算指令会影响标志位的状态,即CPU执行算术运算指令后,根据数据操作情况自动设置标志位的状态。复习状态标志CyACF0RS1RS0OV—PMCS-51的程序状态字寄存器PSW为标志寄存器。其格式如下:1.标志位(自动设置状态)1)Cy:进位标志位保存运算后最高位的进位/借位状态,当有进位/借位,Cy=1,否则Cy=0。2)AC:辅助进位标志位保存低半字节的进位/借位状态,当D3产生进位/借位,AC=1,否则AC=0。用于十进制调整。3)OV:溢出标志位OV=Cy7Cy6,补码运算产生溢出OV=1,否则OV=0。4)P:奇偶标志位反映累加器A中数据的奇偶性。当1的个数为奇数,P=1,否则P=0。2.用户选择位(编程设置状态)1)F0:用户自定义标志位。2)RS1、RS0:工作寄存器区选择位。复位时,PSW=00HRS1RS0工作寄存器000区011区102区113区例:复位后,设置使用工作寄存器2区,其余标志位不变。解:MOVPSW,#CyACF0RS1RS0OV—P10H4-3-2算术运算指令完成片内RAM和A中数据的加减乘除运算。一.加减指令1.加法指令00111011+001110110111011076H00111)不带进位加法:ADDA,源操作数ADDA,R2;A←(A)+(R2),影响Cy、OV、AC、P例1:A=3BH,PSW=0,执行指令ADDA,#3BH求:A=,Cy=,OV=,AC=,P=,PSW=?01000001=41HCyACF0RS1RS0OV—P1001101011100011+01011111012)带进位加法:ADDCA,源操作数ADDCA,R2;A←(A)+(R2)+(Cy),影响Cy、OV、AC、P7DH1100例2:A=9A
本文标题:单片机应用课件第4章
链接地址:https://www.777doc.com/doc-3149080 .html