您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 单片机51系列指令系统与程序设计方法..
2020/2/2413.1指令格式和伪指令3.3指令系统3.4程序设计方法第3章51系列指令系统与程序设计方法单片机原理与应用3.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子程序返回3.1指令格式和伪指令标号:必须以字母和下划线开头,由字母或数字组成。2020/2/243二、伪指令:汇编的控制指令,仅提供汇编信息,不产生指令代码。1.ORG—起始地址指令(定位伪指令):格式:ORG表达式指明程序和数据块起始地址,表达式是一个绝对或地址偏移值。指令地址机器码源程序ORG2000H2000H7830MAIN:MOVR0,#30H2002HE6MOVA,@R0…2020/2/2443.DB—定义字节型常数指令。格式:[标号:]DBn1,n2,n3,….nn例:DB12H,100,‘A’作用:定义一个字节常数表4.DW—定义字型常数指令。格式:[标号:]DWn1,n2,n3,….nn例:DW1234H,5678H作用:定义一个地址表或字常数表注:3和4这两个都是在程序存储器中存放。2.位地址赋值伪指令格式:符号名BIT位地址作用:将一个位地址赋给一个符号名。ClockBIT90H;定义P1.0为时钟线clock2020/2/2455.赋值伪指令EQU格式:符号名EQU表达式(寄存器名)将表达式或一个寄存器名赋给一个符号名。X1EQU2000HX2EQU0FH…MAIN:MOVDPTR,#X1ADDA,#X26.END—结束汇编伪指令。例:START:……ENDSTART2020/2/246二、机器语言指令格式:操作码[操作数1][,操作数2]有单字节、双字节和三字节指令。汇编语言指令中操作码和操作数是指令主体,称为指令可执行部分,指令表中可查出对应指令代码。举例:汇编语言:机器语言:MOVA,R0E8HMOVR6,#32H7E32HMOV40H,#64H754064H1110100001111110001100100111010101000000011001002020/2/247三、常用的主要缩写符号•A累加器Acc•AB寄存器对•direct直接地址00H~0FFH•#data立即数,表示一个常数00H~0FFH•@间接寻址标记•X寄存器名•(X)X寄存器内容•((X))由X寄存器寻址的存储器单元内容•$本条指令起始地址•rel相对偏移量-128~+127•rrr其值由工作寄存器Rn确定,R0~R7对应000~111寻址方式:寻找本条指令中操作数的有效地址方式。主要的寻址方式有:•立即寻址;•直接寻址;•寄存器寻址;•寄存器间接寻址;•基寄存器加变址寄存器间接寻址;还有相对寻址等。3.2指令寻址方式2020/2/249一、操作数类型:位(bit)─位寻址区中的一位二进制数据字节(Byte)─8位二进制数据字(Word)─16位双字节数据二、寻址方式:1.立即寻址方式:指令中给出实际操作数据(立即数),一般用于为寄存器或存储器赋常数初值。举例:8位立即数:MOVA,#40H;A40H16位立即数:MOVDPTR,#2100H;DPTR2100H2020/2/24102.直接寻址方式:指令操作数是存储器单元地址,数据放在存储器单元中。MOVA,40H;A(40H)直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。41H78H40H56H例:设存储器两个单元的内容如图所示,执行指令MOVA,40H后A=?思考题:直接寻址方式指令和立即寻址方式指令的形式有什么不同?56H3.寄存器寻址方式:4.寄存器间接寻址方式:指令的操作数为寄存器名,寄存器中为数据地址。存放地址的寄存器称为间址寄存器或数据指针。例:MOVA,@R0;A((R0))设指令执行前A=20H,R0=40H,地址为40H存储器单元内容如图所示。执行指令后,A=?,R0=?,(40H)=?34H40H34H01000000AR00010000041H67H40H34HR0→A20HR040H例:MOVA,R0;A(R0)设指令执行前A=20H,R0=40H,执行指令后,A=?,R0=?指令操作数为寄存器名,数据在寄存器中。40H40H5.基寄存器加变址寄存器间接寻址方式:例:MOVCA,@A+DPTR;A((A+DPTR))设指令执行前A=09H,DPTR=2000H,存储器单元内容如图所示。执行指令后,A=?DPTR=?12H2000H2008H89H2009H12H数据在存储器中,指令给出的寄存器为数据的基地址(基寄存器PC和DPTR)和偏移量(变址寄存器A)。数据地址=基地址+偏移量。说明:1、只对程序存储器;2、指令形式:MOVCA,@A+DPTRMOVCA,@A+PCJMP@A+DPTR2020/2/2413指令给出位地址。一位数据在存储器位寻址区。(1)内部RAM中的位寻址区:字节地址为20H~2FH;(2)专用寄存器的可寻址位:11个(83位)表示方法:1)直接使用位地址;如:PSW的位6可表示为0D6H2)位名称表示;或AC3)字节地址加位数表示;或0D0H.64)专用寄存器符号加位数表示。或PSW.6例:MOVC,40H;CY(位地址40H)设指令执行前CY=1,位地址40H存储器单元如图,执行指令后,CY=?29H0110001028H11010110位寻址区06.位寻址方式(可归属于直接寻址):7.相对寻址方式:目的地址=转移指令地址+转移指令字节数+rel(rel为偏移量)当前PC值加上指令中规定的偏移量rel,构成实际的操作数地址例:SJMPrel操作:跳转到的目的地址=当前16位PC值+rel注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128~+127(80H~7FH)。在实际编程中,“rel”通常用标号代替。2020/2/24153.3指令系统单片机所能执行的各种指令的集合称为它的指令系统指令的分类:每条指令在程序存储器ROM中占据一定的空间,以字节为单位。51系列按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条)每条指令在执行时要花去一定的时间,以机器周期为单位。51系列按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条)按指令的功能分类,可分为5大类:51系列有数据传送类(29条);算术运算类(24条);逻辑运算及移位类(24);控制转移类(17条);位操作类(17条)2020/2/24163.3.1数据传送指令最基本和最重要的指令类,可实现寄存器、存储器之间的数据传送。一、内部传送指令:片内数据存储器数据传送。二、外部传送指令:片外数据存储器数据传送。三、交换指令:片内数据存储器数据传送。四、堆栈操作指令:片内数据存储器数据传送。五、查表指令:程序存储器数据传送。(一)内部传送指令:习题:找出配对指令,实现反向传送。指令机器码:11101rrrE8~EF11100101nE5n1110011iE6、E701110100d74d10101rrrn1010011in85n1n290d1d2MOVA,Rn;A←(Rn),Rn=R0~R7MOVA,direct;A←(direct)MOVA,@Ri;A←((Ri)),Ri=R0、R1MOVA,#data;A←dataMOVRn,direct;Rn←(direct)MOV@Ri,direct;(Ri)←(direct)MOVdirect1,direct2;(direct1)←(direct2)MOVDPTR,#d1d2;DPTR←d1d2实现片内数据存储器中数据传送。指令格式:MOV目的操作数,源操作数寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间址。例:MOVA,#30HMOV4FH,AMOVR0,#20HMOV@R0,4FHMOV21H,20H地址内容…60H32H…32H58H习题:用两种寻址方式实现,将片内RAM60H单元的数据传送给累加器A。解:MOVA,#60H(×)MOVR0,#60H(√)MOVA,@R0;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOVR0,60HMOVA,@R0(×)解:MOVA,60H(√)结果A=32H顺序执行下列指令序列,求每一步执行结果。2020/2/2419说明:只有指令表中的指令才有对应指令代码,计算机才能执行。编程时,不能随意创造发明指令。1.一条指令中不能同时出现两个工作寄存器:非法指令:MOVR1,R2MOVR2,@R02.间址寄存器只能使用R0、R1。非法指令:MOVA,@R23.SFR区只能直接寻址,不能用寄存器间接寻址。非法指令:MOVR0,#80HMOVA,@R02020/2/2420(二)外部RAM传送指令:(MOVX)指令格式:MOVX目的操作数,源操作数寻址方式:片外数据存储器用寄存器间址方式。1.DPTR作16位数据指针,寻址64KB片外RAM空间:MOVXA,@DPTR;A←((DPTR))(读)MOVX@DPTR,A;(DPTR)←A(写)2.Ri作8位数据指针,寻址256B片外RAM空间(页内寻址):MOVXA,@Ri;A←((P2Ri))(读)MOVX@Ri,A;(P2Ri)←A(写)实现片外数据存储器和A累加器之间的数据传送。例:实现片外数据存储器数据传送(2000H)(2100H)。MOVDPTR,#2000HMOVXA,@DPTRMOVDPTR,#2100HMOVX@DPTR,A片外RAM地址内容2000HX…DPTR→2100H片外RAM地址内容2000HX…DPTR→2100HX习题:将片外RAM0000H单元的数据传送到片内RAM的60H单元。;DPTR=2000H;A=X;DPTR=2100H;(2100H)=X片外数据存储器不能直接寻址。下列为非法指令:MOVXA,2000HMOVX2100H,2000H思考题:为什么对DPTR的数据传送使用内部传送指令?2020/2/2422(三)ROM传送指令(查表指令):(MOVC)1.DPTR为基址寄存器:MOVCA,@A+DPTR;A((A+DPTR))(读)查表范围为64KB程序存储器任意空间,称为远程查表指令。2.PC为基址寄存器:MOVCA,@A+PC;A((A+PC))(读)常数表只能在查表指令后256B范围内,称为近程查表指令。实现从程序存储器读取数据到A累加器,只能使用变址间接寻址方式。多用于查常数表程序,可直接求取常数表中的函数值。例1:以查表方法把累加器中的十六进制数转换为ASCII码,并送回累加器中。外部ROM2004H31H...46H30H2005H...2000HPCPC2003H2012H32HRETINCAMOVC2001H2002H十六进制与ASCII码对应十六进制ASCII码30H31H45H46H01EF......程序如下:指令地址源程序ORG2000H2000HBA:INCA2001MOVCA,@A+PC2002RET2003DB30H2004DB31H2005DB32H……2011DB45H2012DB46H例2:程序:ORG1000HSQU:MOVDPTR,#3000H;确定表首地址(基地址)MOVA,20H;取X(变量:偏移量)MOVCA,@A+DPTR;查表求Y=X2MOV21H
本文标题:单片机51系列指令系统与程序设计方法..
链接地址:https://www.777doc.com/doc-3974971 .html