版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章部分习题答案 4.7 设内部RAM20H单元有两个非零的BCD数,编写求两个BCD数的积并把积送入21H单元的程序。 ORG1000H MOVA,20H MOVB,A;保存 SWAPA ANLA,#0FH;取高4位 ANLB,#0FH;取低4位 MULAB MOVB,#0AH DIVAB;转换成BCD码的形式 SWAPA ORLA,B MOV21H,A SJMP$ END 4.8 已知从内部RAMBLOCK单元开始存放有一组带符号数,数的个数存放在LEN单元。编写可以统计正数和负数个数并分别存入NUM和 NUM+1单元的程序。 orglOOOh numdata30h lendata20h
2、 blockdata40h movrO,#block movnum,#00h;保存正数个数 movb,#00h;保存负数个数 loop:mova,r0 incrO jbacc.7,neg incnum sjmpnext neg:incb next:djnzlen,loop movnum+1,b sjmp$ 4.9 设X为一无符号数, 存放在内部RAM的VAX单元,Y存放在FUNC单元。编写满足如下关系的程序: XX50 Y=(5X50X20 2XX20 org2000h vaxdata20h funcdata30h mova,vax cjnea,#32h,compl compl:jcnextl
3、 movfunc,a sjmpdone nextl:cjnea,#14hcomp2 comp2:jcnext2 作业: 7、 、9、 10、11、 15、17、19、20 end movb,#05h mulab movfunc,a sjmpdone next2:clrc rlca movfunc,a done:sjmp$ end 4.10 在例4.6的128分支程序中, 若用LJMP指令代替AJMP指令,以便分支程序可以放在64KB地址范围的任何位置。修改原程序,修改后的程序最多可以实现多少分支。 LJMP是三字节指令,最大分支数N应满足条件:NX3:LJMPROUTOO LJMPROUTOl
4、 LJMPROUT02 1 1 LJMPROUT85 ROUTOO:1 1 11 1 ROUT85:1 1 sourcedata distdata movmov mov mov 20h 50h rO,#source rl,#dist r2,#len p2,#00h loop:movxa,r0 incrO jnbpsw.O,next movrl,aincrl next: r2 2000h lOh 20h p2,#00hrO,#source rl,#dist a,r0 rO rl,arl a,#24h,next$ 4.15 外部RAM从2000H到2100H有一数据块,编写 程序将它们传送到从30
5、00H到3100H区域。 ORG0H MOVDPTR,#2000H MOVXA,DPTR ORLDPH,#10H ;将DPH从20H变成3()H MOVXDPTR,A ANLDPH,#0EFH;将DPH从30H变成20H INCDPTR MOVA,DPH CJNEA,#21H,NEXT MOVXA,DPTR MOVDPH,#31H MOVXDPTR,A ;传送2100H单元中的内容到3100H SJMP$ END 4.16 片内RAM中有一数据块起始地址为FIRST+1,长度存放在FIRST中且不为0,统讣数据块中正偶数和负奇数的个数,分别存放在PAPE单元和NEXT: MINDATA10H
6、MOVRO,#BLOCK MOVR2,#64H MOVMIN,#0FFH LOOP:MOVA,R0 NAOE单元。 ORGOH ORGOH PAPEDATA、20H NAOEDATA21H FIRSTDATA30H FIRST SECON SUM DATA20H DDAT.A40H DATL60HA MOV RO,#FIRST LOOP: MOVPAPE,#()0H MOVNAOE,#00H MOVRO,#FIRST INCRO;数据块的起始地址 MOVA,R0 INCRO JBACC.7,NEXT;负数 JBACC.O,PP 9如果是正奇数,则取下一个数 9 INCPAPE SJMPPP L
7、OOP: MOV MOV MOV CLR NEXT: PP: JNBACC.O,PP 9如果是负偶数, 则收下一个数9 INCNAOE DJNZFIRST,LOOP SJMP$ END 4.17从内部RAM的BLOCK为起始地址的100个无符 号数中找出最小值并把它送入MIN单兀O ORGOH BLOCKDATA20H R1,#SECOND R2,#06H R3,#04H C LOOP1:MOVA,R0 ADDCA,R1 MOVR0,A ;将和存放在以FIRST开始的区域 INCRO INCRI DJNZR3,LOOP1 DJNZR2,LOOP MOV MOV MOV LOOP2:MOV MO
8、V INC INC DJNZ RO,#FIRST Rl,#SUMR2,#24 A,R0 R1,ARO Rl R2,LOOP2 CJNEA,MIN,NEXT NEXT:JNCNEXT1 MOVMIN,A SJMP$END 4.19内部RAM 匚P,数据块以BLOCK为起始 地址,块长放在LEN单元。用查表指令编写程序,先检查它们是否是十六进制中的A-F,若是,则把它们变成ASCII码,若不是,则把它们变为OOHoNEXT1:INCRO ORGOH LENDATA10H BLOCKDATA20H 4.18内部RAM区,6组无符号4字节被加数和加数分别存放在以FIRST和SECOND为起始地址的区
9、域(低字节在前,高字节在后),编程求和(设和也为4字节)并把和存于以SUM开始的区域。DJNZR2,LOOP SJMP$ END MOVRO,#BLOCK MOVDPTR,#ASCTAB MOVA,R0 CJNEA,#0AH,NE1 JNCNE2 ;若大于等于A,则去与F比较 SJMPCHZERO ;若小于A,则变成0 CJNEA,#0FH,NE3;与F比较 SJMPCHASC ?若等于F,则转成ASCII码 JCCHASC ;若小十尺则转成ASCII巾马 CHZERC):CLRA;若大于F,则变成0SJMPNEXT CHASC:ADDA,#07H;查表求ASCII码 CLRC SUBBA,#
10、OAH MOVCA,A+PC MOVR0,A INCR0 DJNZLEN,LOOP SJMP$ ASCTAB:DBA,BC,D,E,F END 在片内RAM的20H单元中有一个数,其值范围为0-100,要求利用查表法求此值的平方值并把结果存入片外RAM的20H(低字节)和21H。 ORG00H MOVP2,#00H MOVRO,#21H LOOP: MOVA,20H CLRC RLCA MOVB,A MOVDPTR,#DTATAB MOVCA,A+DPTR MOVXR0,A DECRO MOVA,B MOVCA,A+DPTR MOVXR0,ASJMP$ DTATAB:DW0,1,4,9,16,
11、25,36,49 DW64,81,100,11*11,12*12 DW13*13,14*14,15*15,16*16 DW100*100 END 内部RAM中,从BLOCK开始的存储区有 10个单字节十进制数(每字节有两个BCD数), 编程求BCD数之和(和为3位BCD数),并把它们存于SUM和SUM+1单元(低字节在 SUM单元)。 ORGOOH BLOCKDATA20H SUMDATA10H MOVRO,#BLOCK INCA LOOP: NE1: NE2: NE3: NEXT: MOVR2,#0AH MOVA,#O0H MOVRl,#SUM INCR1 ;SUM+1单元中存放累加和的尚位
12、 MOVRl,#00H ADDA,R0 DAA INCR0 JNCNEXT INCR1 ;将进位送到累加和的高位 NEXT:DJNZR2,LOOP MOVSUM,A SJMP$END 4.22将例4.21中,改为10个双字节十进制求和 (和为4位BCD数),结果仍送到SUM开始的连续单元(低字节先存) RLA;因为2ab255送到A BLOCKDATA20H SUMDATA10H RO,#BLOCK R2,#0AH SUM,#00H SUM+1,#00H B,#00H ;存放累加和的最高位 A,SUM ADDA,R() DAA MOVSUM,A INCRO MOVA,SUM+1 ADDCA,R
13、0 DAA MOVSUM+1,A INCRO JNCNEXT INCB;将进位送到累加和的高位 NEXT:DJNZR2,LOOP MOVSUM+2,B SJMP$ END ADDA,MDC MOVMDC,A JNCNEXTINCMDC+1 NEXT:MOVA,MDB ACALLSQR ADDA,MDC MOVMDC,AJNCNEXT1 INCMDC+1 NEXT1:SJMP$ SQR:ADDA,#01H MOVCA,A+PC RET SQRTAB:DB0,1,4,9,16 DB25,36,49,64,81END 己知外部RAM起始地址为STR的数据块中有一以回车符CR断尾的十六进制ASCIL编
14、写程序将它们变为二进制代码,放在起始地址为BDATA的内部RAM存储区1K 己知MDA和MDB内分别存有两个小于10的整数,用查表子程序实现c=a*a+2ab +b*b,并把和存于MDC和MDC+1单元(MDC中放低字节) ORGOOH MDADATA10H MDBDATA20H MDCDATA30H ORGOH STRDATA10H BDATADATA50H MOVP2,#00H MOVRO,#STR MOVRl,#BDATA LOOP:MOVXA,R0 INCRO ORGOOH MOV MOV MOV MOV MOV LOOP:MOV CJNEA,#0DH,NEXT SJMPDONE NE
15、XT:CJNE NEXT1:JNC ANL SJMP NEXT2:CLR SUBB DONE:MOV INCR1 SJMP A,#40H,NEXT1 NEXT2 F A,#0FH DONE C A,#37H R1,A LOOPMOVMDC+1,#00H MOVA,MDA ACALLSQRMOVMDC,A MOVA,MDA MOVB,MDB MULAB ORGOH SJMP$ END 程序流程图如下: 设晶振频率为6MHz,试编写能延时20ms的子程序因为晶振频率为6MHz,则一个机器周期为: 12x-=2X10-6S 6M 延时20ms则需要10000个机器周期。 即:(20 xl0_3)-(
16、2X10$=10000 按下面的程序有如下的关系式: 1+R2*(I+R3*(1+2)+2)=10000 通过计算,设R2=101,R3=32o MOVR2,#101;1 LOOP:MOVR3,#32;1 L00P1:NOP;1 DJNZR3,LOOP1;2 DJNZR2,LOOP;2 SJMP$ END 已知内部RAM的MA(被减数)和MB(减数)中分别有两个带符号数。编写减法子程序,并把差存入RESULT和RESULT+1单元中。 ORG0H MADATA20H MBDATA30H RESULTDATA40H 开 始 Y CLRC MOVRO,#MA MOVR1,#MBACALLSUB MOVRESULT,A INCR0 INCR1 ACALLSUB MOVRESULT+1,A SJMP$ SUB:MOVA,R0 SUBBA,R1 RET END 设RO内有一个补码形式的带符号被除数,R1内部补码形式的带符号除数,编程实现除法,并把商内且余数置于R3内。 于R2 MOV A,RO RLC MOV SBIT1,C MOV RLC A,R1 A NCH1: NCH2: NCH3: NCH4: MOV ANL MOV MOV ANL ORL MOV MOV JNB CPL INC MOV MOV JNB CPL INC DIV JNB CPL INC MOV JNB MOV CP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淄博市巡游出租汽车驾驶员区域科目考试题库及答案(供参考)
- 2025年河北女子职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 普通合伙合同协议书
- 隔音降噪合同范本
- 幼儿园中班建康活动策划方案五篇
- 信号工劳务合同
- 标准钢材购销合同样本
- 智能设备研发与生产合作合同
- 代理的合同范本
- 2024年数字化教育平台推广合同
- 测井监督管理手册
- 冷库库房招商方案
- 芯片可靠性分析
- 2023年贵州省毕节市中考物理试题(原卷+解析版)真题含答案
- 口腔种植技术临床应用能力评估报告范本
- 从中国制造到中国创造(优秀课件)
- 新华字典第12版电子版
- 【考试版】苏教版2022-2023学年四年级数学下册开学摸底考试卷(五)含答案与解析
- 血液透析个案护理两篇
- 第八章 客户关系管理
- 新版人教版高中英语选修一、选修二词汇表
评论
0/150
提交评论