为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

单片机原理与运用-第三章答案

2020-02-09 3页 doc 31KB 29阅读

用户头像 个人认证

rainsun213

暂无简介

举报
单片机原理与运用-第三章答案资料收集于网络如有侵权请联系网站删除谢谢资料收集于网络如有侵权请联系网站删除谢谢资料收集于网络如有侵权请联系网站删除谢谢第三章单片机的汇编语言与程序设计习题1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?MOVA,59HMOVR0,AMOVA,#00HMOV@R0,AMOVA,#25HMOV51H,AMOV52H,#70H解:MOVA,59H;A=50HMOVR0,A;RO=50HMOVA,#00H;A=00HMOV@R0,A;50H=00HMOVA...
单片机原理与运用-第三章答案
资料收集于网络如有侵权请联系网站删除谢谢资料收集于网络如有侵权请联系网站删除谢谢资料收集于网络如有侵权请联系网站删除谢谢第三章单片机的汇编语言与程序设计习1.设内部RAM中59H单元的内容为50H,写出当执行下列程序段后寄存器A,R0和内部RAM中50H,51H单元的内容为何值?MOVA,59HMOVR0,AMOVA,#00HMOV@R0,AMOVA,#25HMOV51H,AMOV52H,#70H解:MOVA,59H;A=50HMOVR0,A;RO=50HMOVA,#00H;A=00HMOV@R0,A;50H=00HMOVA,#25H;A=25HMOV51H,A;51H=25HMOV52H,#70H;52H=70H所以:A=25HR0=50H;50H=00H51H=25H2.请选用合适的指令对P0口内容做修改(例如使P0.0~P0.3不变,P0.4~P0.7为0)。解:MOVA,P0ANLA,0fhMovP0,A3.试问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。解:访问外部数据存储器指令有:MOVX@DPTR,AMOVXDPTR,#0100HMOV@DPTR,AMOVXA,@DPTRMOVXDPTR,#0200HMOVA,@DPTRMOVXA,@RiMOVXA,@R0MOVX@Ri,AMOVX@RI,A访问程序存储器指令有:MOVXA,@A+PCMOVXA,@A+DPTR4.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?PUSH30HPUSH31HPOPDPLPOPDPHMOV30H,#00HMOV31H,#0FFH解:PUSH30H;61H=24HPUSH31H;62=10HSP=62HPOPDPL;DPL=10HPOPDPH;DPH=24HSP=60HMOV30H,#00H;30H=00HMOV31H,#0FFH;31H=0FFH5.设(A)=40H,(R1)=23H,(40H)=05H。执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各位何值?XCHA,R1XCHDA,@R1解:XCHA,R1;A=23HR1=40HXCHDA,@R1;A=25H40H=03H6.两个四位BCD码数相加,被加数和加数分别存于50H,51H和52H,53H单元中(次序为千位、百位在低地址中),和数存在54H,55H和56H中(56H用来存放最高位的进位,试编写加法程序)解:ORG0000HLJMPSTARTORG0100HSTART:MOVA,53HADDA,51HDAAMOV55H,AMOVA,52HADDCA,50HDAAMOV56H,CSJMP$END7.设(A)=01010101B,(R5)=10101010B,分别写出执行ANLA,R5;ORLA,R5:XRLA,R5 指令后结果。解:ANLA,R5;00000000BORLA,R5;11111111BXRLA,R5;111111118.设指令SJMPrel=7EH,并假设该指令存放在2114H和2115H单元中。当该指令执行后,程序将跳转到何地址?解:2116H+60H=2176H9.简述转移指令AJMPaddr11,SJMPrel,LJMPaddr16及JMP@A+DRTR的应用场合。解:AJMPaddr11为2K字节范围内的无条件转跳指令,把程序的执行转移到指定的地址。SJMPrel是无条件转跳指令,执行时在PC加2后,把指令中补码形式的偏移量加到PC上,并计算出转向目标地址。转向的目标地址可以在这条指令前128字节到后127字节之间LJMPaddr16执行这条指令时把指令的第二字节和第三字节分别装入PC的高位和地位字节中无条件地转向指定地址。转移目标地址可以在64K程序存储器地址空间的任何地方,不影响任何标志。JMP@A+DRTR指令的功能是把累加器中8位无符号数与数据指针DRTR中的16位数相加,将结果作为下条指令地址送入PC,利用这条指令能实现程序的散转。10.试分析下列程序段,当程序执行后,位地址00H,01H中的内容将为何值?P1口的8条I/O线为何状态?CLRCMOVA,#66HJCLOOP1CPLCSETB01HLOOP:ORLC,ACC.0JBACC.2,LOOP2CLR00HLOOP2:MOVP1,A解:CLRC;CY=0MOVA,#66H;A=66HJCLOOP1CPLC;CY=1SETB01H;20H.1=1LOOP:ORLC,ACC.0;CY=1JBACC.2,LOOP2;CLR00HLOOP2:MOVP1,A;P1=01100110BSJMP$20H.0=020H.1=1P1=66H11.的特查指令,写出下列两条指令的机器码,并比较一下机器码中操作数排列次序点。MOV78H,80HMOV78H,#80H解:直接寻址单元传送到直接寻址单元的机器码是第二个操作数在前,而立即数传送到直接地址单元是第一个操作数在前,次序正好相反。12.手工汇编下列程序段ORG873BHAAAEQU851AHQQQMOVA,35HCLRCSUBBA,#0AHJCQQ16MOVA,36HSUBBA,#0AHJCQQ15AJMPAAAQQ15:MOV35H,#00HQQ16:JNB02H,QQ17MOVR6,39HDECR6SJMPQQ18QQ17:MOVR6,39HINC39HQQ18:CLR05HLJMP8500HEND13.若有两个无符号数x,y分别存放于内部存储器50H,51H单元中,试编写一个程序实现x*10+y,结果存入52H,53H两个单元中。解:ORG0000HSJMPSTARTORG0030HSTART:MOVA,50HMOVB,#10MULAB;(50H)×10积的高、低字节分别在B、A中ADDA,51HMOV53H,A;积的低字节加(51H)其和存放在53H中MOVA,#00HADDCA,BMOV52H,A;积的高字节加进位位存放在52H中。SJMP$END14从内部存储器20H单元开始,有30个数据。试编一个程序,把其中的正数,负数分别送51H和71H开始的存储单元,并分别记下正数负数的个数送50H和70H单元。解:ORG0000HSJMPSTARTORG0030HSTART:MOV1EH,#51H;正数存放首地址51H存于1EH单元MOV1FH,#71H;负数存放首地址71H存于1EH单元MOVR0,#20H;建立取数(源操作数)的地址指针MOVR2,#30;预置数据长度MOV50H,#00H;正数个数统计单元清零MOV70H,#00H;负数个数统计单元清零LOOP:MOVA,@R0;取数JBACC.7,NEG;是负数转NEG处理POST:MOVR1,1EH;是正数,将暂存的地址送R1(间址寄存器)MOV@R1,A;将正数入存INC50H;正数个数加1INC1EH;正数暂存地址加1修正LOOP1:INCR0;取数地址加1修正DJNZR2,LOOP;计数长度减1,不等于零,继续循环统计SJMP$;结束NEG:MOVR1,1FH;是负数,将暂存的地址送R1(间址寄存器)MOV@R1,A;将正数入存INC70H;负数个数加1INC1FH;负数暂存地址加1修正SJMPLOOP1;转取数地址修正15内部存储单元40H中有一个ASCII码字符,试编一程序,给该数的最高位加上奇检验。解:ORG0000HSJMPSTARTORG0030HSTART:MOVA,40H;取数给ACLRACC.7;A最高位(奇偶校验位)清零JBP,LOOP;40H中的ASCII码原来就是奇数个1(最高位给零)SETBACC.7;40H中的ACSII码原来是偶数个1,最高位置1LOOP:MOV40H,A;入存SJMP$;结束END16.编写一段程序,将存放在自DATA单元开始的一个四字节数(高位在前)取补后送回原单元。解:若DATA在内部数据存储器中(假如存放在30H起始的4个单元中);采用求反加1的算法;ORG000HSJMPSTARTORG0030HSTART:SETBC;置进位位为1MOVR2,#04H;预置计数长度MOVR0,#DATA1+3;取数指针指向低字节的地址LOOP:MOVA,@R0;取数CPLA;求反ADDCA,#00H;加进位MOV@R0,A;入存DECR0;地址指针修正DJNZR2,LOOP;4字节未处理完,继续循环处理SJMP$;结束DATA1EQU30H;END17.以BUF1为起始地址的外存储区中,存放有16个单字节无符号二进制数,是编一程序,求其平均值并送BUF2单元。解:设R2、R3存放和,将其除以16(R2、R3联合左移4位)即为平均置值(单字节存放)ORG0000HSJMPSTARTORG0030HSTART:MOVR2,#00H;和高字节清零MOVR3,#00H;和低字节清零MOVDPTR,#DATA1;建立外部数据存储器的地址指针MOVR4,#10H;预置计数长度LOOP:MOVXA,@DPTR;从外部数据存储器取数ADDA,R3MOVR3,AMOVA,R2;ADDCA,#00H;MOVR2,A;累加INCDPTR;地址指针修正DJNZR4,LOOP;16字节未累加完,继续循环累加MOVR4,#04H;R2、R3联合移位4次(除以16)LOOP1:CLRCMOVA,R2RRCAMOVR3,ADJNZR4,LOOP1;平均值存放于R3中SJMP$;结束DATA1EQU1000H;END18.在DATA1单元中有一个带符号8位二位进制数x。编一程序,按以下关系计算y值,送DATA2单元。y=x+5,x>0y=x,x=0y=x-5,x<0解:设DATA1、DATA2为内部数据存储器的二个单元(假设为30H、31H)且y的值单字节不会产生溢除出ORG000HSJMPSTARTORG0030HSTART:MOVA,30H;取数X给AJZZERO;若X=0,则Y=0,转入存JBACC.7,NEG;若X<0,则转X-5POZI:ADDA,#05H;若X>0,则X=5,入存SJMPZERO;NEG:CLRC;SUBBA,#05H;ZERO:MOV31H,A;结果入存SJMP$END19.设内部RAM中30H和31H单元中有两个带符号数,求出其中的大数存放在32H单元中。解:若两数同号,则值大的数大;两数异号,正数值大ORG000HSJMPSTARTORG0030HSTART:MOVA,30HXRLA,31H;两数异或JBACC.7,YIHAO;两数异号TONGHAO:CLRC;两数同号MOVA,30HSUBBA,31HJCLOOP1-2LOOP0:MOVA,30H;同号被减数大,值大LOOED:MOV32H,ASJMP$LOOP1:MOVA,31H;异号被减数大,值小SJMPED;YIHAO:MOVA,30H;异号,哪个正,其值大JNBACC.7,LOOP0SJMPLOOP1END20.利用逻辑控制的,设计一个主程序,在第1,3,5,6次调出SB1子程序,第2,4,7,8次调用SB2程序。解:ORG000HSJMPTESTORG0030HTEST:MOVR2,#08HMOVA,#10101100BLOOP:RLCAJCLOOP1LCALLSB1SJMPRELTLOOP1:LCALLSB2RELT:DJNZR2,LOOPSJMP$PRGO:RETPRG1:RETEND21.将DATA单元存放的以ASCII码表示的16进制数转换成十进制数存放于DATA+1单元。解:先将DATA的ASCII码转换成十六进制的数,再转换成十进制数。数字的ASCII码转成十六进制数(即为十进制数)采用减30H字母的ASCII码转成十六进制数采用减37H,十六进制再转十进制可采用先减0AH,再加10H;这样-37H-0AH+10H=-31H,可采用直接减31H。数字与字母的ASCII的区别,可采用对D6的检测D6=1为字母的ASCII码,反之为数字的ASCII码。ORG000HSJMPTESTORG0030HTEST:MOVR0,#DATA1MOVA,@R0;将DATA1的数给ACLRC;LOOP:JBACC.6,LOOP1;是字母,转LOOP1SUBBA,#30H;是数字减30HED:MOVDATA+1,A;入存SJMP$;结束LOOP1:SUBBA,#31H;是字母减31HSJMPED;DATA1EQU30HEND22.编一个将十六进制数转换成十进制数的子程序。解:一个单字节的十六进制数转成十进制数一般考虑用二字节BCD码来存放。设转换后的数存放在R3(高)、R4(低)中。ORG000HSJMPTESTORG0030HTEST:MOVDPTR,#TAB;建立表头地址MOVA,30HANLA,#0F0HSWAPA;高半字节分离ADDA,0E0H;高半字节数乘2MOVB,A;暂存MOVCA,@A+DPTR;MOVR3,A;取转换后的高半字节存R3INCDPTR;MOVA,B;MOVCA,@A+DPTR;MOVR4,A;取转换后的低半字节存R4MOVA,30H;ANLA,#0FH;ADDA,R4;DAA;MOVR4,A;加原数的低半字节(DAA)MOVA,R3;ADDCA,#00H;DAA;MOVR3,A;RET;TAB:DB00H,00H,00H,16H,00H,32H,00H,48H,00H,64HDB00H,80H,00H,96H,01H,12H,01H,28H,01H,44HDB01H,60H,01H,76H,01H,92H,02H,08H,02H,24HDB02H,40H,02H,40H,02H,56HEND23.编一程序,将存储区DATA1单元开始的20个单字节数据依次与DATA2单元为起始地址的20个单字节数据进行交换。解:设DATA1、DATA2分别为内部RAM30H和50H单元。ORG0000HSJMPSTARTORG0030HSTART:MOVR0,#30H;建立源地址指针MOVR1,#50H;建立目标地址指针MOVR6,#20;置计数长度LOOP:MOVA,@R0;取源地址数据vt.跳过(障碍)XCHA,@R1MOV@R0,A;源地址数据与目标地址数据交换INCR0;源地址指针修正INCR1;目标地址指针修正DJNZR6,LOOP;计数长度减1,不等于0继续循环RETEND24试编写一程序,将存储区DATA1单元开始的50个单字节逐一移至DATA2单元开始的存储区中。解:START:MOVR0,#DATA1;建立源操作数地址指针MOVR1,#DATA2;建立目标操作数地址指针MOVR6,#50;置计数长度LOOP:MOVA,@R0MOV@R0,AINCR0INCR1DJNZR6,LOOPRETEND25试编写一采用查表法求1~20的平方数子程序(要求:x在累加器A中,1≤x≤20,平方数高位存放在R6,低位在R7)解:为了方便起见,每一数的平方在表中统一用双字节来存放,这样只要把数乘以2加表头地址,就可以找到平方数的高字节存放的地址,连续取两个字节即可ORG0000HSJMPSTARTORG0030HSTART:MOVDPTR,#TAB;建立源地址指针DECAMOVB,AADDA,BMOVB,ALOOP:MOVCA,@A+DPTRMOVR5,AINCDPTRMOVA,BMOVCA,@A+DPTRMOVR6,ARETTAB:DB00H,00H,00H,01H,00H,04H,00H,09H,00H,16H;平方数用BCD表示(也可用DB00H,25H,00H,36H,00H,49H,00H,64H,00H,81H;十六进制表示)DB01H,00H,01H,21H,01H,44H,01H,69H,01H,96HDB02H,25H,02H,56H,02H,89H,03H,24H,03H,61H,04H,00HEND若平方表从0的平方存放,把程序中红色的DECA指令去掉,若表从1的平方存放,则将DECA指令加上。26试编写一个三字节无符号数乘法程序。解:OGR0000HMOVR0,#5CHMUL1:MOVA,5AHMOVB58HMULABMOV@R0,AMOVR3,BMOVA,5BHMOVB,5BHMULABADDA,R3MOVR3,AMOVA,BADDA,R2MOVR2,AMOVR1,#AJNCLASTINCR1LAST:MOVA,5BHMOVB,29HMULABADDA,R2INCR0MOV@R0,AMOVA,BADDCA,RIINCR0MOV@R0,AMOVR5,#04HMOVR1,#10HLOOP:MOVA,@R0MOV@R1,AINCR0INCR1BINBCD:MOVR1,#48HMOVR2,#04HINCR2CLRABB0:MOV@R1,AINCR1DJNZR2,BB0MOVA,#04HMOVB,#8MULABMOVR3,ABB3:MOVR0,#10HMOVR2,#04HCLRCBB1:MOVA,@R0RLCAMOV@R0,AINCR0DJNZR2,BB1MOVR2,#04HINCR2MOVR1,#48HBB2:MOVA,@R1ADDCA,@R1DAAMOV@R1,AINCR1DJZNR2,BB2DJZNR3,BB3SJMP$精品文档精品文档精品文档
/
本文档为【单片机原理与运用-第三章答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索