您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 第3章80C51单片机的指令系统
2020/2/101第3章80C51的指令系统指令格式及常用符号3.180C51的寻址方式3.2数据传送指令(29条)3.3算术运算指令(24条)3.4逻辑运算与循环类指令(24条)3.5控制转移类指令(17条)3.6位操作类指令(17条)3.72020/2/1023.1指令格式及常用符号3.1.1机器指令的字节编码形式8位编码仅为操作码单字节指令(49条)机器指令:计算机能直接识别和执行的指令。位号76543210字节opcode如:INCA编码为:00000100即:04H8位编码含操作码和寄存器编码位号76543210字节opcoderrr如:MOVA,R0编码为:11101000即:E8H2020/2/103双字节指令(45条)位号76543210字节opcodedata或direct三字节指令(17条)位号76543210字节opcodedata或directdata或direct如:MOVA,#50H编码为:0111010001010000即:74H50H如:MOV20H,#50H编码为:011101010100000001010000即:75H20H50H2020/2/104书写格式注意:操作助记符不能缺少操作数个数:1、2、3个2个操作数的指令,目的操作数在左边一般格式操作助记符[目的操作数][,源操作数][;注释]3.1.2符号指令的书写格式2020/2/105描述符号Rn(n=0~7)-当前工作寄存器组中的寄存器R0~R7之一Ri(i=0,1)-当前工作寄存器组中的寄存器R0或R1@----------间址寄存器前缀#data------8位立即数#data16-----16位立即数direct------片内低128个RAM单元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范围:-128~+127bit---------片内RAM位地址、SFR的位地址(×)------表示×地址单元或寄存器中的内容/----------位操作数的取反操作前缀2020/2/1063.2.1寄存器寻址寻址方式:寻找(源)操作数或指令转移地址的方式80C51单片机有7种寻址方式3.280C51的寻址方式操作数在寄存器中寻址空间:R0~R7、A、B(AB形式)和DPTR30H00HACCSFRR030HMOVA,R0E8HROMRAM操作数在R0特点:传送和执行速度快【例】若(R0)=30H,执行MOVA,R0后,(A)=30H2020/2/1073.2.2直接寻址操作码后字节存放的是操作数的地址寻址空间:片内RAM低128字节SFR(符号形式)3AH50HACCSFR3AHMOVA,50HE5HROMRAM50H操作数在50H单元另一类直接寻址是转移目标地址的寻址。如:LJMPADDR16【例】若(50H)=3AH,执行MOVA,50H后,(A)=3AH2020/2/1083.2.3寄存器间接寻址寄存器中的内容是操作数的地址寻址空间:片内RAM(@Ri、SP)片外RAM(@Ri、@DPTR)5AH30HACCSFR5AHMOVA,@R0E6HROMRAM30HR0R0中的内容为操作数的地址【例】若(R0)=30H,(30H)=5AH执行MOVA,@R0后,(A)=5AH片内:MOV片外:MOVX2020/2/1093.2.4立即寻址操作数在指令编码中寻址空间:ROM00HACCSFR50HMOVA,#50H74HROMRAM50H操作码后紧跟操作数50H对于MOVDPTR,#2100H指令,立即数高8位“21H”装入DPH【例】执行MOVA,#50H结果:(A)=50H2020/2/10103.2.5变址寻址操作数地址:基地址+偏移量寻址空间:ROM00HACCSFR0FHMOVCA,@A+DPTR93HROMRAMDPL00HDPH24H88H2400H240FH240FH单元的内容88H为操作数+88H变址寻址还用于跳转指令,如JMP@A+DPTR【例】(A)=0FH(DPTR)=2400H执行MOVA,@A+DPTR”后结果:(A)=88H2020/2/10113.2.6相对寻址用于跳转指令,实现程序分支Rel常用符号地址表示,离源地址不要超过(-128~+127)00HPSWSFR10000000ROMRAM1002H=1000H+02H1077HJCrel40H75H1000H75H原PC值字节数当前PC值偏移量注意:此例中CY(PSW.7)为1+跳转到新PC处取指【例】若rel为75H,PSW.7为1,JCrel存于1000H开始的单元。执行JCrel指令后,程序将跳转到1077H单元取指令并执行。2020/2/10123.2.7位寻址寻址位数据寻址空间片内RAM位空间SFR位空间20HSFRMOVC,00HA2HROMRAM00H位地址00H位地址07HPSWPSW.7(或CY)11【例】位地址00H内容为1,MOVC,00H执行后,位地址PSW.7的内容为1。位寻址方式实质属于位的直接寻址。2020/2/10133.3数据传送类指令(29条)一般不影响标志寄存器PSW的状态。传送类指令有两大类一般传送(MOV)特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP2020/2/10143.3.1一般传送指令16位传送(仅1条)MOVDPTR,#data16;DPTR←data16例:执行指令MOVDPTR,#1234H后(DPH)=12H,(DPL)=34H。8位传送通用格式:MOV目的字节,源字节;2020/2/1015以A为目的dataAdata#RiA@RidirectAdirectRnARnAMOV;))((;)(;)(;,【例3-9】若(R1)=20H,(20H)=55H。执行指令MOVA,@R1后,(A)=55H。2020/2/1016以Rn为目的dataRndata#directRndirectA)RnARnMOV;)(;(;,【例3-10】执行指令MOVR6,#50H后,(R6)=50H2020/2/1017以direct为目的datadirectdata#@Ridirect@Ridirect1directdirect1)RndirectRn)AdirectAdirectMOV;))((;)(;(;(;,【例3-11】若(R1)=50H,(50H)=18H,执行指令MOV40H,@R1后,(40H)=18H2020/2/1018以@Ri为目的dataRidata#directRidirect)ARiA@RiMOV);()();(();(,【例3-12】若(R1)=30H,(A)=20H,执行指令MOV@R1,A后,(30H)=20H。2020/2/10193.3.2特殊传送指令以DPTR内容为基址读ROM中常数表项指令MOVCROM中可以存放程序代码,还经常存放常数表MOVCA,@A+DPTR;A←((A)+(DPTR))以PC内容为基址MOVCA,@A+PC;A←((A)+(PC))常数表存放约束小,称为远程查表指令。占用DPTR常数表存放约束大,称为近程查表指令。不占用DPTR[例3-13]若(DPTR)=3000H,(A)=20H,执行MOVCA,@A+DPTR后,程序存储器3020H单元的内容送累加器A。[例3-14]若MOVCA,@A+PC所在地址为1000H,且(A)=20H。执行该指令后,程序存储器1021H单元的内容会送入累加器A。2020/2/1021读片外RAM读片外RAM及接口单元数据的指令MOVX片外RAM中经常存放数据采集与处理的中间数据MOVXA,@DPTR;A←((DPTR))MOVXA,@Ri;A←((Ri))写片外RAMMOVX@DPTR,A;((DPTR))←AMOVX@Ri,A;((Ri))←A注意:用@Ri寻址时,高8位地址由P2口提供[例3-15]若(DPTR)=3000H,(3000H)=30H,执行指令MOVXA,@DPTR后,累加器A的内容为30H。[例3-16]若(P2)=20H,(R1)=48H,(A)=66H,执行指令MOVX@R1,A后,外部RAM存储器单元2048H的内容为66H。2020/2/1023入栈指令PUSH堆栈操作指令PUSH和POP堆栈是一片存储区,遵循“后进先出”原则,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。PUSHdirect;SP←(SP)+1,(SP)←(direct)出栈指令POPPOPdirect;(direct)←((SP)),SP←(SP)-1注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据(即保护现场),还可以用于数据交换。[例3-17]若(SP)=07H,(40H)=88H,执行指令PUSH40后,(SP)=08H,(08H)=88H。[例3-18]若(SP)=5FH,(5FH)=90H,执行指令POP70后,(70H)=90H,(SP)=5EH。2020/2/1025[例3-18]利用堆栈完成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指令执行后40HSFRRAM23H45H50H6FH栈底70H71H6FHSP生长方向栈顶40HSFRRAM23H45H50H6FH70H71H71HSP23H45H①②栈底40HSFRRAM45H50H6FH70H71H6FHSP23H45H23H③④栈底2020/2/1026字节交换指令XCH数据交换指令XCH、XCHD和SWAP数据交换属于同时进行的双向传送))((;)(;)(;,RiA@RidirectAdirectRnARnAXCH【例3-20】若(R0)=80H,(A)=20H。执行指令XCHA,R0后,(A)=80H,(R0)=20H。80HACCSFRR020HRAM20HACCSFRR080HRAM(a)执行前(b)执行后2020/2/1027半字节交换指令XCHD【例3-21】若(R0)=30H,(30H)=67H,(A)=20H。执行指令XCHDA,@R0指令后,(A)=27H,(30H)=60H。)();()())();((,ACC.0~ACC.3ACC.4~ACC.7ASWAPACC.0~ACC.30.Ri~3.Ri@RiAXCHDXCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的高低4位互换【例3-22】若(A)=30H,执行指令SWAPA后,(A)=03H。2020/2/10283.4算术运算类指令(24条)算术运算结果要影响PSW中标志位CY为1,无符号数(字节)加减发生进位或借位OV为1,有符号数(字节)加减发生溢出错误AC为1,十进制数(BCD码)加法的结果应调整P为1,存于累加器A中操作结果的“1”的个数为奇数标志位意义标志位与相关指令影响指令标志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√2020/2/1029算术运算影响标志位示例【例3-23】有2个参与相加的机器数,一个是84H,另一个是8DH。试分析运算过程及其对状态标志的影响。ACCPSWALU84H8DH①②④③10000100+1000110111100010001偶数个11101POVCYAC0异或PSW结果:CY为1
本文标题:第3章80C51单片机的指令系统
链接地址:https://www.777doc.com/doc-3629737 .html