




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章指令与汇编语言程序设计,本章主要内容,一、程序设计的步骤,1、分析问题,明确所要解决问题的要求,确定算法或解题思路2、画流程图,3、编写源程序画流程图4、汇编和调试程序书写的两种格式:第一种是完整程序格式的形式,即在第二章介绍的程序一般结构。第二种就是子程序的形式。,二、顺序程序设计顺序程序设计:又叫直线程序,它是按照指令的顺序依次执行的程序,它也是所有程序设计中最基本、最重要的程序。,例3-1015共十六立即数送到内部RAM30H开始的单元中。本题题意非常清楚,就是将0送到内RAM30H单元,将1送到内RAM31H单元,以此类推。将立即数送到内部RAM单元有现成的指令,这是一个功能性数据处理,格式上可以写成子程序的形式,程序设计如下:START:MOV30H,#0;(30H)#0MOV31H,#1;(31H)#1MOV3FH,#15;(3FH)#15RET;返回,一、循环程序的结构,1、循环程序:主要是用来实现功能相同、反复执行的操作。,循环程序一般包括四个部分:循环初值、循环体、循环修改和循环控制。循环初值:循环程序开始循环执行的初始条件,如循环的次数等,在循环程序的开始部分,只执行一次。循环体:是循环程序的核心,就是反复要完成的具体操作功能。循环修改:循环体执行一次后,再次执行之前,需要对有关参数进行修改,为下一轮循环做准备,和循环体一样,循环修改的程序内容也是反复多次执行的。循环控制:根据循环预先确定的次数,或者循环过程中有关操作数的内容进行判断,控制循环的结束。,2、加1和减1指令。(1)加1指令1)INCA;AA+12)INCRn;RnRn+13)INCdirect;(direct)(direct)+14)INCRi;(Ri)(Ri)+15)INCDPTR;DPTRDPTR+1(2)减1指令1)DECA;AA-12)DECRn;RnRn-13)DECdirect;(direct)(direct)-14)DECRi;(Ri)(Ri)-1,3、循环程序设计举例例3-3015共十六个立即数送到内部RAM30H开始的单元中。,MOVR0,#30HMOVA,#0MOVR0,A,MOVR0,#31HMOVA,#1MOVR0,A,MOVR0,#3FHMOVA,#15MOVR0,A,MOV30H,#0,MOV31H,#1,MOV3FH,#15,START:MOVR2,#16;循环次数MOVR0,#30H;指向第一个单元;循环初值MOVA,#0;送的第一个数AA:MOVR0,A;循环体,完成数据传;送循环体循环修改INCA;循环修改INCR0;修改指向的单元DJNZR2,AA;循环次数减1,到0退;出循环,循环控制RET;子程序返回0,二、比较转移指令与循环程序设计,1、比较转移指令(1)CJNEA,#data,rel;PCPC+3,若A=data,程序顺序执行;若Adata,PCPC+rel,程序转移,Cy=0;若Adata,PCPC+rel,程序转移,Cy=1;(2)CJNERn,#data,rel;PCPC+3,若Rn=data,程序顺序执行;若Rndata,PCPC+rel,程序转移,Cy=0;若Rndata,PCPC+rel,程序转移,Cy=1;(3)CJNERi,#data,rel;PCPC+3,若=data,程序顺序执行;若(Ri)data,PCPC+rel,程序转移,Cy=0;若(Ri)data,PCPC+rel,程序转移,Cy=1;(4)CJNEA,direct,rel;PCPC+3,若A=(direct),程序顺序执行;若A(direct),PCPC+rel,程序转移,Cy=0;若A(direct),PCPC+rel,程序转移,Cy=1;,2比较转移指令应用举例例3-3程序用比较转移指令修改如下:START:MOVR0,#30H;指向第一个单元MOVA,#0;送的第一个数AA:MOVR0,A;循环体,完成数据传送INCA;修改送的数据INCR0;修改指向的单元CJNEA,#16,AA;根据操作数信息控;制循环循环控制RET;子程序返回也可以通过对R0中数据判断比较控制程序结束,1循环移位指令(1)循环左移指令RLA;,三、循环移位指令与程序设计,(2)循环右移指令RRA;,(3)带进位位的循环左移指令RLCA;,(4)带进位位的循环右移指令RRCA;,例3-6执行下面的指令,在注释区记录A中数据的变化。MOVA,#03H;A=00000011B=3CLRC;Cy=0RLCA;A=00000110B=6,Cy=0RLCA;A=00001100B=12,Cy=0可以看出左移一次相当于乘2;类似右移相当除以2。2循环移位指令应用,2循环移位指令应用例3-7将第二章的循环流水灯程序修改成循环程序ORG0000HLJMPSETUPORG0030HSETUP:MOVA,#0FEH;循环初值MAIN:MOVP1,A;点亮灯LCALLDELAY;调延时子程序RLA;循环修改LJMPMAIN;DELAY:MOVR6,#80H;延时子程序DEL1:MOVR7,#0DEL:DJNZR7,DELDJNZR6,DEL1RET;子程序返回END,1条件转移指令(1)判A转移指令JZrel;PCPC+2,若A=0,则转移,;PCPC+rel;若A0,则顺序执行。JNZrel;PCPC+2,若A0,则转移,;PCPC+rel;若A=0,则顺序执行。,四、条件转移指令与循环程序设计,(2)判Cy转移指令JCrel;PCPC+2,若Cy=1,则转移,;PCPC+rel;若Cy=0,则顺序执行。JNCrel;PCPC+2,若Cy=0,则转移,;PCPC+rel;若Cy=1,则顺序执行。,(3)判A转移指令JBbit,rel;PCPC+3,若(bit)=1,;则转移,PCPC+rel;若(bit)=0,则顺序执行。JNBbit,rel;PCPC+3,若(bit)=0,;则转移,PCPC+rel;若(bit)=1,则顺序执行。JBCbit,rel;PCPC+3,若(bit)=0,;则顺序执行。;若(bit)=1,则转移,;PCPC+rel,且(bit)0,2条件转移指令应用例3-9编写程序计算内RAM20H单元中“1”的个数,存放在R3中。START:MOVR3,#0MOVA,20HMOVR2,#8AA:RLCAJNCBBINCR3BB:DJNZR2,AA;RET,例3-10内部RAM30H开始的十六个单元,有一组无符号数,试编写程序将其中满足偶校验的数送到内部RAM50H开始的单元。START:MOVR0,#30HMOVR1,#50HMOVR2,#16AA:MOVA,R0JBP,BBMOVR1,AINCR1BB:INCR0DJNZR2,AA;RET,五、分支程序的设计,1单分支结构程序,2多分支结构程序,例3-11内部RAM30H开始的单元,存放有一组无符号数据块,数据块的长度在20H单元中,试编写程序计算数据块中满足偶校验和满足奇校验数的个数,分别存放在R2和R3中。START:MOVR0,#30HMOVR2,#0HMOVR3,#0AA:MOVA,R0JBP,BBINCR2SJMPCCBB:INCR3CC:INCR0DJNZ20H,AA;RET,例3-12根据A中的内容选择相应的程序段执行。START:MOVDPTR,#TAB;指令表首址送DPTRCLRCRLCA;A的值乘以2JNCAA;INCDPH;超过256在DPH中加1AA:JMPA+DPTR;散转指令TAB:AJMPLOOP0;无条件转移指令表AJMPLOOP1AJMPLOOPnLOOP0:;分支程序0LOOP1:;分支程序1,一、堆栈的概念,1、堆栈是内部RAM中一段用来暂时存放数据的存储区,通常用来保护断点和现场。2、SP堆栈指针对其进行管理,SP始终指向堆栈顶部数据的地址,SP在单片机复位后它的值是07H。3、堆栈中数据的存取方式按照先进后出、后进先出的原则进行。4、堆栈操作(1)压栈:先将SP加1,然后将要压入堆栈的数据送到SP指示的单元中。(2)弹栈:先将数据弹出,然后将SP减1,指向新的单元。,二、堆栈操作指令,1、堆栈操作指令PUSHdirect;SP+1SP,;(direct)(SP)POPdirect;(SP)(direct),;SP-1SP例3-13已知SP=60H,分析执行下列指令后的结果。MOVDPTR,#1234H;DPTR=1234HPUSHDPH;SP+1SP,SP=61H,(DPH)(SP),;(61H)=12H。PUSHDPL;SP+1SP,SP=62H,(DPH)(SP),;(62H)=34H。POPDPH;DPH=(SP)=(62H)=34H,SP-1SP,;SP=61H。POPDPL;DPH=(SP)=(61H)=12H,SP-1SP,;SP=60H。执行结果:SP=60H,两次压栈,两次出栈,SP不变;DPTR=3412H,和原来的值高低位颠倒,从本例可以看出,堆栈的操作一定要注意操作规则:先进后出、后进先出。,(2)隐含的堆栈操作指令LCALLaddr16;PCPC+3,;SP+1SP,PC70(SP);SP+1SP,PC158(SP),;addr16PCACALLaddr11;PCPC+2,;SP+1SP,PC70(SP);SP+1SP,PC158(SP),;addr11PC100RET;(SP)PC158,SP-1SP。;(SP)PC70,SP-1SP。中断的响应与返回也会对堆栈进行操作。,一般情况下,应在初始化区对SP进行设置,将堆栈设定在数据缓冲区。,一、算术运算指令,1、加法指令(1)不带进位位的加法指令ADDA,#data;A+dataA,最高位有进位;时,Cy=1;否则,Cy=0。ADDA,Rn;A+RnA,最高位有进位时,;Cy=1;否则,Cy=0。ADDA,direct;A+(direct)A,最高位;有进位时,Cy=1;否则,Cy=0。ADDA,Ri;A+(Ri)A,最高位有进位;时,Cy=1;否则,Cy=0。,(2)带进位位的加法指令ADDCA,#data;A+data+CyA,最高位有进位;时,Cy=1;否则,Cy=0。ADDCA,Rn;A+Rn+CyA,最高位有进位时,;Cy=1;否则,Cy=0。ADDCA,direct;A+(direct)+CyA,最高位;有进位时,Cy=1;否则,Cy=0。ADDCA,Ri;A+(Ri)+CyA,最高位有进;位时,Cy=1;否则,Cy=0。ADD用于首次相加,ADDC用于除首次以外的相加,例3-14已知两个双字节无符号数,分别存放在R1R0和R3R2中(高位在前),试编写程序求它们的和,结果存放在R6R5R4中。,R1R0+R3R2R6R5R4,START:MOVA,R0;取一个加数的低8位ADDA,R2;与另外一个数的低8位相加MOVR4,A;存低8位的和MOVA,R1;取一个加数的高8位ADDCA,R3;高8位相加,并加低8位相加时;的CyMOVR5,A;存高8位的和CLRA;A清0ADDCA,#0;0+0+CyA,取出高8位相加时;的CyMOVR6,A;存进位RET,(3)BCD码调整指令DAA例3-17已知两个BCD码表示的数,分别存放在R1R0和R3R2中(高位在前),试编写程序求它们的和,结果存放在R6R5R4中。START:MOVA,R0;取一个加数的低位ADDA,R2;与另外一个数的低位相加DAA;低位和BCD码调整MOVR4,A;存低位的和MOVA,R1;取一个加数的高位ADDCA,R3;高位相加,并加低位相加时的CyDAA;高位和BCD码调整MOVR5,A;存高位的和CLRA;A清0ADDCA,#0;0+0+CyA,取出高位相加时的CyMOVR6,A;存进位RET,2减法指令SUBBA,#data;A-data-CyA,高位有借位;时,Cy=1,否则,Cy=0。SUBBA,Rn;A-Rn-CyA,高位有借位时,;Cy=1,否则,Cy=0。SUBBA,direct;A-(direct)-CyA,高位;有借位时,Cy=1,否则,Cy=0。SUBBA,Ri;A-(Ri)-CyA,高位有借;位时,Cy=1,否则,Cy=0。减法只有带进位位的减法指令,因此第一次执行除法时,需要将Cy清0。,例3-18已知两个双字节数,被减数存放在R1R0中减数存放在R3R2中(高位在前),试编写程序求它们的差,结果存放在R5R4中。,R1R0R3R2R5R4,START:CLRC;清CyMOVA,R0;取被减数的低8位SUBBA,R2;减去减数的低8位MOVR4,A;存低8位的差MOVA,R1;取被减数的高8位SUBBA,R3;减去减数的高8位;和低8位的借位MOVR5,A;存高8位的差RET,注意下面两条指令的区别:(有些情况不能互换)INCA;不影响Cy、OV、AC标志位ADDA,#1;影响Cy、OV、AC标志位例3-16已知一个原码表示的双字节有符号数存放在R1R0(高位在前)中,试编写程序求它的补码,结果存放在R1R0中。START:MOVA,R1;取高8位JNBACC.7,AA;高位为0,表示正数转移,不需变换MOVA,R0;取低8位CPLA;求反ADDA,#1;加1MOVR0,A;存低8位MOVA,R1;取高8位CPLA;求反ADDCA,#0;加低8位的进位SETBACC.7;高位置1,负数MOVR1,A;存高8位AA:RET,3乘法指令MULAB;ABBA实现两个8位的无符号数相乘例3-19已知两个无符号数分别存放在R1R0和R2中,试编写程序计算它们的积,结果存放在R5R4R3中(高位在前)。,R1R0R2B1A1+B2A2R5R4R3,积的高8位放在寄存器B中,而积的低8位放在累加器A中。,START:MOVA,R0;取被乘数的低8位MOVB,R2;取乘数MULAB;相乘MOVR3,A;MOVR4,B;存放积MOVA,R1;取被乘数的高8位MOVB,R2;取乘数MULAB;相乘ADDA,R4;错位相加MOVR4,A;和回存CLRA;清AADDCA,B;进位加到高字节中MOVR5,A;存高字节RET,4除法指令DIVAB;AB的商存放在A中,余数存放;在B中,Cy=0,OV=0。,二、逻辑运算指令,1逻辑“与”运算指令ANLA,#data;AdataAANLA,Rn;ARnAANLA,direct;A(direct)AANLA,Ri;A(Ri)AANLdirect,#data;(direct)dataAANLdirect,A;(direct)AA,2逻辑“或”运算指令ORLA,#data;AdataAORLA,Rn;ARnAORLA,direct;A(direct)AORLA,Ri;A(Ri)AORLdirect,#data;(direct)dataAORLdirect,A;(direct)AA,3逻辑“异或”运算指令XRLA,#data;AdataAXRLA,Rn;ARnAXRLA,direct;A(direct)AXRLA,Ri;A(Ri)AXRLdirect,#data;(direct)dataAXRLdirect,A;(direct)AA例3-22已知A中内容是10110110B,分别执行下面三条指令,分析A中的内容。ANLA,#01101010B;A=00100010BORLA,#01101010B;A=11111110BXRLA,#01101010B;A=11011100B,4位逻辑运算指令(1)位逻辑“与”运算指令ANLC,bit;C(bit)CANLC,/bit;C(bit)C(2)位逻辑“或”运算指令ORLC,bit;C(bit)CORLC,/bit;C(bit)C,5交换指令(1)字节交换指令XCHA,Rn;ARnXCHA,Ri;A(Ri)XCHA,direct;A(direct)(2)半字节交换指令XCHDA,Ri;A30(Ri)30(3)累加器高低4位互换指令SWAPA;A30A74,例3-23已知2位BCD码存放在内部RAM30H中,试编写程序将其转换为二进制数,存放在31H单元中。START:MOVA,30H;ANLA,#0F0H;取数屏蔽低4位SWAPA;高低位互换,的十位数MOVB,#10;乘数10MULAB;A=10aMOV31H,A;暂存数据MOVA,30H;ANLA,#0FH;取数屏蔽高4位,得个位ADDA,31H;得到二进制数MOV31H,A;保存二进制数RET,一、查表指令,1、定义字节伪指令DB格式:标号:DB8位二进制数表功能:从标号所指定的地址空间开始,定义若干个ROM单元的数据。如:TAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HTAB1:DB“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”这两条指令的功能一样,都是在指定的标号处开始的地址单元中存放09的字符信息。,2查表指令MOVCA,A+DPTR;(A+DPTR)AMOVCA,A+PC;PC+1PC,(A+PC)A功能是从ROM(程序存储器)空间单元中取一个数到A中。,二、查表程序设计,1、用MOVCA,A+DPTR设计查表程序的步骤定义表格。表格中的数据必须按照一定的顺序。将表格的首地址送给数据指针DPTR(基址)将要找的项与表格首地址的间隔数送给A(变址)执行MOVCA,A+DPTR指令。,2、用MOVCA,A+PC设计查表程序的步骤定义表格。表格中的数据必须按照一定的顺序。将要找的项与表格首地址的间隔数送给A(变址)。A中加上适当的偏移量(查表指令下一条指令的首地址与表格首地址的间隔数)。执行MOVCA,A+PC指令。例3-24已知一位十进制数存放在R0中,编写程序求它的平方结果放在R1中。START:MOVDPTR,#TABMOVA,R0MOVCA,A+DPTRMOVR1,ARETTAB:DB0,1,4,9,16,25,36,49,64,81;十进制数;码的平方,三、LED数码管,1LED数码管段:a、b、c、d、e、f、g、Dp位:COM(公共端),2LED数码管编码方式,3、LED数码管的静态显示电路数码管的静态显示电路中,公共端直接接电
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规划督学面试题及答案
- 道路运输考试题及答案
- 2025年广西南宁职业技术大学招聘教职人员考试笔试试题(含答案)
- 北京电气基础知识培训课件
- 2025机械工程师职称考试题及参考答案
- 2025年汽车修理工(装调工)高级技师理论知识竞赛试题与答案
- 2025食品安全管理员培训考试试题及答案
- 2025康复医学考试试题(含参考答案)
- 2024年急救设备操作试题(附答案)及设备相关应急预案考试题(附答案)
- 2024年湖南省常德市医疗三严三基理论考试题库及答案
- 安宁疗护中的舒适护理
- 医学影像科年月三基三严考试附有答案
- 新生儿俯卧位通气的护理课件
- 医院安保突发治安事件应急预案
- 2023年宁波市慈溪市人民法院招聘编外人员考试真题及答案
- 高速公路服务区升级转型商业计划书
- 常见行政案件笔录模版
- 手术室甲状腺切除术手术配合护理查房
- 国家电网电力中级职称考试题
- 数据库设计规范说明
- 肾内科临床技术操作规范2022版
评论
0/150
提交评论