您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 述职报告 > 第二章 MCS-51指令系统及汇编语言程序设计
第二章MCS-51指令系统及汇编语言程序设计•2-1指令格式•2-2寻址方式•2-3指令系统•2-4伪指令及程序设计§2.1指令格式MCS-51机器语言代码长度有三种格式:•单字节指令•双字节指令•三字节指令一、单字节指令•单字节指令格式由8位二进制编码表示。有两种形式:(1)8位全表示操作码例:NOP(空操作),其机器码为:00000000(2)8位编码中包含操作码和寄存器编码例:MOVA,Rn;ARn(n=0,1,2,3,4,5,6,7)机器码为:11101Rn操作码寄存器编码二、双字节指令•指令的编码由两个字节组成。例:MOVA,#DATA;A立即数DATA机器码:01110100第一字节第二字节操作码10000101操作数(立即数85H)三、三字节指令•第一个字节为操作码,其后两个字节为操作数。例:MOVdirect,#DATA;(direct)DATA设:direct=78H,DATA=80H则MOV78H,#80H指令的机器码为:011101010111100010000000操作码第一操作数(目的地址)第二操作数(立即数)第一字节第二字节第三字节MCS-51汇编语言的形式:标号(:)操作码(,)操作数(;)注释例如:把立即数AFH送累加器START:MOVA,#0AFH;A立即数AFH标号区操作码区操作数区注释区§2.2寻址方式MCS-51指令系统有六种寻址方式:•立即寻址•直接寻址•寄存器寻址•寄存器间接寻址•基寄存器加变址寄存器间接寻址•相对寻址一、立即寻址•操作数紧跟在操作码之后。例1:机器码助记符注释7470HMOVA,#70H;A70H例2:机器码助记符注释908200MOVDPTR,#8200H;DPH82H;DPL00H二、直接寻址•紧跟在操作码后的是操作数的直接地址。该方式中操作数存储的空间有三种:1.内部数据存储器的低128个字节单元(00H~7FH)例:MOVA,70H;(70H)A2.位地址空间例:MOVC,00H;直接位00H内容进位位3.特殊功用功能寄存器*只能用直接寻址方式进行访问。例:MOVIE,#85;立即数85H中断允许寄存器三、寄存器寻址•操作数在寄存器中。MCS-51指令系统中寄存器寻址的工作寄存器是R0~R7。例:INCR0;(R0)+1R0四、寄存器间接寻址•操作数的地址在寄存器中。•寄存器间接寻址只能使用寄存器R0或R1作为地址指针,来寻址内部RAM(00H~FFH)中的数据。•寄存器间接寻址也适用于访问外部RAM,可使用R0,R1或DPTR作为地址指针。•寄存器间接寻址用符号“@”表示。例:MOVA,@R0;((R0))A五、基寄存器加变址寄存器间接寻址•把基寄存器(DPTR或PC)和变址寄存器(A)的内容作为无符号数相加形成16位的地址,访问程序存储器中的数据表格。例如:MOVCA,@A+DPTR;((A+DPTR))AMOVCA,@A+PC;((A+PC))A六、相对寻址•这是地址的寻址方式。以PC的内容作为基地址,与指令中给出的偏移量相加得到转移地址。•是双字节转移指令。•偏移量是带符号数,范围是-128~+127。例如:JCrel;C=1跳转设PC=1000H,rel=05H当条件满足(C=1),新PC为多少?新PC=当前PC+rel40051000H1001H当前1002H=1002H+05H=1007H新PC1007H§2.3指令系统按指令的功能,MCS-51指令系统可分为下列五类:•数据传送类指令•算术运算类指令•逻辑操作类指令•位操作类指令•控制转移类指令一、数据传送类指令•数据传送类指令的助记符有:MOV、MOVX、MOVCXCH、XCHDPUSH、POP1.以直接地址为目标和源操作数可以实现:(1)内部RAM内部RAM(2)专用寄存器专用寄存器(3)内部RAM专用寄存器(4)专用寄存器内部RAM助记符机器码功能MOVdirect1,direct210000101直接地址(源)直接地址(目标);direct1direct2目标源例:MOVE0H,78H;(E0H)(78H)机器码:85H,78H,E0H2.累加器与外部数据存储器之间•该类指令两组:Ⅰ.由DPTR内容指示外部数据存储器地址(1)外部数据存储器内容送累加器助记符机器码功能MOVXA,@DPTR11100000;A((DPTR))目标源执行该指令时:2.DPL(低8位地址信息)由P0口输出,DPH(高8位地址信息)由P2口输出。3.所选中单元的数据由P0输入到累加器。4.P0口作分时复用。1.P3.7引脚上输出RD有效信号Ⅰ.由DPTR内容指示外部数据存储器地址(2)累加器内容送外部数据存储器助记符机器码功能MOVX@DPTR,A11110000;((DPTR))A目标源执行该指令时:2.DPL(低8位地址信息)由P0口输出,DPH(高8位地址信息)由P2口输出。3.累加器A的内容由P0口输出。4.P0口作分时复用。1.P3.6引脚上输出WR有效信号例:将外部数据存储器从5000H单元开始的50个工作单元清零。•思路:首址存放在DPTR中,循环次数存入在R2寄存器中程序如下:CLEAR:CLRAMOVR2,#32H;置计数值LOOP:MOVX@DPTR,AINCDPTR;修改地址指针DJNZR2,LOOP;控制循环RETⅡ.由Ri内容指示外部数据存储器地址(1)外部数据存储器内容送累加器助记符机器码功能MOVXA,@Ri11100011;A((Ri)+(P2)),i=0,1目标源执行该指令时:2.Ri包含的低8位地址由P0口输出,高8位地址信息由P2口输出。3.所选中存储单元的数据由P0口输入到累加器。4.P0口作分时复用。1.P3.7引脚上输出RD有效信号例:设外部数据存储器2097H单元中内容为80H,在执行下列指令后,则A中的内容为80H。MOVP2,#20HMOVR0,#97HMOVXA,@R0Ⅱ.由Ri内容指示外部数据存储器地址(2)累加器内容送外部数据存储器助记符机器码功能MOVX@Ri,A11110011;((Ri)+(P2))A,i=0,1目标源执行该指令时:2.Ri包含的低8位地址由P0口输出,高8位地址信息由P2口输出。3.累加器A的内容由P0口输出。4.P0口作分时复用。1.P3.6引脚上输出WR有效信号3.程序存储器内容送累加器例:(A)=30H,执行下列指令:地址指令•该类指令常用于查表。(1)PC作基址寄存器助记符机器码功能MOVCA,@A+PC10000011;PCPC+1A((A)+(PC))目标源1000HMOVCA,@A+PC结果为程序存储器在1031H单元中的内容送入A。例:(A)=30H,(DPTR)=8000H,执行下列指令:(1)DPTR作基址寄存器助记符机器码功能MOVCA,@A+DPTR10010011;A((A)+(DPTR))目标源MOVCA,@A+DPTR结果为程序存储器在8030H单元中的内容送入A。堆栈的特点:a.在内部RAM中设定的一个后进先出的区域。b.堆栈是字节操作。c.入栈地址增加,出栈地址减少。4.堆栈操作指令(1)进栈指令助记符机器码功能PUSHdirect11000000;SP(SP)+1((SP))direct直接地址(2)出栈指令助记符机器码功能POPdirect11010000;direct((SP))SP(SP)-1直接地址5.字节交换指令•该类指令的功能是将累加器A的内容和源操作数内容相互交换。助记符机器码功能XCHA,Rn11001rrr;(A)(Rn),n=0~7XCHA,@Ri1100011i;(A)((Ri)),i=0,1XCHA,direct11000101;(A)direct直接地址6.半字节交换指令助记符机器码功能XCHDA,@Ri1101011r;(A3~0)((Ri)3~0),i=0,1数据传送类指令•数据传送类指令的助记符有:MOV、MOVX、MOVCXCH、XCHDPUSH、POP寄存器C直接地址direct寄存器DPTR寄存器R7~R0直接地址direct立即数#data累加器A寄存器间址@R7,@R0寄存器间址@PC、@DPTRMCS-51传送指令示意图二、算术运算类指令算术运算类指令包含:•加法指令ADD•带进位加法指令ADDC•增量指令INC•十进制调整指令DAA•带进位减法指令SUBB•减量指令DEC•乘法指令MUL•除法指令DIV特点:•该类指令执行的结果将影响进位、辅助进位位、溢出标志位。•但是增量和减量指令不影响这些标志。1.加法指令功能:把所指出的字节变量加到累加器A上,结果在累加器中。助记符机器码功能ADDA,Rn00101rrr;(A)(A)+(Rn),n=0~7ADDA,@Ri0010011i;(A)(A)+((Ri)),i=0,1ADDA,#data00100100;(A)(A)+data立即数ADDA,direct00100101;(A)(A)+(direct)直接地址例:(A)=85H,(R0)=20H,(20H)=0AFH,执行指令:ADDA,@R0运算过程:1000010110101111+)100110100D3位向D4位有进位,AC=1C6=0C7=1CY=1结果:(A)=34H;CY=1;AC=1;OV=1。2.带进位加法指令功能:把所指出的字节变量、进位标志与累加器A内容相加,结果在累加器中。助记符机器码功能ADDCA,Rn00111rrr;(A)(A)+(Rn)+CY,n=0~7ADDCA,@Ri0011011i;(A)(A)+((Ri))+CY,i=0,1ADDCA,#data00110100;(A)(A)+data+CY立即数ADDCA,direct00110101;(A)(A)+(direct)+CY直接地址3.增量指令•功能:把所指出的字节变量的内容加1。•该指令不影响任何标志。•注意:用该指令修改输出口Pi时,其功能是“读——修改(增量)—写”,且所读内容来自端口的锁存器而不是端口的引脚。助记符机器码功能INCA00000100;(A)(A)+1INC@Ri0000011i;((Ri))((Ri))+1,i=0,1INCDPTR10100011;(DPTR)(DPTR)+1INCRn00001rrr;(Rn)(Rn)+1INCdirect00000101;(direct)(direct)+1直接地址例:两个8位的无符号数相加和是8位。设内部RAM中40H,41H单元中分别存放N1,N2,结果送42H单元。程序如下:AD1:MOVR0,#40H;设R0为数据指针MOVA,@R0;取N1INCR0;修改指针ADDA,@R0;N1+N2INCR0;MOV@R0,A;存结果RET4.十进制调整指令功能:对累加器参与的BCD码加法运算所得结果(8位)进行十进制调整。助记符机器码DAA110101005.带进位减法指令功能:从累加器中减去指定的变量和进位标志,结果在累加器中。助记符机器码功能SUBBA,Rn10011rrr;(A)(A)-(Rn)-CY,n=0~7SUBBA,@Ri1001011i;(A)(A)-((Ri))-CY,i=0,1SUBBA,#data10010100;(A)(A)-data-CY立即数SUBBA,direct10010101;(A)(A)-(direct)-CY直接地址例:设存储单元ST1和ST2中存入两个不带符号的二进制数,找出其中的大数存入ST3单元中。A(指针)?指针指针+1(指针)A结束开始指针ST1A(指针)指针指针+1YA(指针)NN1N2大数ST1ST2ST3程序清单:ORG8000HSTART:CLRC;进位位清零MOVDPTR,#ST1;设数据指针MOVXA,@DPTR;取第一个数MOVR2,A;暂存R2INCDPTRMOVXA,@DPTR;取第二个数SUBBA,R
本文标题:第二章 MCS-51指令系统及汇编语言程序设计
链接地址:https://www.777doc.com/doc-3376851 .html