第4章单片机汇编语言程序设计-练习_第1页
第4章单片机汇编语言程序设计-练习_第2页
第4章单片机汇编语言程序设计-练习_第3页
第4章单片机汇编语言程序设计-练习_第4页
第4章单片机汇编语言程序设计-练习_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第 页共16页第4章单片机汇编语言程序设计第第S页共16页第4章单片机汇编语言程序设计AJMPRTE多字节加法子程序:JASUB:CLRJASUB1:MOVADDCMOVAJMPRTE多字节加法子程序:JASUB:CLRJASUB1:MOVADDCMOVINCINCDJNZRETCA,ROA,R1RO,AROR1R2,JASUB1,加上另一数的一个字节;保存和数,指向加数的高位,指向另一加数的高位;全部加完了吗?ORG0030HSTARTMOV20H,#00H,计正数个数计数器MOVDPTR,#0000HMOVXA,DPTR,数据块长度tIOHMOV10H,AINCDPTR.DPTR指向第一

2、个数的地址TWO:MOVXA,DPTR;取数tAJBACC.7,ONE;是负数转ONE,准备取卜一个数INC20H;是正数,正数计数器加1ONE:INCDPTR;地址指针加1DJNZ10H,TW;数据块长度减1不等于0,继续寻找RET编程并注释。31若图数据块是有符号数,求正数个数,解和存放在54H,55H和56H中(56H用来存放最高位的进位),试编写加法程序。0000HSTART0100H32两个四位BCD码数相加,被加数和加数分别存于和存放在54H,55H和56H中(56H用来存放最高位的进位),试编写加法程序。0000HSTART0100HORGLJMPORGSTART:START:A

3、DDA,51HDAAMOV55H,AMOVA,52HADDCA,50HDAAMOV56H,CSJMP$END33在片内RAM地址40H到4FH的存储单元中存有16个无符号数,找出其中的最大值,放入50H单元,请用“循环结构”和“分支结构”编程。答:源程序ORG0000HLJMPMAINORG01OOHMAIN:MOVR2,#0FHMOVR0,#40HMOVA,R0SUB:INCROMOVB,ROCJNEA,B,NEXTNEXT:JCNEXT1DJNZR2,SUBJMPLASTNEXT1:MOVA,BDJNZR2,SUBJMPLASTLAST:MOV50H,ASJMP$34将片内若干个RAM单元

4、的内容复制到片外RAM单元,请用“主程序”调用“子程序”编程,要求子程序入口参数为:R0存放片内RAM起始地址,DPTR存放片外RAM起始地址,R1存放字节数。请分别编写主程序和子程序。答:源程序ORG0000HLJMPMAINORG0100HMAIN:MOVR1,#10HMOVR0,#40HMOVDPTR,#0000HLCALLCOPYSJMP$COPY:NEXT:MOVA,R0MOVXDPTR,AINCROINCDPLDJNZRl,NEXTRET35试编写程序,査找在内部RAM的30H50H单元中是否有0AAH这一数据。若有,则将51H单元置为“01H;若未找到,则将51H单元置为-00H

5、-oORG0000HMOVR0,#30HMOVR2,#21HLOOP:MOVA,R0CJNEA,#OAAH,NOTMOV51H,#01HSJMPDENDNOT:INCRODJNZR2,LOOPMOV51H,#00HDEND:SJMPDEND36试编写程序,査找在内部RAM的20H40H单元中出现“00H这一数据的次数。并将査找到的结果存入41H单元。ORG0000HMOVR0,#20HMOVR2,#21HMOV41H,#OOHLOOP:MOVA,R0CJNEA,#OOH,NOTEINC41HNOTE:INCRODJNZR2,LOOPEND37.设有两个4位BCD码,分别存放在片内RAM的23H

