《第3章 80C51的指令系统.ppt》由会员分享,可在线阅读,更多相关《第3章 80C51的指令系统.ppt(59页珍藏版)》请在三一办公上搜索。
1、2023/2/21,1,第3章 80C51的指令系统,指令格式及常用符号,3.1,80C51的寻址方式,3.2,数据传送指令(29条),3.3,算数运算指令(24条),3.4,逻辑运算与循环类指令(24条),3.5,控制转移类指令(17条),3.6,位操作类指令(17条),3.7,2023/2/21,2,3.1 指令格式及常用符号,3.1.1 机器指令的字节编码形式,8位编码仅为操作码,单字节指令(49条),机器指令:计算机能直接识别和执行的指令。,如:INC A 编码为:,即:04H,8位编码含操作码和寄存器编码,如:MOV A,R0 编码为:,即:E8H,2023/2/21,3,双字节指令
2、(45条),三字节指令(17条),如:MOV A,#50H 编码为:,即:74H 50H,如:MOV 20H,#50H 编码为:,即:75H 20H 50H,2023/2/21,4,书写格式,注意:操作助记符不能缺少操作数个数可为:1、2、3个2个操作数的指令,目的操作数在左边,一般格式操作助记符 目的操作数,源操作数;注释,3.1.2 符号指令的书写格式,2023/2/21,5,描述符号,Rn(n=07)-当前工作寄存器组中的寄存器R0R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1-间接寻址或变址寻址前缀#data-8位立即数/#data16-16位立即数direct-片内
3、低128个RAM单元地址及SFR地址addr11-11位目的地址addr16-16位目的地址rel-8位地址偏移量,范围:128127bit-片内RAM位地址、SFR的位地址()-表示 地址单元或寄存器中的内容/-位操作数的取反操作前缀,2023/2/21,6,3.2.1 寄存器寻址,寻址方式:寻找(源)操作数或指令转移地址的方式80C51单片机有7种寻址方式,3.2 80C51的寻址方式,操作数在寄存器中寻址空间:R0R7、A、B(AB形式)和DPTR,特点:传送和执行速度快,【例】若(R0)=30H,,执行MOV A,R0后,(A)=30H,2023/2/21,7,3.2.2 直接寻址,操
4、作码后字节存放的是操作数的地址寻址空间:片内RAM低128字节SFR(符号形式),另一类直接寻址是转移目标地址的寻址。如:LJMP ADDR16,【例】若(50H)=3AH,,执行MOV A,50H后,(A)=3AH,2023/2/21,8,3.2.3 寄存器间接寻址,寄存器中的内容是操作数的地址寻址空间:片内RAM(Ri、SP)片外RAM(Ri、DPTR),【例】若(R0)=30H,(30H)=5AH,执行MOV A,R0后,(A)=5AH,片内:MOV片外:MOVX,2023/2/21,9,MOV R7,#20 MOV R0,#30HLOOP:MOV A,R0 INC R0 DJNZ R7
5、,LOOP,3.2.3 寄存器间接寻址,2023/2/21,10,3.2.4 立即寻址,操作数在指令编码中寻址空间:ROM,对于MOV DPTR,#2100H指令,立即数高8位“21H”装入DPH,【例】执行MOV A,#50H,结果:(A)=50H,2023/2/21,11,3.2.5 变址寻址,操作数地址:基地址+偏移量寻址空间:ROM,变址寻址还用于跳转指令,如JMP A+DPTR,【例】(A)0FH,(DPTR)=2400H,执行MOV A,A+DPTR”后,结果:(A)=88H,2023/2/21,12,3.2.6 相对寻址,用于跳转指令,实现程序分支,Rel常用符号地址表示,离源地
6、址不要超过(128127),【例】若rel为75H,PSW.7为1,JC rel存于1000H开始的单元。,执行JC rel指令后,程序将跳转到1077H单元取指令并执行。,基本用人工标号的方式来表示目标位置,2023/2/21,13,3.2.7 位寻址,寻址位数据寻址空间片内RAM位空间SFR位空间,【例】位地址00H内容为1,MOV C,00H执行后,位地址PSW.7的内容为1。,位寻址方式实质属于位的直接寻址。,2023/2/21,14,3.3 数据传送类指令(29条),一般不影响标志寄存器PSW的状态。,传送类指令有两大类 一般传送(MOV)特殊传送,如:MOVC MOVX PUSH、
7、POP XCH、XCHD SWAP,2023/2/21,15,3.3.1 一般传送指令,16位传送(仅1条),MOV DPTR,#data16;DPTR data16,例:执行指令 MOV DPTR,#1234H 后(DPH)=12H,(DPL)=34H。,8位传送,通用格式:MOV,;,2023/2/21,16,以A为目的,【例3-9】若(R1)=20H,(20H)=55H。执行指令 MOV A,R1 后,(A)=55H。,2023/2/21,17,以Rn为目的,【例3-10】执行指令 MOV R6,#50H 后,(R6)=50H,2023/2/21,18,以direct为目的,【例3-11
8、】若(R1)=50H,(50H)=18H,执行指令 MOV 40H,R1 后,(40H)=18H,2023/2/21,19,以Ri为目的,【例3-12】若(R1)=30H,(A)=20H,执行指令 MOV R1,A 后,(30H)=20H。,2023/2/21,20,3.3.2 特殊传送指令,以DPTR内容为基址,读ROM中常数表项指令MOVC,ROM中可以存放程序代码,还经常存放常数表,MOVC A,A+DPTR;A(A)+(DPTR),以PC内容为基址,MOVC A,A+PC;A(A)+(PC),常数表存放约束小,称为远程查表指令。占用DPTR,常数表存放约束大,称为近程查表指令。不占用D
9、PTR,2023/2/21,21,读片外RAM,读片外RAM及接口单元数据的指令MOVX,片外RAM中经常存放数据采集与处理的中间数据,MOVX A,DPTR;A(DPTR)MOVX A,Ri;A(Ri),写片外RAM,MOVX DPTR,A;(DPTR)AMOVX Ri,A;(Ri)A,注意:用Ri寻址时,高8位地址由P2口提供,2023/2/21,22,若将片外RAM中2020H单元中的内容送给A。,方法一MOV P2,#20HMOV R0,#20HMOVX A,R0方法二MOV DPTR,#2020HMOVX A,DPTR,2023/2/21,23,入栈指令PUSH,堆栈操作指令PUSH
10、和POP,堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。,PUSH direct;SP(SP)1,(SP)(direct),出栈指令POP,POP direct;(direct)(SP),SP(SP)1,注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。,2023/2/21,24,利用堆栈完成40H与50H单元内容的交换的示例,MOV SP,#6FH;将堆栈设在70H以上RAM空间PUSH 40H;将40H单元的“23H”入栈,之后(SP)=70H PUSH 5
11、0H;将50H单元的“45H”入栈,之后(SP)=71HPOP 40H;将SP指向的71H单元的内容弹到40H单元,之后(SP)=70HPOP 50H;将SP指向的70H单元的内容弹到50H单元,之后(SP)=6FH,(a)初始状态(b)2条PUSH指令执行后(c)2条POP指令执行后,2023/2/21,25,字节交换指令XCH,数据交换指令XCH、XCHD和SWAP,数据交换属于同时进行的双向传送,【例3-20】若(R0)=80H,(A)=20H。执行指令 XCH A,R0 后,(A)=80H,(R0)=20H。,2023/2/21,26,半字节交换指令XCHD,【例3-21】若(R0)3
12、0H,(30H)67H,(A)20H。执行指令 XCHD A,R0 指令后,(A)27H,(30H)60H。,XCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的高低4位互换,【例3-22】若(A)30H,执行指令SWAP A后,(A)03H。,2023/2/21,27,3.4 算数运算类指令(24条),算数运算结果要影响PSW中标志位,CY为1,无符号数(字节)加减发生进位或借位 OV为1,有符号数(字节)加减发生溢出错误 AC为1,十进制数(BCD码)加法的结果应调整 P为1,存于累加器A中操作结果的“1”的个数为奇数,标志位意义,标志位与相关指令影响,2023/2/21,
13、28,算数运算影响标志位示例,【例3-23】有2个参与相加的机器数,一个是84H,另一个是8DH。试分析运算过程及其对状态标志的影响。,结果:CY为1;AC为1;OV为1;P为0,2023/2/21,29,3.4.1 加法,不带进位加法,【例3-24】若有2个无符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令 ADD A,30H 后的结果。,由于对无符号数相加,要考察CY。由上页图可知,CY=1,因此知道运算的结果发生了进位,即实际值应该是100H+11H。,所以,编程者应确保单字节无符号数运算结果不要超过255,2023/2/21,30,【例3-2
14、5】若有2个有符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令 ADD A,30H 后的结果。,有符号数相加,只需考察溢出标志OV即可。由上图可见OV=1,因此可知运算的结果发生了溢出,这说明累加器A中的结果已经不是正确的值了。,编程者应确保单字节有符号数运算结果不超过-128127。否则,就要将数据用多字节表示或在程序运行中对状态标志进行判断:,无符号数用JNC或JC,有符号数要用JNB或JB。,JCrel;如果C=1,则转移,否则顺序执行 JNCrel;如果C=0,则转移,否则顺序执行JBbit,rel;如果bit=1,则转移,否则顺序执行 JN
15、Bbit,rel;如果bit=0,则转移,否则顺序执行,2023/2/21,31,带进位加法(这组指令方便了多字节加法的实现),加1,2023/2/21,32,十进制调整,DA A;调整A的内容为正确的BCD码,两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。,当A中低4位出现了非BCD码(10101111)或低4位的进位AC=1,则应在低4位加6调整。当A中高4位出现了非BCD码(10101111)或高4位的进位CY=1,则应在高4位加6调整。,执行十进制调整指令后,PSW中的CY表示结果的百位值,2023/2/21,33,2023/2/21,34,3.4.2 减法,带借位减
16、法,用此组指令完成不带借位的减法,只需先清CY为0即可,CY为1,表示D7位需借位 AC为1,表示D3位需借位 OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”,2023/2/21,35,【例3-25】若(A)=C9H,(R2)=54H,(CY)=1,试分析指令SUBB A,R2执行后,累加器的内容及状态标志。,即:(A)=74H,(CY)=0,(AC)=0,(OV)=1,(P)=0。,分析:数据为无符号类型。该指令执行前CY=1,说明此指令不是运算的最低字节,即在此指令执行之前,一定执行过低字节的减法并产生了借位。因此,本次相减(201-1-84=116=74H)结果为74H
17、。,2023/2/21,36,减1,这组指令仅 DEC A 影响P标志。其余指令都不影响标志位的状态。,2023/2/21,37,3.4.3 乘法,仅有一条乘法指令,MUL AB;A与B相乘,无符号 结果:B中为积的高8位,A中为积的低8位。CY总是被清0;OV=1表示积大于FFH,3.4.4 除法,仅有一条除法指令,DIV AB;A除以B,无符号 结果:A中为商的整数部分,B中为余数 CY总是被清0;OV=1表示除数为0,2023/2/21,38,3.5 逻辑运算与循环类指令(24条),3.5.1 逻辑与,逻辑:与、或、异或、清0和取反 循环:左、右移,带进位位左、右移,【例】(A)=C3H
18、,(R0)=AAH,执行指令 ANL A,R0 后,(A)=82H,与操作常用于对某些不关心位进行“清0”,同时“保留”另一些关心位,2023/2/21,39,例3-31:检测P1口低4位,高4位不关心。MOVA,P1ANLA,#0FH,2023/2/21,40,3.5.2 逻辑或,【例】(A)=C3H,(R0)=55H,执行指令 ORL A,R0 后,(A)=D7H,或操作常用于对某些关心位进行“置1”,不关心位保持不变,2023/2/21,41,例3-33:将P1口的高4位设置为高电平,其它位不变。ORLP1,#F0H,2023/2/21,42,3.5.3 逻辑异或,【例】(A)=C3H,
19、(R0)=AAH,执行指令 XRL A,R0 后,(A)=69H,异或操作常用于对某些关心位进行“取反”,不关心位保持不变,2023/2/21,43,例3-35:若(P1)=59H,将高4位取反,其它位不变。MOVP1,#59HXRLP1,#F0H,2023/2/21,44,3.5.4 逻辑清0和取反,3.5.5 累加器循环移位,2023/2/21,45,3.6 控制转移类指令(17条),3.6.1 无条件转移,短跳转,AJMP addr11;PC(PC)+2,PC100 addr11,2023/2/21,46,长跳转,LJMP addr16;PC addr16,相对转移,SJMP rel;P
20、C(PC)+2,PC(PC)+rel,目标地址rel 对应范围为 127 128。,2023/2/21,47,【例】若“NEWADD”为地址1022H,PC的当前值为1000H。执行指令 SJMP NEWADD 后,程序将转向1022H处执行(rel=20H=1022H1000H2)。解析如下:,2023/2/21,48,散转移,JMP A+DPTR;PC(PC)+1,PC(A)+(DPTR),可完成多条判跳指令的功能,【例】功能:当(A)=00H时,程序将转到 ROUT0处执行;当(A)=02H时,程序将转到 ROUT1处执行;。,MOV DPTR,#TABLE JMP A+DPTRTABL
21、E:AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT3,2023/2/21,49,3.6.2 条件转移,累加器判0转移,比较不等转移,2023/2/21,50,减1不为0转移,2023/2/21,51,【例】有一段程序如下,该程序执行后,(A)=10+9+8+7+6+5+4+3+2+1=37H,MOV 23H,#0AH CLR ALOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP$,2023/2/21,52,3.6.3 调用与返回,调用,指令执行时将返回地址入栈 SP应设为合适值(默认值07H),2023/2/21,53,【例3】若(SP
22、)=07H,标号“XADD”表示的实际地址为0345H,PC的当前值为0123H。执行指令 ACALL XADD 后:返回地址为:(PC)+2=0125H。其低8位的25H压入堆栈的08H单元,其高8位的01H压入堆栈的09H单元(低地址对应于低字节)。(PC)=0345H,程序转向目标地址0345H 处执行。,2023/2/21,54,返回,RETI专用于中断服务程序返回,它具有清除内部相应的中断状态触发器(以保证正确的中断逻辑)的功能。,3.6.4 空操作,NOP;PC(PC)+1,占1个周期、一个字节,2023/2/21,55,3.7 位操作类指令(17条),位操作是以位为单位进行的各种
23、操作。位操作指令中的位地址有4 种表示形式:,直接地址(如,0D5H);点操作符(如,0D0H.5、PSW.5等);位名称(如,F0);伪指令定义(如,MYFLAG BIT F0)。以上几种形式表示的都是PSW中的位5。,位操作指令中,位累加器要用“C”表示(注:而CY与具体的直接位地址D7H对应)。,试比较:A与ACC的关系?,2023/2/21,56,3.7.1 位传送,MOV bit,C;bit(CY)MOV C,bit;CY(bit),3.7.2 位状态设置,位清0,位置位,2023/2/21,57,3.7.3 位逻辑运算,位逻辑与,位逻辑或,位取反,2023/2/21,58,判CY转移,判bit转移,3.7.4 位判跳(条件转移),;若(CY)=1,PC(PC)+2+rel,否则顺次执行。;若(CY)=0;PC(PC)+2+rel;否则顺次执行。,;(bit)=1,PC(PC)+3+rel,否则顺次执行。;(bit)=1,PC(PC)+3+rel,bit 0,否则顺次执行;(bit)=0,PC(PC)+3+rel,否则顺次执行,Thank You!,
链接地址:https://www.31ppt.com/p-2669429.html