单片机原理与应用(科学版)――第四章 指令系统02

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

主编陈建铎副主编宋彩利康磊冷冬梅制作安强萍科学出版社第一章计算机基础第二章存储器第三章MCS-51单片机的组成原理第四章指令系统第五章汇编语言程序设计第六章单片机的开发与使用第七章模拟通道技术第八章单片机应用系统的设计第九章8098单片机的组成与指令系统特点第十章16位DSP单片机的组成与特点4.3指令系统在MCS-51单片机使用了42种助记符,与7种寻址方式组合,构成111条指令。下面分为7类予以介绍。4.3.1数据传送类指令4.3.2算术运算类指令4.3.3逻辑运算类指令4.3.4移位类指令4.3.5控制转移类指令4.3.6调用/返回类指令4.3.7位操作类指令4.3.1数据传送类指令共有29条,其中包括8位、16位数据传送指令、交换指令、查表指令以及堆栈操作指令等。这类指令除向累加器A传送数据,影响奇/偶标志P之外,不影响其它状态标志。1.内部8位数据传送指令内部8位数据传送指令主要用于内部RAM、寄存器之间的传送,共有15条,如表4.2所示,可分为4种。(1)累加器传送指令有4条:MOVA,Rn;A←(Rn)MOVA,direct;A←(direct)MOVA,@R;A←((R1))MOVA,#data;A←data例如指令MOVA,R4(2)寄存器传送指令有3条:MOVRn,A;Rn←A)MOVRn,direct;Rn←direct)MOVRn,#data;Rn←data例如指令MOVR5,72H(3)直接地址单元传送指令有5条;MOVdirect,A;direct←(A)MOVdirect,Rn;direct←(Rn)MOVdirect,@Ri;direct←((Ri))MOVdirect,direct2;direct1←(direct2)MOVdirect,#data;direct←data例如指令MOV80H,75H(4)间接地址单元传送指令有3条;MOV@Ri,A;(Ri)←(A)MOV@Ri,direct;(Ri)←(direct)MOV@Ri,#data;(Ri)←data例如指令MOV@R0,#0FH2.16位数据传送指令MOVDPTR,#dat16;DPTR←data1616位数据传送指令仅此一条,如表3.3所示,是把16位的立即数传送到地址寄存器DPTR中,其中高8位送DPH中,低8位送DPL中,如图4.2所示。16位传送类指令对状态标志没有影响。3.外部数据传送指令MOVXA,@Ri;A←((Ri))MOVX@Ri,A;(Ri)←(A)MOVXA,@DPTR;A←((DPTR))MOVX@DPTR,A;(DPTR)←(A)其功能是在累加器与外部数据存储器之间进行数据传送。如果用Ri间接寻址,其范围为外部数据存储器的低256个字节单元。如果用DPTR间接寻址,其范围是外部数据存储器的64KB单元。外部数据传送指令如表4.4所示。4.交换指令XCHA,Rn;(A)↔(Rn)XCHA,direct;(A)↔(direct)XCHA,@Ri;(A)↔((Ri))XCHDA,@Ri;(A)3~0↔((Ri))3~0SWAPA;(A)3~0↔(A)7~4如表4.5所示,分为3种。第一种是累加器A与工作寄存器Rn或直接地址单元或Ri所指示的间接地址单元进行8位数据交换,第二种是累加器A与Ri所指示的间接地址单元进行低半字节交换,第三种是累加器A中的高半字节与低半字节交换。例如指令XCHA,R7;累加器A与寄存器R7交换又如指令XCHDA,@R1;累加器A中的低4位与R1中的内容所指示单元中的低4位交换。5.查表指令MOVCA,@A+DPTR;A↔((A)+(DPTR))MOVCA,@A+PC;A↔((A)+(PC))采用变址寻址方式,其中A为变址寄存器,DPTR和PC为基址寄存器。其功能是把A中内容与DPTR或PC中的内容之和所指示单元中的数据送入累加器A中,查表指令如表4.5所示。6.堆栈操作指令PUSHdirect;SP←(SP)+1,(SP)←(direct)POPdirect;direct←((SP)),SP←(SP)-1堆栈操作指令共有两条,如表4.6所示。一条是压栈指令PUSH,也称为进栈;另一条弹栈指令POP,也称为出栈。这两条指令采用直接寻址方式,压栈时指针SP+1,数据进栈;弹栈时数据出栈,指针SP-1。堆栈操作指令只能对字节数进行操作。例如指令PUSHDPL;DPTR低8位地址压栈PUSHDPH;DPTR高8位地址压栈又如指令POPR1;堆栈顶部数据弹出,送R14.3.2算术运算类指令这类指令共有24条,其中包括加法、减法、加1,减1以及乘法除法运算指令,对状态标志位均有影响,如表4.7所示。1.加法指令ADDA,Rn;A←(A)+(Rn)ADDA,direct;A←(A)+(direct)ADDA,@Ri;A←(A)+((Ri))ADDA,#data;A←(A)+data带进位的加法指令ADDA,Rn;A←(A)+(Rn)+(C)ADDA,direct;A←(A)+(direct)+(C)ADDA,@Ri;A←(A)+((Ri))+(C)ADDA,#data;A←(A)+data+(C)用于的把源操作数与累加器中的数相加,结果在累加器中。带进位加法指令还要再加上进位位。运算结果影响PSW中的Cy、OV、AC和P。Cy:当D7有进位时Cy置1,否则清0。OV:当算术运算有溢出时OV置1,否则清0。AC:当D3有进位时AC置1,否则清0。P:当累加器A中“1”的个数为奇数时P置1,否则清0。【例4-1】试编写计算6655H+11FFH的程序。解:两个16位数据相加可分为两步,先对低8位相加,再对高8位用带进位加法指令相加。设结果存入51H和50H单元中,程序设计如下:MOVA,#55HADDA,#0FFHMOV50H,AMOVA,#66HADDCA,#11HMOV51H,A2.带借位的减法指令SUBBA,Rn;A←(A)-(Rn)-(c)SUBBA,direct;A←(A)-(direct)-(c)SUBBA,@Ri;A←(A)-((Ri))-(c)SUBBA,#data;A←(A)-data-(C)在MCS-51单片机中只有带进位减法指令,用累加器中的数减去源操作数后,再减进位位,结果在累加器中。运算结果影响PSW中的Cy、OV、AC和P。【例4-2】试编写计算EE33H-ADE0H的程序。解:在进行上述16位减法运算时,也要分成两步进行。先进行低8位运算,若产生借位,则再在高8位运算时一起减去,程序设计如下:CLAC;进位位C清0MOVA,#33H;A←33HSUBBA,#E0H;A←(A)-E0H-(C)MOV50H,A;50H←(A)MOVA,#EEH;A←EEHSUBBA,#A0H;A←(A)-A0H-(C)MOV51H,A;51H←(A)3.加1指令INCA;A←(A)+1INCRn;Rn←(Rn)+1INcdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1加1指令是给目的地址单元中的数加1,结果仍在原来地址单元。加1指令对状态标志寄存器PSW没有影响。4.减1指令DECA;A←(A)-1DECRn;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←((Ri))-1减1指令是把目的地址单元中的数减1,结果仍在原来地址单元中。减1指令对状态标志寄存器PSW没有影响。5.十进制调整指令DAA是一条单字节指令,也称为BCD码修正指令,对BCD码的加法运算结果进行修正。当低半字节的值9或AC=1时,低半字节加6;当高半字节的值9或C=1时,高半字节加6在使用时只要在BCD码加法运算指令的后面跟一条十进制调整指令就可以了,但不能用于减法运算。6.乘法指令MULAB;BA←(A)×(B)是一条单字节指令,是把累加器A和寄存器B中的两个无符号数相乘,结果的低8位在A中,高8位在B中。影响状态标志OV和Cy。OV:当乘积结果大于0FFH时OV置1,否则清0;Cy:总是清0。7.除法指令DIVAB是一条单字节指令,是把累加器A中的无符号数除以寄存器B中的无符号数。结果的商在A中,余数在B中。影响状态标志OV和Cy。OV:若除数为0,OV置1,否则清0。Cy:总是清0。4.3.3、逻辑运算类指令共有20条,如表4.8所示,包括“与”、“或”、“异或”及累加器清“0”、取反等。除改变累加器A中的内容的指令对奇/偶标志P有影响外,不影响其它状态标志。1.逻辑“与”运算指令ANLA,Rn;A←(A)∧(Rn)ANLA,direct;A←(A)∧(direct)ANLA,@Ri;A←(A)∧((Ri))ANLA,#data;A←(A)∧dataANLdirect,A;direct←(direct)∧(A)ANLdirect,#data;direct←(direct)∧data有6条,把目的操作数与源操作数接位“与”,结果在目的地址单元中;可用来屏蔽掉字节数据中的某些位。【例4-3】把累加器A中的低4位数据送外部数据存储器的2580H单元中。解:用0FH屏蔽掉高4位,然后传送,程序设计如下:MOVDPTR,#2580HANLA,#0FHMOVX@DPTR,A2.逻辑“或”运算指令ORLA,Rn;A←(A)∨(Rn)ORLA,direct;A←(A)∨(direct)ORLA,@Ri;A←(A)∨((Ri))ORLA,#data;A←(A)∨dataORLdirect,A;direct←(direct)∨(A)ORLdirect,#data;direct←(direct)∨data有6条,把目的操作数与源操作数按位“或”,结果在目的地址单元中;可用来把两个操作数中的“1”合并到一个操作数中,或者说把目的操作数中的某些位置1。3.逻辑“异或”运算指令XRLA,Rn;A←(A)⊕(Rn)XRLA,direct;A←(A)⊕(direct)XRLA,@Ri;A←(A)⊕((Ri))XRLA,#data;A←(A)⊕dataXRLdirect,A;direct←(direct)⊕(A)XRLdirect,#data;direct←(direct)⊕data有6条,把目的操作数与源操作数按位“异或”,结果在目的地址单元中。例如累加器A中的内容为11000011,寄存器R7中的内容为10101010,执行指令XRLA,R7后,累加器A中的内容为01101001。4.累加器清0指令CLRA;A←05.累加器取反指令CPLA;A←()A4.3.4移位类指令共有4条,对累加器A中的数据进行移位操作,如表4.9所示,除带进位的移位指令对进位位C和奇/偶标志位P有影响外,不影响其它状态标志位。1.不带进位循环左移指令RLA;ACC.(i+1)←ACC.i,ACC.0←ACC.72.带进位循环左移指令RLCA;ACC.(i+1)←ACC.i,ACC.0←Cy,Cy←ACC.73.不带进位循环右移指令RRA;ACC.iACC.(i+1),ACC.7←ACC.04.带进位循环右移指令RRCA;ACC.i←ACC.(i+1),ACC.7←Cy,Cy←ACC.0移位指令用来把累加器A中的数据循环左移一位或者右移一位。对于带进位的循环移位指令,进位位Cy的状态由移入的数位决定。4.3.5控制转移类指令共18条,包括无条件转移指令,条件转移指令,比较转移指令及计数转移指令等,如表4.10所示。其功能是无条件或者有条件地控制程序转移到目的地址单元。1.无条件转移指令无条件转移指令共有4条。(1)LJMPdaar16;PC←addr16三字节直接寻址的无条件转移指令,转移地址在指令操作域直接给出,寻址范围为64K(0000H~FFFFH),所以称为长转移指令。(2)AJMPaddr11;PC10~0addr11PC高5位PC低11位高3位8位第一字节第二字节操作码地址域图4.8装入11转移地址双字节直接寻址

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功