6、,22H单元和33H,32H单元中,求它们的和,并送入43H,42H单元中去。(以上均为低位字节,高位在高字节解:ORG0000HLJMPSTARTORG003OHSTART:MOVA,22HADDA,32HDAAMOV42H,AMOVA,23HADDCA,33HDAAMOV43H,ASJMP$END38.编程将片内RAM的40H60H单元中内容送到片外RAM以3000H开始的单元中。解:ORG0000HLJMPMAINORG003OHMAIN:MOVR7,#20HMOVR1,#40HMOVDPTR,#3000HLOOP:MOVA,R1MOVXDPTR,AINCR1INCDPTRDJNZR7,

7、LOOPSJMP$END39.试编一査表程序,从首地址为2000H.长度为9FH的数据块中找出第一个ASCII码A,将其地址送到20A0H和20A1H单元中。解:ORG0000HLJMPMAINORG003OHMAIN:LCALLSUBONEAJMP$,SUBONEusedpti;a,30h,31hSUBONE:MOVDPTR,#2000HLOOP:MOVXA,DPTRXRLA,#41HJNZTTMOVA,30HMOVDPTR,#20A0HMOVXDPTR,AMOVDPTR,#2OA1HMOVA,31HMOVXDPTR,ARETINCDPTRMOV30H,DPHMOV31H,DPLMOVA,3

8、1HCJNEA,OOH,LOOPRETTT:END40.请编程:片外RAM2000H开始的单元中有10个字节的二进制数,求它们之和,并将结果存储在片内RAM的30H的单元中(和V256)o答案:ORG0000HIMPMAINORG0100HMAIN:MOVR7,#0AHMOVDPTR,#2000HMOV30H,#00HADDIO:MOVXA,DPTRADDA,30HMOV3OH,AINCDPTRDJNZR7,ADDI0SJMP$END42、阅读程序,回答问题:设(70H)=60H,(60H)=20H,Pl口为输入口,当前的输入状态为B7H,执行下面的程序:MOVRO,#70HMOVA,R0MO

9、VRl,AMOVB,R1MOVR0,Pl执行后结果:(70H)=B7H,(B)=20H,(Rl)=60H,(RO)=70H。已知(A)=58H,(30H)=7FH,(Pl)=EAH,执行下列程序:MOVSP,#40HPUSHAPUSH30HMOVA,PlMOV30H,APOP30HPOPA执行后结呆:(SP)=40H,(A)=58H,(30H)=7FH(41H)=58H。(3)已知(30H)=49H,(31H)=2BH,(32H)=0A3H,执行以下程序:MOVR7,#4RRO:MOVR6,#3CLRCMOVRO,#30HRR1:MOVA,R0RRCAMOVR0,AINCRODJNZR6,RR

10、1DJNZR7,RRORET从该程序可看出这段程序的功能是:将内RAM中30H32H的内容右移4位,空位补0。(4分)执行后结果:(30H)=04H,(31H)=92H,(32H)=BAHo(4)按要求根据注释将下列程序补充完整:将内RAM的30HVFH16个单元中的数据比较大小,最大的数据存在40H单元内。(每空1.5分,共9分)MOV40H,30H:将初始单元送40H单元MOVRO,#31HMOVR7,#15;设置循环次数LOOP:CLRC:进位标志清0MOVA,40H;最人数给ASUBBA,R0:最人数与R0间址区相减JNCDY;A大于(R0)跳到DYMOVA,40H;小于则交换XCHA

11、,(ROMOV40H,ADY:INCRO:数据区指向下一单元DJNZR7,LOOP;循环是否结束?未结束跳到LOOPRET43、根据各题要求写出指令(共20分)(1)将片外RAM0030H单元的高4位清0,低4位不变。(4分)MOVDPTR,#0030HMOVXA,DPTRANLA,#0FHMOVXDPTR,A将片外RAM单元2000H的内容送给片外3001H单元。(4分)MOVDPTR,#2000HMOVXA,DPTRMOVDPTR,#3000HMOVXDPTR,A完成两个16位数的减法:744DH2B4EH,结果存入内部RAM的30H和31H单元,31H单元存放高字节,30H单元存放低字节

12、(7分)CLRCYMOVA,#4DHSUBBA,#4EHMOV30H,AMOVA,74HSUBBA,#2BHMOV31H,A将内部RAM中的20H、21H单元的两个无符号数相乘,结果存放在R2.R3中,其中R2存放高8位.R3存放低8位。(5分)MOVA,20HMOVB,21HMULABMOVR2,BMOVR3,A45.读程序,写结果。(每空1分,共8分)若(Rl)=30H,(A)=40H,(30H)=60H,(40H)=08Ho执行下列程序段:MOVA,R1;MOVR1,40H,MOV40H,A;MOVRb#7FH,执行后结果:(A)=60H,(30H08H,(40H60H,(R17FH己知

13、(A)=59H,(B)=7FH,(Pl)=OEAH,执行下列程序:MOVSP,#40HPUSHAPUSHBMOVA,PlINCPlMOVB,PlMULABPOP3OHPOPA执行后结果:(SP)=40H,(A)=59A,(B)=7FH,(Pl)=OEAH。46、按要求根据注释将下列程序补充完整。(每空1分,共12分)(1)将内RAM的30HVFH16个单元中的数据比较大小,最大数据存在40H单元内。(每空1分,共6分)MOV40H,30H:将初始单元送40H单元MOVRO,#31HMOVR7,#15;设置循环次数LOOP:CLRC:进位标志清0MOVA,40H:最人数给ASUBBA,R0:最人

14、数与R0间址区相减JNCDY;A大于(R0)跳到DYMOVA,40H;小于则交换XCH宓0MOV40H,ADY:INCRO:数据区指向卞一单元DJNZR7,LOOP:循坏是否结束?未结束跳到LOOPRET(2)已知变量X存放在内存RAM单元30H中,变量的取值范围在05之间,将变量的平方值存放在内存RAM单元40H中。试采用两个不同的方法完成此功能方法一:MOVA,30H;取变量,送入累加器ADDA,#02;修改变量的值MOVCAtA+PC:查表,取变最的平方值MOV40H,A将平方值存入40H单元中TAB:DB00,Oh04,09,16,25方法二:MOVA,30H;取变鼠,送入累加器MOV

15、DPTR,#TAB:将表格的首址送DPTRMOVCAtA+DPTR:查表,取变彊的平方值MOV40H,A:将平方值存入40H单元中TAB:DB00,Ob04,09,16,2547.阅读程序,写出结果L若(10H)=OFFHX11H)=OOH,(12H)=OFFH,(13H)=OOH,写出每一步指令运行结果MOVA,10HANLA,#01HMOVA,11HORLA,#01HMOVA,12HXRLA,#01HMOVA,13H(A)=0FFH(A01H,(A)=00H,(A)=01H,(AFFH.(A)=01H,(A)=00H,XRLA,#0AH(A)=0AH(10H)=FFH,(11H)=OOH,

16、(12H)=FFH(13H)=00H,MOV30H,#60HMOVR0,#60HMOVA,30HMOVB,AMOVR0,B(A)=60H,(R0)=60H,(B60H,3.MOVSP,#60HMOVA,#01H(A01H,MOVB,#02H(B)=02H,PUSHA(SP)=61H,PUSHB(SP)=62H,POPAPOPB(60H)=01H,48、程序分析:外部RAM3000H,3001H单元的内容分别为55H,0DDH,试分析如下程序,并回答问题。程序1:MOVDPTR,#3000HMOVR1,#40HMOVXA,DPTRMOVR1,AINCR1INCDPTRMOVXA,DPTRMOVR

17、1,A问题1:若执行上述程序,结束后,DPTR值为3OQ1H,R1的内容为55H,8031内部RAM41H单尤的内容DDH,40H单元内容为55Ho在上程序中,若继续执行如卜程序程序2:START:MOVDPTR,#3000HMOVR1,#40HMOVA,R1MOVXDPTR,A问题2:START执行结束后,DPTR的值为3000H,4000H单元的内容为55H,R1的内容为40H。问题3:执行如卜程序,填出A寄存器的内容。程序3.MOVA.#88HMOVr7#aahORLA.、R7:A的内容为AAHMOVA,#37HMOVR7,#89HANLA,R7A的内容为:01HXRLR7A的内容为:8

18、8HRET如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:POPDPH,POPDPL,POPSP,则:(DPH3CH;(DPL)=5FH;(SP)=50H;(6分)50、编写程序,将外部数据存储器中的5000H-50FFH单元全部清零(10分)。TOC o 1-5 h z答:ORG吓艸H(1分)MOVDPTR#5000HMOVR0,#00HCLRA(3分)LOOP:MOVXDPTR,AINCDPTR(3分)DJNZRO,LOOP(2分)HERE:SJMPHERE(RET,SJMP$等)(1分)51已知程序执行前有A=

19、02H,SP=52H,(51H)=FFH,(52H)=FFHO下述程序执行后:POPDPHPOPDPLMOVDPTR,#4000HRLAMOVB,AMOVCA,A+DPTRPUSHAMOVA,BINCAMOVCA,A+DPTRPUSHARETORG4000HDB10H,80H,30H,50H,30H,50H请问:A=(50H),SP=(50H),(51H)=(30H),(52H)=(50H),PC=(5030H)。设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行下列指令后,各有关存储单元(即RO,Rl,A,B,Pl,30H,40H及5AH单元)的

20、内容如何?MOVR0,#3OH;MOVA,R0tMOVR1,A;MOVB,R1;MOVR1,P1;MOVA,P1;MOV40H,#20H,MOV30H,40H;每一条指令执行后的结果如注释字段所标。最后结果为:R0=(30H),R1=(5AH),A=(7FH),B=(5AH),Pl=(7FH),(30H)=(20H),(40H)=(20H),(5AH)=(7FH)。假定SP=40H,(39H)=30H,(40H)=60Ho(4分)POPDPHPOPDPL执行上面指令后,DPTR的内容为6030H,SP的内容是3EH。请将片外RAM20H25H单元清零答:MOVRO,#20H(1分)MOVR7,

21、#06H(1分)CLRA(1分)LOOP:MOVXR0,A(1分)INCRO(1分)DJNZR7,LOOP(1分)请将ROM3000H单元内容送R5(4分)MOVDPTR,#3000H(1分)CLRA(1分)MOVCA,A+DPTR(1分)MOVR5,A(1分)阅读程序(30分)己知A=5BH,CY=1时,则执行SUBBA,#8EH指令后,(5分)A=CCH,CY=_1_,AC=_1_OV=_1_,P=0写出下列磧段执行后,柯岳存器或存佛承元的内蓉丽)MOVSP,6FHMOV30H,#12HMOV31H,#34HPUSH30HPUSH31HPOPBPOPACCSJMP$A=12H,B=34H,

22、(30H)=12H,(31H)=34H,(70H)=12H,(71H)=34H卜列各条指令其源操作数的寻址方式是什么?各条指令单独执行后,A中的结杲是什么?(5分)设(60H)=35H,A=19H,Ro=3OH,(30H)=0FHoMOVA,#48HADDA,60HANLA,R04、写出卜MOVA,#48HADDA,60HANLA,R04、写出卜列程序段执行后,寻址方式:血接讣址,A=4EH寻址方式:寄心器间接订址,A=_09H相关寄存器或存储单元的内容。MOVA,#7AHMOV35H,#3OHANLA,#0F0HSWPAORL35H,ASJMP$A=07H(35H)=37H5、写出卜列程序段执行后,相关寄存器或存储单元的内容。(4分)MOVA,#03HRLAMOVB,ARLARLAADDA,BSJMP$A=1EHB=06H6、在程序存储器中,数据表格为(6分)2000H:30H2001H:40H2002H:50H2003H:60H2004H:70H执行程序:1500H:MOVA,#00H1502H:INCA1503H:MOVDPTR,#2000H1506H:MOVCA,A+DPTR结果:a=40H,PC=1509H,DPL=OOH阅读

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论