华中科技大学 单片微型计算机第四章习题答案Word格式文档下载.docx
《华中科技大学 单片微型计算机第四章习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《华中科技大学 单片微型计算机第四章习题答案Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
INCR0;
修改地址指针
INCDPTR
DJNZR2,LOOP
4.8完成(a+b)2的计算
ORG0000H
LJMPMAIN
MOVDPTR,#3000H
MOVXA,@DPTR;
取数a
MOVR2,A;
暂存a
取数b
ADDA,R2;
a+b
MOVB,A
MULAB;
(a+b)2->
A
;
分支,方法一:
CJNEA,#0AH,L1
SJMPL3
L1:
JCL2
SUBBA,#0AH
L2:
ADDA,#0AH
L3:
MOVDPTR,#3002H
SJMP$
;
分支,方法二:
MOVR7,A
CLRC
SUBBA,#10
JNZL1
MOVA,R7;
A=10,恢复A中的值
SJMPDONE
JNCDONE
ADDA,#20;
A<
10,由于此前A中减去了10,所以此处加上20
DONE:
MOVDPTR,#3002H;
A>
10
MOVX@DPTR,A
SJMP$
4.9方法一:
;
说明:
每一轮循环的大数存入累加器A中
ORG0030H
MOVDPTR,#1000H;
置地址指针初值
数据长度初值
MOVR4,#0;
暂存结果单元清零
MOVXA,@DPTR;
取数
MOVR3,A;
暂存
MOVA,R4;
CLRC;
比较
SUBBA,R3
JNCNEXT
MOVA,R3;
大数存入累加器A
SJMPNEXT1
NEXT:
ADDA,R3;
恢复累加器A中的值
NEXT1:
INCDPTR;
MOVR4,A
MOVDPTR,#1100H
MOVX@DPTR,A;
存结果
方法二:
ORG0000H
MOVR2,#99;
INCDPTR
MOVXA,@DPTR
DJNZR2,LOOP
方法三:
大数存入R3
ORG0000H
MOVR3,#0;
JCNEXT
MOVR3,A;
DJNZR2,LOOP
MOVA,R3
MOVDPTR,#1100H
4.10判断带符号数为正数或负数的指令组合有:
(1)JNZ+JBACC.7
(2)CJNEA,#7FH,L1+JC(JNC)(3)CJNEA,#0,L1+JBACC.7
错误的指令组合有:
(1)CJNEA,#0,L1+JC(JNC)
(2)SUBBA,#0+JC(JNC)
方法一:
;
one-存放大于零的数的个数;
two-存放等于零的
数的个数;
three-存放小于零的数的个数
ONEEQU30H
TWOEQU31H
THREEEQU32H
LJMPSTART
ORG0040H
START:
MOVONE,#0
MOVTWO,#0
MOVTHREE,#0
MOVDPTR,#2100H
MOVR5,#100
MOVXA,@DPTR
JNZL1
INCTWO;
零的个数加1
SJMPDONE
JBAcc.7,L2;
若用JC指令,则错误
INCONE;
正数的个数加1
INCTHREE;
负数的个数加1
DJNZR5,LOOP
SJMP$
方法二:
CJNEA,#80H,L1
JNCL2
JZL3
INCONE;
JZL1
ANLA,#80H
JZL2
4.12;
负数求补,需保持符号位不变,方法有:
XRLA,#7FH
INCA
CPLA
ADDA,#81H
ADDA,#1
SETBACC.7
MOVR1,#30H;
首地址
MOVR7,#100;
数据长度
LP1:
MOVA,@R1
JNBACC.7,LP2
XRLA,#7FH;
负数求补
INCA
LP2:
MOV@R1,A
INCR1;
DJNZR7,LP1
4-15方法一:
压缩BCD码转换为ASCII码
入口参数-压缩BCD码在A中,出口参数-高4为BCD码转化后的ASCII码在R6中,低4位BCD码转换后的ASCII码在R5中
数据逆序存放,即低字节存入低地址,高字节存入高地址
BCDASC:
PUSHR7
MOVR7,A
ANLA,#0FH;
低4位转换
ADDA,#30H
MOVR5,A
MOVA,R7
ANLA,#0F0H;
高4位转换
SWAPA
MOVR6,A
POPR7
RET
MOVR4,#5
MOVDPTR,#2000H;
源地址
MOVR3,#05H;
目的首地址低8位
PUSHDPL;
源地址保护
LCALLBCDASC
MOVDPL,R3
MOVA,R5
INCDPL
MOVA,R6
MOVR3,DPL
POPDPL
INCR3
DJNZR4,LOOP
MOVDPTR,#2000H
MOVR7,#5;
MOVR6,#05H;
目标地址低8位
MOVR5,#00H;
源地址低8位
MOVDPL,R5
INCR5
MOVR4,A;
数据送入R4保护
MOVDPL,R6
INCR6
LCALLBCDASC;
低4位转换成ASCII码
MOVA,R4
SWAPA
MOVDPL,R6
高4位转换成ASCII码
DJNZR7,LOOP
ANLA,#0FH;
屏蔽高4位,保留低4位
MOVX@DPTR,A;
存数据
RET
4.17参照教材P103例4.2.23
ORG1000H
SUBMB:
CLRC
MOVA,@R0;
取被减数
SUBBA,@R1;
相减
MOV@R0,A;
INCR1
JNCDONE
SETBF0;
若有借位,置位标志位
RET
4.26两个两位BCD码
BCDBIN:
MOVR0,#20H;
BCD码首地址
MOVR1,#30H;
二进制数首地址
MOVR3,#02H;
取BCD码
取高4位,屏蔽低4位
MOVB,#10
MULAB;
高4位×
MOVR2,A
MOVA,@R0
ANLA,#0FH;
取低4位,屏蔽高4位
ADDA,R2;
10+低4位
MOV@R1,A
修改地址指针
INCR0
DJNZR3,LOOP
两位BCD码转换为二进制数子程序,R1为二进制数地址指针,R0为BCD码地址指针
MOV@R1,#0
XCHDA,@R1
MOVB,#10
MULAB
ADDA,@R1
MOV@R1,A