资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第一章1.5 129=10000001B=81H; 253=11111101B = FDH;21.125=10101.001B=15.2H 18.6=10010.1001,1001,1001B=12.999H (无限循环小数,根据精度确定需要的位数)1.12由题得三者均为正数,所以原码、反码、补码相同,故x1= x2= x3=0101,0111B=57H=871.13 该题与上题不同在均是负数,故原码、反码、补码相同的情况下,原数并不相同。第二章2.6最后一问:如果CPU使用两组寄存器,一般使用第0与第1组,那么剩下的寄存器组对应的地址单元可作一般缓冲用,第0与第1组已用掉地址:00H0FH, 故而堆栈SP的初值可设定在0FH或以上。第三章3.6 (1) A=57H, Cy=1(在符号位产生进位, 进位标志位Cy=1),进位的1是丢掉,累加器只能存8位信息。有同学写成A=157H, Cy=0. (2) A=3BH, Cy=03.8 SP=2FH, DPH=01H, DPL=23H, A=20H注意SP在每次的POP减一,故最终SP=2FH.(30H单元的前一单元不是29H)3.9 堆栈(0AH)=34H, (0BH)=12H, SP=0BH有的同学仅写DPTR的内容,是不够的,这里是将DPTR的内容压入栈中,但DPTR本身不代表堆栈。推荐精选3.24 Loop循环完成的是24位的加法,每步将带进位位Cy相加,同时影响进位位。故经过loop循环后R0指向22H单元,结果送原R0指向的地址单元。原来:(22H)=A0H (27H)=76H(21H)=90H (26H)=6FH(20H)=80H (25H)=A0HLoop循环:(22H)=17H Cy=1(21H)=00H Cy=1(20H)=20H Cy=1之后,R0=23H, R1=28H。因Cy=1, 故(23H)=01H。所有地址单元只可存八位数,不可(21H)=160H. 3.25 A=10001100=8CH,执行乘以10的功能,因为A*2+A*2*2*2=A*10有的同学没有写出是乘以10的功能。3.26 实现的如下逻辑运算(P1.0 P1.1) P1.2 (P1.3),其中以用户标志位F0来存储(P1.0 P1.1) P1.2的结果。第四章4.5 略有的同学有这样的指令:MOV R0, #2100H. R0只能存八位,故只能指向低位的地址区。有的同学逻辑搞反,不为零应该继续循环,故:DJNZ R2, LOOP就可以了,不需要太复杂。还有的同学传送方向搞反了,程序写成:MOVX A, DPTRMOV R0, A计数器初始值应该为21H.补充习题,有的同学忘做,可以简单回答:LJMP与LCALL的主要区别是未发生保护现场、恢复现场操作。推荐精选4.8 采用一种子程序的形式实现: ORG 1000H MOV DPTR, #3001H MOVX A, DPTR MOV B, A ; 也可用其它内部存储单元临时存放3001H的内容。 MOV DPTR, #3000H MOVX A, DPTR ACALL SQRSUM CJNE A, #10, EXE1 SJMP SAVEDATAEXE1: JC ADD10 SUBB A, #10 SJMP SAVEDATAADD 10: ADD A, #10SAVEDATA: MOV DPTR, #3002H MOVX DPTR, ADONE: SJMP DONESQRSUM: ADD A, B ;该子程序以寄存器A与B传送参数值 MOV B, A MUL AB RET END该程序没有考虑若a+b255,以及(a+b)2255的情况下,实际的角度应该就这两方面进行放弃操作。但本题未说明出现这种情况如何情况,为简化程序中未写入这些情况的处理。4.9 循环加判断实现 ORG 1000H MOV DPTR, #1000H MOV R2, #99 ;本程序循环的地址指针已经从1001H单元开始,故循环次数减1MOVX A, DPTR MOV 30H, A ;将当前值存入临时的30H单元LOOP: INC DPTRMOVX A, DPTRSUBB A, 30HJB ACC.7, NEXTADD A, 30H ;恢复A中的值,因为最新的值刚才进行了减操作。MOV 30H, ANEXT: DJNZ R2, LOOP MOV A, 30H推荐精选 MOV DPTR, #1100H MOVX DPTR, A END4.10 ORG 1000H MOV DPTR, #2100H MOV R3, #100 ;总计数器 MOV R0, #00 ;0计数器 MOV R1, #00 ; 正数计数器 MOV R2, #00 ; 负数计数器LOOP: MOVX A, DPTRJZ COUNT0 ;以下是两次分支程序实现多分支程序JB ACC.7, CTNEG ;转入负数统计程序段CTPOS: INC R1 SJMP DONECTNEG: INC R2 SJMP DONECOUNT0: INC R0DONE: INC DPTRDJNZ R3, LOOP END 该程序与4.2.7有些类似。4.12 LOOP: MOV R0,#30HMOV R7,#100 ; LOOP1:MOV A,R0 ;JZ LOOP2JNB ACC.7, LOOP2CPL AADD A,#81HMOV R0,A ; LOOP2:INC R0 DJNZ R7,LOOP1 RET ; 4.20 晶振为6MHz,得每个机器周期为12*1/6s=2s, 可以先行计算对于100ms,需要循环50,000个机器周期;对于1s, 需要500,000个机器周期;考虑DJNZ为2个机器周期,故循环次数比刚才的数字减半。推荐精选对于100ms为简单,以25,000个DJNZ实现,可以250*100故,程序为由程序: ORG 1000H MOV R2, #250DELAY2: MOV R3, #100DELAY1: DJNZ R3, DELAY1 ; 这句将循环25,000次,执行时间最长。 DJNZ R2, DELAY2该程序执行时间:1+250*(1+100*2+2)=50751个机器周期=101.502ms,算对.精确的计算,可以将R3的值设为x,求解。1+250*(1+x*2+2)=50000,故x=98.5,取x=99程序执行时间:50251个机器周期=100.502ms. 对于1s, 由于需要500,000个机器周期, 以250,000个DJNZ实现已不方便。因为两个八位数相乘,最大255*255。故需要NOP指令加长内循环的时间。 ORG 1000H MOV R2, #250DELAY2: MOV R3, #DIMSDELAY1: NOP NOP NOP NOP NOP NOPDJNZ R3, DELAY1 ; 这句将循环62,500次,执行时间最长。 DJNZ R2, DELAY2简便计算:250*8*DIMS=500,000, 故DIMS=250该程序执行时间:1+250*(1+250*8+2)=500751个机器周期=1001.502ms,算对.第五章5.7 2761(1). 0000H1FFFH2761(2). 2000H3FFFH2761(3). 4000H5FFFH2761(4). 6000H7FFFH6264(1). 8000H9FFFH6264(2). A000HBFFFH推荐精选自测题5.32. 2764(a) C000HDFFFH 2764(b) A000HBFFFH6264 6000H-7FFFH第六章习题略第七章7.3已知8255A的口地址为7FF07FF3H,阅读下述程序,回答问题:执行13条指令后,要求A,B,C三个端口各干什么?答:通过向控制寄存器送82H的数值,可知,A口将工作于方式0,输出状态;C口上半部将工作于方式0,输出状态;B口将工作方式0,输入状态;C口下半部将工作于方式0,输出状态。已A口=FFH,B口=78H,C口=7FH,(30H)=32H,执行49条指令后,A口、B口、C口,(30H)中的值发生了什么变化 ORG 8000H1 MOV DPTR, #7FF3H2 MOV A, #82H3 MOV DPTR, A4 MOV DPTR, #7FF1H5 MOVX A, DPTR6 MOV 30H, A7 MOV DPTR, #7FF0H8 MOV A, #79H9 MOVX DPTR, A答:执行第4-5条指令,将从B口输入数据至累积器A,执行第6条指令,(30H)=78H;推荐精选执行第7-9条指令,将79H数值从A口输出,因此A口=79H,B口=78H,C口=7FH,(30H)=78H推荐精选第八章自测题8.3 (1) 定时器0工作于方式1(2) 机器周期1s, 初始值x
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号