




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主编陈建铎副主编宋彩利康磊冷冬梅制作安强萍,科学出版社,单片机原理与应用,第一章计算机基础第二章存储器第三章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;Adata例如指令MOVA,R4(2)寄存器传送指令有3条:MOVRn,A;RnA)MOVRn,direct;Rndirect)MOVRn,#data;Rndata例如指令MOVR5,72H,(3)直接地址单元传送指令有5条;MOVdirect,A;direct(A)MOVdirect,Rn;direct(Rn)MOVdirect,Ri;direct(Ri)MOVdirect,direct2;direct1(direct2)MOVdirect,#data;directdata例如指令MOV80H,75H(4)间接地址单元传送指令有3条;MOVRi,A;(Ri)(A)MOVRi,direct;(Ri)(direct)MOVRi,#data;(Ri)data例如指令MOVR0,#0FH,2.16位数据传送指令MOVDPTR,#dat16;DPTRdata1616位数据传送指令仅此一条,如表3.3所示,是把16位的立即数传送到地址寄存器DPTR中,其中高8位送DPH中,低8位送DPL中,如图4.2所示。16位传送类指令对状态标志没有影响。3.外部数据传送指令MOVXA,Ri;A(Ri)MOVXRi,A;(Ri)(A)MOVXA,DPTR;A(DPTR)MOVXDPTR,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)30(Ri)30SWAPA;(A)30(A)74如表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;堆栈顶部数据弹出,送R1,4.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,A,2带借位的减法指令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;A33HSUBBA,#E0H;A(A)-E0H-(C)MOV50H,A;50H(A)MOVA,#EEH;AEEHSUBBA,#A0H;A(A)-A0H-(C)MOV51H,A;51H(A),3.加1指令INCA;A(A)+1INCRn;Rn(Rn)+1INcdirect;direct(direct)+1INCRi;(Ri)(Ri)+1INCDPTR;DPTR(DPTR)+1加1指令是给目的地址单元中的数加1,结果仍在原来地址单元。加1指令对状态标志寄存器PSW没有影响。4.减1指令DECA;A(A)-1DECRn;Rn(Rn)-1DECdirect;direct(direct)-1DECRi;(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,#0FHMOVXDPTR,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;A05.累加器取反指令CPLA;A(),4.3.4移位类指令,共有4条,对累加器A中的数据进行移位操作,如表4.9所示,除带进位的移位指令对进位位C和奇/偶标志位P有影响外,不影响其它状态标志位。1不带进位循环左移指令RLA;ACC.(i+1)ACC.i,ACC.0ACC.72带进位循环左移指令RLCA;ACC.(i+1)ACC.i,ACC.0Cy,CyACC.73.不带进位循环右移指令RRA;ACC.iACC.(i+1),ACC.7ACC.04.带进位循环右移指令RRCA;ACC.iACC.(i+1),ACC.7Cy,CyACC.0移位指令用来把累加器A中的数据循环左移一位或者右移一位。对于带进位的循环移位指令,进位位Cy的状态由移入的数位决定。,4.3.5控制转移类指令,共18条,包括无条件转移指令,条件转移指令,比较转移指令及计数转移指令等,如表4.10所示。其功能是无条件或者有条件地控制程序转移到目的地址单元。1无条件转移指令无条件转移指令共有4条。(1)LJMPdaar16;PCaddr16三字节直接寻址的无条件转移指令,转移地址在指令操作域直接给出,寻址范围为64K(0000HFFFFH),所以称为长转移指令。(2)AJMPaddr11;PC100addr11,双字节直接寻址的无条件转移指令,指令操作数域给出11位的转地址。它把PC高5位与操作码的高3位以及指令第二字节并在一起,构成16位的转移址址,如图4.8所示,常称为绝对转移指令。,寻址范围为该指令地址加2后,向下的2K区域,其指令码如下:,(3)SJMPrel;PC(PC)+rel双字节相对寻址的无条件转移指令,第二字节给出转移地址的偏移量rel(带符号的8位二位制补码数),寻址范围为256(-80H+7FH)。转移地址为程序计数器PC的当前值加偏移量,因此称为相对短转移指令。在用汇编语言编程时,相对地址的偏移量rel可以用目的地址的标号(符号地址)表示,程序汇编时自动计算偏移量。例如指令HERE:SJMPHERE或HERE:SJMP$代表本指令地址。(4)JMPA+DPTR;PC(A)+(DPTR)单字节变址寻址的无条件转移指令,累加器A中存放的是相对偏移量,DPTR中存放的是变址基值,二者之和为转移地址,寻址范围为64K(0000HFFFFH),因此称为相对长转移指令。,2条件转移指令是根据特定的条件控制程序的转移,共有4条,均是相对寻址的双字节指令。转移地址为程序计数器PC的当前值加偏移量rel。JZrel;若(A)=0,则PC(PC)+relJNZrel;若(A)0,则PC(PC)+relJCrel;若Cy=1,则PC(PC)+relJNCrel;若Cy=0,则PC(PC)+rel3.位测试转移指令对位地址单元进行测试,根据测试结果控制程序的转移,共有3条,均是相对寻址的三字节指令。其中第二字节是位地址,第三字节是偏移量。转移地址为程序计数器PC的当前值加偏移量。JBbit,rel;若(bit)=1,则PC(PC)+relJNBbit,rel;若(bit)=0,则PC(PC)+relJBCbit,rel;若(bit)=1,则PC(PC)+rel,且bit0。,4.比较转移指令是根据两数比较的结果决定程序是否转移,共有4条,均是相对寻址的三字节指令。比较相等时,程序顺序执行,不相等时转移。CJNEA,#data,rel;若(A)data,则PC(PC)+relCJNERn,#data,rel;若(Rn)data,则PC(PC)+relCJNERi,#data,rel;若(Ri)data,则PC(PC)+relCJNEA,irect,rel;若(A)(direct),则PC(PC)+rel当目的地址单元中的数小于源地址单元中的数据时,进位位Cy置1,否则清0,不影响其它状态标志位。,5.计数转移指令对指定单元减1计数,结果不为零时转移,否则顺序执行,共有2条,均是相对寻址的转移指令。DJNZRn,rel;Rn(Rn)-1,若(Rn)0,则PC(PC)+relDJNZdirect,rel;direct(direct)-1,若(direct)0,则PC(PC)+rel【例4.4】设片内RAM的50H和60H单元中分别存放有两个无符号数,找出最大者,送70H单元。,解:用比较转移和有进位转移指令共同判断两数的大小,程序设计如下:MOVA,50HCJNEA,60H,LI;比较,不相等转移MOV70,ASJMPHHLL:JCMM;小于转移MOV70H,ASJMPHHMM:MOV70H,60HHH:6.空操作指令NOP单字节指令,其功能是取指令,译码,不进行任何操作(即空操作)而转下一条指令。,4.3.6调用/返回类指令,调用指令在主程序中使用,执行时保护断点,使程序转向子程序入口;返回指令在子程序的末尾使用,其作用是返回到主程序中原来被断开的地方,即断点。调用/返回类指令如表4.11所示。1.调用指令(1)LCALLaddr16;(PC)压栈,PCaddr16直接寻址的三字节指令,使程序计数器PC的当前值压栈,子程序入口地址ddr16送PC。寻址范围为64K(0000HFFFFH),称为长调用指令。指令执行过程如下:SP(SP)+1(SP)(PC)70SP(SP)+1(SP)(PC)158PCaddr16,(2)ACALLaddr11;(PC)压栈,PC100addr11直接寻址的双字节指令,使程序计数器PC的当前值压栈,11位的子程序入口地址addr11送PC的低11位,与其高5位并成16位地址,常称为绝对调用指令,指令格式与绝对转移指令AJMP类似,寻址范围为2K,其指令码如下:,指令执行过程如下:SP(SP)+1(SP)(PC)70SP(SP)+1(SP)(PC)158PCaddr11,2.返回指令返回指令有两条,一条是子程序返回指令,另一条是中断返回指令。RET子程序返回指令,单字节,无操作数,其功能是弹栈,把断点地址送回到程序计数器PC中,即返回到调用该子程序的程序中去。一般用在子程序的末尾,执行过程如下:PC158(SP)SP(SP)-1PC70(SP)SP(SP)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年物流师(高级)职业技能鉴定试卷:物流企业风险管理篇
- 河南科技学院《大数据采集与清洗》2024-2025学年第一学期期末试卷
- 2025年行政助理岗位面试技巧与常见问题解答
- 2025年特岗教师招聘面试初中数学教学案例分析模拟题及答案详解
- 《中医儿科学》考试试卷(含答案)
- 吉林农业科技学院《工程伦理:安全》2024-2025学年第一学期期末试卷
- 2025年新仓库保管员招聘面试手册与模拟题详解
- 2025年产品经理面试全攻略与预测题集
- 2025年度全国汽车知识技能大赛理论知识竞赛题库及答案
- 2025年初中学业水平测试物理考点梳理与模拟题集
- GB/T 43241-2023法庭科学一氧化二氮检验气相色谱-质谱法
- 小儿腹泻护理查房
- GB/T 42653-2023玻璃高温黏度试验方法
- 代持股权挂名法人协议书
- 2017年人教版英语五年级上册说教材
- 普通化学(第五版)浙江大学普通化学教研组P课件
- 医疗保障法律法规行政处罚司法审视及建议PPT学习培训课件
- GB/T 9999.2-2018中国标准连续出版物号第2部分:ISSN
- GB/T 6543-2008运输包装用单瓦楞纸箱和双瓦楞纸箱
- GB 19522-2004车辆驾驶人员血液、呼气酒精含量阈值与检验
- GB 10238-1998油井水泥
评论
0/150
提交评论