单片机教案课件80C51的指令系统.ppt_第1页
单片机教案课件80C51的指令系统.ppt_第2页
单片机教案课件80C51的指令系统.ppt_第3页
单片机教案课件80C51的指令系统.ppt_第4页
单片机教案课件80C51的指令系统.ppt_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/11/27,1,第3章80C51的指令系统,指令格式及常用符号,3.1,80C51的寻址方式,3.2,数据传送指令(29条),3.3,算数运算指令(24条),3.4,逻辑运算与循环类指令(24条),3.5,控制转移类指令(17条),3.6,位操作类指令(17条),3.7,2019/11/27,2,3.1指令格式及常用符号,3.1.1指令系统的概述,指令是计算机根据人的意图所执行的操作命令,是与计算机内部结构、硬件资源密切联系的。某种计算机所有指令的集合称为指令系统。MCS-51/52系列单片机的指令系统共有111条指令编码少:其中49条是单字节指令,45条是双字节指令,17条是三字节指令。执行周期短:其中有64条指令的执行时间为单机器周期,45条指令的执行时间为双机器周期,乘法和除法指令只需4个机器周期。位操作指令丰富:,机器语言:计算机唯一能够识别的指令,由二进制数“0”和“1”编码构成,也成为目标代码,执行速度最快。汇编语言指令是在机器语言基础上,用英文单词或英文单词缩写表示机器语言指令的操作码(助记符)用符号表示操作数或者操作数的地址。将汇编语言翻译为机器语言的目标代码称为汇编。,2019/11/27,3,2019/11/27,4,书写格式,注意:操作码不能缺少操作数个数可为:1、2、3个2个操作数的指令,目的操作数在左边,一般格式标号:操作码目的操作数,源操作数;注释,3.1.2符号指令的书写格式,2019/11/27,5,描述符号,Rn(n=07)-当前工作寄存器组中的寄存器R0R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1-间址寄存器前缀#data-8位立即数#data16-16位立即数direct-片内低128个RAM单元地址及SFR地址addr11-11位目的地址addr16-16位目的地址rel-8位地址偏移量,范围:128127bit-片内RAM位地址、SFR的位地址()-表示地址单元或寄存器中的内容/-位操作数的取反操作前缀()-表示所指地址单元的内容-表示数据传输的方向,2019/11/27,6,3.2.1寄存器寻址,寻址方式:寻找(源)操作数或指令转移地址的方式80C51单片机有7种寻址方式,3.280C51的寻址方式,操作数在寄存器中寻址空间:R0R7、A、B(AB形式)和DPTR,特点:传送和执行速度快,【例】若(R0)=30H,,执行MOVA,R0后,(A)=30H,2019/11/27,7,3.2.2直接寻址,操作码后字节存放的是操作数的地址寻址空间:片内RAM低128字节SFR(符号形式),另一类直接寻址是转移目标地址的寻址。如:LJMPADDR16,【例】若(50H)=3AH,,执行MOVA,50H后,(A)=3AH,2019/11/27,8,3.2.3寄存器间接寻址,寄存器中的内容是操作数的地址寻址空间:片内RAM(Ri、SP)片外RAM(Ri、DPTR),【例】若(R0)=30H,(30H)=5AH,执行MOVA,R0后,(A)=5AH,片内:MOV片外:MOVX,2019/11/27,9,3.2.4立即寻址,操作数在指令编码中寻址空间:ROM,对于MOVDPTR,#2100H指令,立即数高8位“21H”装入DPH,【例】执行MOVA,#50H,结果:(A)=50H,2019/11/27,10,3.2.5变址寻址,操作数地址:基地址+偏移量寻址空间:ROM,变址寻址还用于跳转指令,如JMPA+DPTR,【例】(A)0FH,(DPTR)=2400H,执行MOVCA,A+DPTR”后,结果:(A)=88H,2019/11/27,11,3.2.6相对寻址,用于跳转指令,实现程序分支,Rel常用符号地址表示,离源地址不要超过(128127),【例】若rel为75H,PSW.7为1,JCrel存于1000H开始的单元。,执行JCrel指令后,程序将跳转到1077H单元取指令并执行。,2019/11/27,12,3.2.7位寻址,寻址位数据寻址空间片内RAM位空间SFR位空间,【例】位地址00H内容为1,MOVC,00H执行后,位地址PSW.7的内容为1。,位寻址方式实质属于位的直接寻址。,2019/11/27,13,3.3数据传送类指令(29条),一般不影响标志寄存器PSW的状态。,传送类指令有两大类一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP,2019/11/27,14,3.3.1一般传送指令,16位传送(仅1条),MOVDPTR,#data16;DPTRdata16,例:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。,8位传送,通用格式:MOV,;,2019/11/27,15,以A为目的,【例3-9】若(R1)=20H,(20H)=55H。执行指令MOVA,R1后,(A)=55H。,1、将R1内容传送至AMOVA,R12、将立即数16H传送至AMOVA,#16H3、将R0指示的内存单元20H单元传送至AMOVR0,#20HMOVA,R04、将30H的内容传送至AMOVA,30H,2019/11/27,16,2019/11/27,17,以Rn为目的,【例3-10】执行指令MOVR6,#50H后,(R6)=50H例:如何将R1的内容传送给R2?,MOVA,R1MOVR2,A,2019/11/27,18,以direct为目的,【例3-11】若(R1)=50H,(50H)=18H,执行指令MOV40H,R1后,(40H)=18H,2019/11/27,19,以Ri为目的,【例3-12】若(R1)=30H,(A)=20H,执行指令MOVR1,A后,(30H)=20H。,1、将20H开始的32个单元全部清0MOVA,#00H;A000HMOVR0,#20H;R020HMOVR7,#20H;R7计数,R732LP1:MOVR0,A;R0指示单元清0INCR0;R0R0+1DJNZR7,LP1;R7R7-1,2019/11/27,20,2019/11/27,21,3.3.2特殊传送指令,以DPTR内容为基址,读ROM中常数表项指令MOVC,ROM中可以存放程序代码,还经常存放常数表,MOVCA,A+DPTR;A(A)+(DPTR),以PC内容为基址,MOVCA,A+PC;A(A)+(PC),常数表存放约束小,称为远程查表指令。占用DPTR,常数表存放约束大,称为近程查表指令。不占用DPTR,1、LED显示器09的字形显示码存放在程序存储器中的情况如下:210AH:0C0H字符“0”210BH:0F9H字符“1”210CH:0A4H字符“2”210DH:0B0H字符“3”从段码表中取出“3”并送LED端口为1200H显示,可用如下指令完成:2100H:MOVA,#0AH2102H:MOVCA,A+PC2103H:MOVDPTR,#1200H2106H:MOVXDPTR,A,2019/11/27,22,2019/11/27,23,读片外RAM,读片外RAM及接口单元数据的指令MOVX,片外RAM中经常存放数据采集与处理的中间数据,MOVXA,DPTR;A(DPTR)MOVXA,Ri;A(Ri),写片外RAM,MOVXDPTR,A;(DPTR)AMOVXRi,A;(Ri)A,注意:用Ri寻址时,高8位地址由P2口提供,1、将74H的内容送到片外RAM3000H单元MOVA,74HMOVDPTR,#3000HMOVXDPTR,A2、将片外RAM2040H的内容送到片内RAM20H单元。MOVDPTR#2040HMOVXA,DPTRMOV20H,A,2019/11/27,24,2019/11/27,25,入栈指令PUSH,堆栈操作指令PUSH和POP,堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。,PUSHdirect;SP(SP)1,(SP)(direct),出栈指令POP,POPdirect;(direct)(SP),SP(SP)1,注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。,2019/11/27,26,利用堆栈完成40H与50H单元内容的交换的示例,MOVSP,#6FH;将堆栈设在70H以上RAM空间PUSH40H;将40H单元的“23H”入栈,之后(SP)=70HPUSH50H;将50H单元的“45H”入栈,之后(SP)=71HPOP40H;将SP指向的71H单元的内容弹到40H单元,之后(SP)=70HPOP50H;将SP指向的70H单元的内容弹到50H单元,之后(SP)=6FH,(a)初始状态(b)2条PUSH指令执行后(c)2条POP指令执行后,2019/11/27,27,字节交换指令XCH,数据交换指令XCH、XCHD和SWAP,数据交换属于同时进行的双向传送,【例3-20】若(R0)=80H,(A)=20H。执行指令XCHA,R0后,(A)=80H,(R0)=20H。,2019/11/27,28,半字节交换指令XCHD,【例3-21】若(R0)30H,(30H)67H,(A)20H。执行指令XCHDA,R0指令后,(A)27H,(30H)60H。,XCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的高低4位互换,【例3-22】若(A)30H,执行指令SWAPA后,(A)03H。,1、编程将内部数据存储器20H30H内容置1.2、试编写8字节外部数据存储器到内部数据存储器的数据传送程序,外部数据存储器地址为40H47H,内部数据存储器的范围为30H37H。,2019/11/27,29,2019/11/27,30,3.4算数运算类指令(24条),算数运算结果要影响PSW中标志位,CY为1,无符号数(字节)加减发生进位或借位OV为1,有符号数(字节)加减发生溢出错误溢出标志位OV=D7CD67=10=1AC为1,十进制数(BCD码)加法的结果应调整P为1,存于累加器A中操作结果的“1”的个数为奇数,标志位意义,标志位与相关指令影响,2019/11/27,31,算数运算影响标志位示例,【例3-23】有2个参与相加的机器数,一个是84H,另一个是8DH。试分析运算过程及其对状态标志的影响。,结果:CY为1;AC为1;OV为1;P为0,2019/11/27,32,3.4.1加法,不带进位加法,【例3-24】若有2个无符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令ADDA,30H后的结果。,由于对无符号数相加,要考察CY。由上页图可知,CY=1,因此知道运算的结果发生了进位,即实际值应该是100H+11H。,所以,编程者应确保单字节无符号数运算结果不要超过255,2019/11/27,33,【例3-25】若有2个有符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令ADDA,30H后的结果。,有符号数相加,只需考察溢出标志OV即可。由上图可见OV=1,因此可知运算的结果发生了溢出,这说明累加器A中的结果已经不是正确的值了。溢出标志位OV=D7CD6C=10=1,编程者应确保单字节有符号数运算结果不超过-128127。否则,就要将数据用多字节表示或在程序运行中对状态标志进行判断:,无符号数用JNC或JC,有符号数要用JNB或JB。,2019/11/27,34,带进位加法(这组指令方便了多字节加法的实现),这4条指令的功能是把源操作数所指示的内容和A中的内容及进位标志Cy相加,结果存入A中。运算结果对PSW中相关位的影响同上述的4条加法指令。带进位加法指令一般用于多字节数的加法运算,低位字节相加时和可能产生进位,可以通过带进位加法指令将低位字节的进位加到高字节上去。高位字节求和时必须使用带进位的加法指令。,多了加进位标志位CY,主要用于多字节的加运算,两个双字节数存放在内部RAM30H、31H单元及40H、41H单元,设低位在前,高位在后,求和结果存放在30H、31H。,MOVA,30H;取低8位ADDA,40H;低8位相加MOV30H,A;存结果MOVA,31H;取高8位ADDCA,41H;高8位带进位加MOV31H,A;存结果,例:,2019/11/27,36,加1,这一组指令的功能是将操作数所指定的单元或寄存器中的内容加1。其结果送回原操作数单元中。,设R0=7EH,DPTR=10FEH,(7EH)=0FFH,(7FH)=38H,执行下列指令INCR0;(7EH)=00HINCR0;R0=7FHINCR0;(7FH)=39HINCDPTR;DPTR=10FFHINCDPTR;DPTR=1100HINCDPTR;DPTR=1101H,2019/11/27,37,2019/11/27,38,十进制调整,DAA;调整A的内容为正确的BCD码,两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。注意:该指令必须用在加法指令后边否则出错。,这条指令是在进行BCD码加法运算时,用来对BCD码的加法运算结果自动进行修正(主要是高、低4位是否+6)。另外,对BCD码的减法运算不能用此指令来进行修正。,执行十进制调整指令后,PSW中的CY表示结果的百位值,计算机中只能使用二进制数,所有在计算机中使用的字符和数字都要用特定的二进制编码表示,编码方法很多,常用的有ASCII码(AmericanStandardCodeforInformationInterchange)和BCD码。,BCD码(BinaryCodedDecimal),BCD码的概念用四位二进制数表示一个十进制数码的编码方法,称为二-十进制码,即BCD码。BCD码表示的数叫BCD数,即二进制编码的十进制数。常用8421BCD码:,十进制数0123456789BCD码0000000100100011010001010110011110001001,2019/11/27,40,2019/11/27,41,3.4.2减法,带借位减法,用此组指令完成不带借位的减法,只需先清CY为0即可,CY为1,表示D7位需借位AC为1,表示D3位需借位OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”,2019/11/27,42,【例3-25】若(A)=C9H,(R2)=54H,(CY)=1,试分析指令SUBBA,R2执行后,累加器的内容及状态标志。,即:(A)=74H,(CY)=0,(AC)=0,(OV)=1,(P)=0。,分析:数据为无符号类型。该指令执行前CY=1,说明此指令不是运算的最低字节,即在此指令执行之前,一定执行过低字节的减法并产生了借位。因此,本次相减(201-1-84=116=74H)结果为74H。,2019/11/27,43,减1,这组指令仅DECA影响P标志。其余指令都不影响标志位的状态。无DPTR减1指令。,2019/11/27,44,3.4.3乘法,仅有一条乘法指令,MULAB;A与B相乘;BA(A)(B),无符号结果:B中为积的高8位,A中为积的低8位。CY总是被清0;OV=1表示积大于FFH,此条指令的功能是实现两个8位无符号数的乘法操作,2个数分别存在累加器A和寄存器B中。乘积为16位,积的低8位在A中,积的高8位在B中。若积大于255,溢出标志位OV置位,否则复位,而Cy位总是为0。乘法指令是整个指令系统中执行时间最长的2条指令之一,它需4个机器周期(48个振荡周期)才能完成一次乘法操作。,2019/11/27,45,3.4.4除法,仅有一条除法指令DIVAB;A(A)(B)(商),BAB(余),无符号结果:A中为商的整数部分,B中为余数CY总是被清0;OV=1表示除数为0,除法指令可以实现两个8位无符号数的除法。被除数放在A中,除数放在B中。指令执行后,商放在A中而余数在B中。进位标志Cy和溢出标志OV均清0,只有当除数为0时,A和B中的内容为不确定值,此时OV位置位,说明除法溢出。指令的执行时间也是4个机器周期,和乘法指令相同是执行时间最长的2条指令之一。,2019/11/27,46,3.5逻辑运算与循环类指令(24条),3.5.1逻辑与,逻辑:与、或、异或、清0和取反循环:左、右移,带进位位左、右移,【例】(A)=C3H,(R0)=AAH,执行指令ANLA,R0后,(A)=82H【例】检测P1口低四位高四位不关心采用指令MOVA,P1ANLA,#0FH,与操作常用于对某些不关心位进行“清0”,同时“保留”另一些关心位,例:,MOVA,30;取数ANLA,#0FH;屏蔽高4位MOV40H,A;存低4位MOVA,30H;再取ANLA,#0F0H;屏蔽低4位SWAPA;高低4位交换MOV41H,A;存高4位,压缩BCD码拆成单字节BCD码,设30H单元内容为56H,将高低四位拆开存放在40H,和41H,00000110B06H,01010110B56H00001111B0FH,01010000B50H,01010110B56H11110000BF0H,与操作:,10(1)将R0的内容传送到R1;MOVA,R0MOVR1,A(2)内部RAM单元60H的内容传送到寄存器R2MOVR2,60H(3)外部RAM单元1000H的内容传送到内部RAM单元60H;MOVDPTR,#1000HMOVXA,DPTRMOV60H,A,2019/11/27,48,(4)外部RAM单元1000H的内容传送到寄存器R2;MOVDPTR,#1000HMOVXA,DPTRMOVR2,A(5)外部RAM单元1000H的内容传送到外部RAM单元2000H。MOVDPTR,#1000HMOVXA,DPTRMOVDPTR,#2000HMOVXDPTR,A,2019/11/27,49,13若(50H)=40H,试写出执行以下程序段后累加器A、寄存器R0及内部RAM的40H、41H、42H单元中的内容各为多少?MOVA,50HMOVR0,AMOVA,#00HMOVR0,AMOVA,#3BHMOV41H,AMOV42H,41H(A)=3BH,(R0)=40H,(40H)=00H,(41H)=3BH,(42H)=3BH。,2019/11/27,50,16试编写程序,完成两个16位数的减法:7F4DH2B4EH,结果存入内部RAM的30H和31H单元,30H单元存差的高8位,31H单元存差的低8位。CLRCYMOVA,#4DHSUBBA,#4EHMOV31H,A;保存低字节相减结果MOVA,#7FHSUBBA,#2BHMOV30H,A;保存高字节相减结果,2019/11/27,51,17试编写程序,将R1中的低4位数与R2中的高4位数合并成一个8位数,并将其存放在R1中MOVA,R1ANLA,#0FHMOVR1,AMOVA,R2ANLA,#0F0HORLA,R1,2019/11/27,52,2019/11/27,53,3.5.2逻辑或,【例】(A)=C3H,(R0)=55H,执行指令ORLA,R0后,(A)=D7H【例】将P1口的高4位设置为高电平,其他位不变。ORLP1,#0F0H,或操作常用于对某些关心位进行“置1”,不关心位保持不变,将累加器的A低四位数据送P1口的高四位,P1口的低四位不变。ANLA,#0FHSWAPAANLP1,#0FHORLP1,A,2019/11/27,54,2019/11/27,55,3.5.3逻辑异或,【例】(P1)=59H,高四位取反,其他位不变,执行指令XRLP1,#0F0H;结果(A)=A9H,异或操作常用于对某些关心位进行“取反”,不关心位保持不变,3.5.4累加器清0和取反,把A的内容取反,结果仍在A中。,CPLA,CLRA,例若(A)=A5H,执行指令CLRA之后,(A)=00H。,把A的内容清0,结果仍在A中。,利用取反指令,对40H单元内容求补。MOVA,40HCPLAINCAMOV40H,A,2019/11/27,58,3.5.4逻辑清0和取反,3.5.5累加器循环移位,2019/11/27,59,3.6控制转移类指令(17条),3.6.1无条件转移,短跳转,AJMPaddr11;PC(PC)+2,PC100addr11,指令AJMPaddr11称绝对转移指令,指令中包含有11位的转移地址,即转移的目标地址是在下一条指令地址开始的2k字节范围内。它把PC的高5位与指令第一字节中的第75位(第40位为00001)和指令的第二字中的8位合并在一起构成16位的转移地址。该指令为两个字节,在实际使用中要注意跳转出范围的问题。,2019/11/27,60,长跳转,LJMPaddr16;PCaddr16,相对转移,SJMPrel;PC(PC)+2,PC(PC)+rel,目标地址rel对应范围为127128。,指令LJMPaddr16称长跳转指令,允许转移的目标地址在64kB空间的范围内。,指令SJMPrel是无条件相对转移指令又称短转移指令。该指令为双字节,指令中的相对地址是一个带符号的8位偏移量其范围为-128+127。负数表示向后转移,正数表示向前转移,该指令执行后程序转移到当前PC与rel之和所指示的单元。,2019/11/27,61,【例】若“NEWADD”为地址1022H,PC的当前值为1000H。执行指令SJMPNEWADD后,程序将转向1022H处执行(rel=20H=1022H1000H2)。解析如下:,ORG0000HLJMPMAINORG0040HMAIN:MOVA,#0FEHLOOP:MOVP2,ALCALLD_1sRLAAJMPLOOP,D_1s:MOVR6,#100D10ms:MOVR5,#40DL:MOVR4,#123NOPDJNZR4,$DJNZR5,DLDJNZR6,D10msRETEND,2019/11/27,62,2019/11/27,63,散转移(间接长转移),JMPA+DPTR;PC(PC)+1,PC(A)+(DPTR),可完成多条判跳指令的功能,【例】功能:当(A)=00H时,程序将转到ROUT0处执行;当(A)=02H时,程序将转到ROUT1处执行;。,MOVDPTR,#TABLEJMPA+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT3,2019/11/27,64,3.6.2条件转移,累加器判0转移,比较不等转移,比较两个操作数,不相等则转移,相等顺序执行作减法,影响标志位CY,,左右,CY=0,无借位,左右,CY=1,有借位,2019/11/27,65,减1不为0转移,2019/11/27,66,1、将20H开始的32个单元全部清0将数据00H0FH写入20H开始的32个单元MOVA,#00H;A000HMOVR0,#20H;R020HMOVR7,#20H;R7计数,R732LP1:MOVR0,A;R0指示单元清0INCR0;R0R0+1INCADJNZR7,LP1;R7R7-1,将数据00H0FH写入RAM的30H3FH单元。可执行一下指令:MOVA,#00HMOVR0,#30HLOOP:MOVR0,AINCAINCR0CJNER0,#40H,LOOP,2019/11/27,67,2019/11/27,68,【例】有一段程序如下,该程序执行后,(A)=10+9+8+7+6+5+4+3+2+1=37H,MOV23H,#0AHCLRALOOPX:ADDA,23HDJNZ23H,LOOPXSJMP$,2019/11/27,69,3.6.3调用与返回,调用,指令执行时将返回地址入栈SP应设为合适值(默认值07H),ORG0000HLJMPMAINORG0040HMAIN:MOVA,#0FEHLOOP:MOVP2,ALCALLD_1sRLAAJMPLOOP,D_1s:MOVR6,#100D10ms:MOVR5,#40DL:MOVR4,#123NOPDJNZR4,$DJNZR5,DLDJNZR6,D10msRETEND,2019/11/27,70,2019/11/27,71,【例3】若(SP)=07H,标号“XADD”表示的实际地址为0345H,PC的当前值为0123H。执行指令ACALLXADD后:返回地址为:(PC)+2=0125H。其低8位的25H压入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论