第3章80C51的指令系统_第1页
第3章80C51的指令系统_第2页
第3章80C51的指令系统_第3页
第3章80C51的指令系统_第4页
第3章80C51的指令系统_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

2019/9/6,1,第3章 80C51的指令系统,指令格式及常用符号,3.1,80C51的寻址方式,3.2,数据传送指令 (29条),3.3,算数运算指令 (24条),3.4,逻辑运算与循环类指令(24条),3.5,控制转移类指令 (17条),3.6,位操作类指令 (17条),3.7,2019/9/6,2,3.1 指令格式及常用符号,3.1.1 机器指令的字节编码形式,8位编码仅为操作码,单字节指令(49条),机器指令:计算机能直接识别和执行的指令。,如:INC A 编码为:,即:04H,8位编码含操作码和寄存器编码,如:MOV A,R0 编码为:,即:E8H,2019/9/6,3,双字节指令(45条),三字节指令(17条),如:MOV A,#50H 编码为:,即:74H 50H,如:MOV 20H,#50H 编码为:,即:75H 20H 50H,2019/9/6,4,书写格式,注意: 操作助记符不能缺少 操作数个数可为:1、2、3个 2个操作数的指令,目的操作数在左边,一般格式 操作助记符 目的操作数,源操作数;注释,3.1.2 符号指令的书写格式,2019/9/6,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位地址偏移量,范围:128127 bit-片内RAM位地址、SFR的位地址 ()-表示 地址单元或寄存器中的内容 / -位操作数的取反操作前缀,2019/9/6,6,3.2.1 寄存器寻址,寻址方式:寻找(源)操作数或指令转移地址的方式 80C51单片机有7种寻址方式,3.2 80C51的寻址方式,操作数在寄存器中 寻址空间: R0R7、A、B(AB形式) 和DPTR,特点: 代码短,传送和执行速度快,【例】若(R0)=30H,,执行MOV A,R0后,(A)=30H,2019/9/6,7,3.2.2 直接寻址,操作码后字节存放的是操作数的地址 寻址空间: 片内RAM低128字节 SFR(符号形式),另一类直接寻址是转移目标地址的寻址。如:LJMP ADDR16,【例】若(50H)=3AH ,,执行MOV A,50H后,(A)=3AH,2019/9/6,8,3.2.3 寄存器间接寻址,寄存器中的内容是操作数的地址 寻址空间: 片内RAM(Ri、SP) 片外RAM(Ri、DPTR),【例】若(R0)=30H,(30H)=5AH,执行MOV A,R0后,(A)=5AH,片内:MOV 片外:MOVX,2019/9/6,9,3.2.4 立即寻址,操作数在指令编码中 寻址空间: ROM,对于MOV DPTR,#2100H指令,立即数高8位“21H”装入DPH,【例】执行MOV A,#50H,结果:(A)=50H,2019/9/6,10,3.2.5 变址寻址,操作数地址:基地址+偏移量 寻址空间: ROM,变址寻址还用于跳转指令,如JMP A+DPTR,【例】(A)0FH,(DPTR)=2400H,执行MOV A,A+DPTR”后,结果:(A)=88H,2019/9/6,11,3.2.6 相对寻址,用于跳转指令,实现程序分支,Rel常用符号地址表示,离源地址不要超过(128127 ),【例】若rel为75H,PSW.7为1,JC rel存于1000H开始的单元。,执行JC rel指令后,程序将跳转到1077H单元取指令并执行。,2019/9/6,12,3.2.7 位寻址,寻址位数据 寻址空间 片内RAM位空间 SFR位空间,【例】位地址00H内容为1,MOV C,00H执行后,位地址PSW.7的内容为1。,位寻址方式实质属于位的直接寻址。,2019/9/6,13,3.3 数据传送类指令(29条),一般不影响标志寄存器PSW的状态。,传送类指令有两大类 一般传送( MOV ) 特殊传送,如: MOVC MOVX PUSH、POP XCH、XCHD SWAP,2019/9/6,14,3.3.1 一般传送指令,16位传送(仅1条),MOV DPTR,#data16; DPTR data16,例:执行指令 MOV DPTR,#1234H 后 (DPH)=12H,(DPL)=34H。,8位传送,通用格式: MOV , ;,2019/9/6,15,以A为目的,【例3-9】若(R1)= 20H,(20H)= 55H。执行指令 MOV A,R1 后,(A)= 55H。,2019/9/6,16,以Rn为目的,【例3-10】执行指令 MOV R6,#50H 后,(R6)= 50H,2019/9/6,17,以direct为目的,【例3-11】若(R1)=50H,(50H)=18H,执行指令 MOV 40H,R1 后,(40H)=18H,2019/9/6,18,以Ri为目的,【例3-12】若(R1)=30H,(A)=20H,执行指令 MOV R1,A 后,(30H)=20H。,2019/9/6,19,3.3.2 特殊传送指令,以DPTR内容为基址,读ROM中常数表项指令MOVC,ROM中可以存放程序代码,还经常存放常数表,MOVC A,A+DPTR;A (A)+(DPTR),以PC内容为基址,MOVC A,A+PC ;A (A)+(PC),常数表存放约束小,称为远程查表指令。占用DPTR,常数表存放约束大,称为近程查表指令。不占用DPTR,2019/9/6,20,读片外RAM,读片外RAM及接口单元数据的指令MOVX,片外RAM中经常存放数据采集与处理的中间数据,MOVX A,DPTR ;A (DPTR) MOVX A,Ri ;A (Ri),写片外RAM,MOVX DPTR,A ;(DPTR)A MOVX Ri,A ;(Ri)A,注意:用Ri寻址时,高8位地址由P2口提供,2019/9/6,21,入栈指令PUSH,堆栈操作指令PUSH和POP,堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。 80C51的堆栈设在片内RAM低端的128个单元,向上生长。,PUSH direct ;SP(SP)1,(SP)(direct),出栈指令POP,POP direct ;(direct)(SP),SP (SP)1,注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。,2019/9/6,22,利用堆栈完成40H与50H单元内容的交换的示例,MOV SP,#6FH;将堆栈设在70H以上RAM空间 PUSH 40H ;将40H单元的“23H”入栈,之后(SP)=70H PUSH 50H ;将50H单元的“45H”入栈,之后(SP)=71H POP 40H ;将SP指向的71H单元的内容弹到40H单元,之后(SP)=70H POP 50H ;将SP指向的70H单元的内容弹到50H单元,之后(SP)=6FH,(a)初始状态 (b)2条PUSH指令执行后 (c)2条POP指令执行后,2019/9/6,23,字节交换指令XCH,数据交换指令XCH、XCHD和SWAP,数据交换属于同时进行的双向传送,【例3-20】若(R0)=80H,(A)=20H。 执行指令 XCH A,R0 后, (A)=80H,(R0)=20H。,2019/9/6,24,半字节交换指令XCHD,【例3-21】若(R0)30H,(30H)67H, (A)20H。执行指令 XCHD A,R0 指令后,(A)27H,(30H)60H。,XCHD是间址操作数的低半字节与A的低半字节互换。 SWAP是累加器的高低4位互换,【例3-22】若(A)30H,执行指令SWAP A后,(A)03H 。,2019/9/6,25,3.4 算数运算类指令(24条),算数运算结果要影响PSW中标志位,CY为1,无符号数(字节)加减发生进位或借位 OV为1,有符号数(字节)加减发生溢出错误 AC为1,十进制数(BCD码)加法的结果应调整 P为1,存于累加器A中操作结果的“1”的个数为奇数,标志位意义,标志位与相关指令影响,2019/9/6,26,算数运算影响标志位示例,【例3-23】有2个参与相加的机器数,一个是84H,另一个是8DH。试分析运算过程及其对状态标志的影响。,结果:CY为1;AC为1 ;OV为1 ;P为0,2019/9/6,27,3.4.1 加法,不带进位加法,【例3-24】若有2个无符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令 ADD A,30H 后的结果。,由于对无符号数相加,要考察CY。由上页图可知,CY=1,因此知道运算的结果发生了进位,即实际值应该是100H+11H。,所以,编程者应确保单字节无符号数运算结果不要超过255,2019/9/6,28,【例3-25】若有2个有符号数存于累加器A和RAM的30H单元,即(A)=84H,(30H)=8DH,试分析执行指令 ADD A,30H 后的结果。,有符号数相加,只需考察溢出标志OV即可。由上图可见OV=1,因此可知运算的结果发生了溢出,这说明累加器A中的结果已经不是正确的值了。,编程者应确保单字节有符号数运算结果不超过-128127。否则,就要将数据用多字节表示或在程序运行中对状态标志进行判断:,无符号数用JNC或JC,有符号数要用JNB或JB。,2019/9/6,29,带进位加法(这组指令方便了多字节加法的实现),加1,2019/9/6,30,十进制调整,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表示结果的百位值,2019/9/6,31,2019/9/6,32,3.4.2 减法,带借位减法,用此组指令完成不带借位的减法,只需先清CY为0即可,CY为1,表示D7位需借位 AC为1,表示D3位需借位 OV为1,表示“D6有借位D7无借位”或“D7有借位D6无借位”,2019/9/6,33,【例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。,2019/9/6,34,减1,这组指令仅 DEC A 影响P标志。其余指令都不影响标志位的状态。,2019/9/6,35,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,2019/9/6,36,3.5 逻辑运算与循环类指令(24条),3.5.1 逻辑与,逻辑:与、或、异或、清0和取反 循环:左、右移,带进位位左、右移,【例】(A)=C3H,(R0)=AAH,执行指令 ANL A,R0 后,(A)=82H,与操作常用于对某些不关心位进行“清0”,同时“保留”另一些关心位,2019/9/6,37,3.5.2 逻辑或,【例】(A)=C3H,(R0)=55H,执行指令 ORL A,R0 后,(A)=D7H,或操作常用于对某些关心位进行“置1”,不关心位保持不变,2019/9/6,38,3.5.3 逻辑异或,【例】(A)=C3H,(R0)=AAH,执行指令 XRL A,R0 后,(A)=69H,异或操作常用于对某些关心位进行“取反”,不关心位保持不变,2019/9/6,39,3.5.4 逻辑清0和取反,3.5.5 累加器循环移位,2019/9/6,40,CLR A; 将累加器A中的内容清零 CPL A: 将累加器A中的值按位取反,2019/9/6,41,3.6 控制转移类指令(17条),3.6.1 无条件转移,短跳转,AJMP addr11 ;PC (PC)+ 2,PC100 addr11,2019/9/6,42,长跳转,LJMP addr16 ;PC addr16,相对转移,SJMP rel ;PC (PC)+ 2,PC (PC)+ rel,目标地址rel 对应范围为 127 128。,2019/9/6,43,【例】若“NEWADD”为地址1022H,PC的当前值为1000H。执行指令 SJMP NEWADD 后,程序将转向1022H处执行(rel=20H= 1022H1000H2)。解析如下:,2019/9/6,44,散转移,JMP A+DPTR;PC (PC)+ 1,PC (A)+(DPTR),可完成多条判跳指令的功能,【例】功能:当(A)=00H时,程序将转到 ROUT0处执行;当(A)=02H时,程序将转到 ROUT1处执行;。,MOV DPTR,#TABLE JMP A+DPTR TABLE:AJMP ROUT0 AJMP ROUT1 AJMP ROUT2 AJMP ROUT3,2019/9/6,45,3.6.2 条件转移,累加器判0转移,比较不等转移,2019/9/6,46,减1不为0转移,2019/9/6,47,【例】有一段程序如下,该程序执行后, (A)=10+9+8+7+6+5+4+3+2+1=37H,MOV 23H,#0AH CLR A LOOPX:ADD A,23H DJNZ 23H,LOOPX SJMP $,2019/9/6,48,3.6.3 调用与返回,调用,指令执行时将返回地址入栈 SP应设为合适值(默认值07H),2019/9/6,49,【例3】若(SP)=07H,标号“XADD”表示的实际地址为0345H,PC的当前值为0123H。 执行指令 ACALL XADD 后: 返回地址为:(PC)+2=0125H。其低8位的25H压入堆栈的08H单元,其高8位的01H压入堆栈的09H单元(低地址对应于低字节)。

温馨提示

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

评论

0/150

提交评论