思考题与习题4及答案赵晓安.docx
《思考题与习题4及答案赵晓安.docx》由会员分享,可在线阅读,更多相关《思考题与习题4及答案赵晓安.docx(14页珍藏版)》请在冰豆网上搜索。
思考题与习题4及答案赵晓安
思考题与习题4及答案
4-1试编程实现将20H单元的两位BCD数相乘,结果以BCD码的形式存于21H单元当中。
4-1-1ORG0000H
MOV20H,#56H
MOVA,20H
ANLA,#0FH
MOVB,A
MOVA,20H
ANLA,#0F0H
SWAPA
MOVR2,A
DECB
LOOP:
ADDA,R2
DAA
DJNZB,LOOP
MOV21H,A
SJMP$
END
4-1-2
ORG0000H
MOV20H,#56H
MOVA,20H
MOVR0,#21H
MOV21H,#0
XCHDA,@R0
MOVB,@R0
SWAPA
MOVR2,A
DECB
LOOP:
ADDA,R2
DAA
DJNZB,LOOP
MOV21H,A
SJMP$
END
4-1-3错误做法
ORG0000H
MOV20H,#56H
MOVA,20H
ANLA,#0FH
MOVB,A
MOVA,20H
ANLA,#0F0H
SWAPA
MOVR2,A
MULAB;(A)=1EH
DAA;(A)=24HERROR
MOV21H,A
SJMP$
END
4-2设一个加数在50H~52H单元中,另一个加数在53H~55H中,进位存放在位地址00中,
试编程实现两数求和。
ORG000H
ONEDATA50H
TWODATA53H
WEIBIT00H
MOVR0,#ONE
MOVR1,#TWO
;MOVC,WEI
CLRC
MOVR2,#3
LOOP:
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
MOVWEI,C
SJMP$
END
4-2-2
ORG0000H
ONEDATA50H
TWODATA53H
WEIBIT00H
MOVR0,#ONE
MOVR1,#TWO
CLRC
MOVR2,#3
SETBRS0
MOVR0,#58H
CLRRS0
LOOP:
MOVA,@R0
ADDCA,@R1
INCR0
INCR1
SETBRS0
MOV@R0,A
INCR0
CLRRS0
DJNZR2,LOOP
MOVWEI,C
SJMP$
END
4-3试用除法指令将20H单元的两位BCD码变成ASCII码后存入21H和22H单元。
4-3
ORG0000H
MOV20H,#67H
MOVA,20H
MOVB,#10H
DIVAB
ADDA,#30H
MOV21H,A
ORLB,#30H
MOV22H,B
SJMP$
END
4-4从20H单元开始存放一组带符号数,其数目已存在1FH单元。
要求统计出大于0、小于0和等于0的个数并存于ONE、TWO、THREE三个单元。
4-4
ORG0000H
ONEEQU30H
TWOEQU31H
THREEEQU32H
NUMEQU1FH
MOVNUM,#0FH
MOVR0,#20H;-1,2,34,0A0H,0....
MOVR1,#ONE
LOOP:
MOV@R1,#0
INCR1
CJNER1,#34H,LOOP
LOOP1:
MOVA,@R0
JZMTHREE
JBACC.7,MTWO
INCONE
SJMPDJNZZ
MTHREE:
INCTHREE
SJMPDJNZZ
MTWO:
INCTWO
DJNZZ:
INCR0
DJNZNUM,LOOP1;NUM=0FH
SJMP$
END
4-5在用JMP指令实现128分支的程序中,试用LJMP代替AJMP指令。
修改后的程序有何特点?
最多能实现多少分支?
4-5
AJMP指令表128分支占128*2=256字节MEMORY
LJMP指令表可以实现256/3=85个分支
特点:
各分支可在64KB存储器中转移。
4-6设自变量X为一无符号数,存放在内部RAM的VAX单元,函数Y存放在FUNC单元,请编出满足如下关系的程序:
XX≥50
Y=5X50>X≥20
2XX<20
4-6
ORG0000H
VAXEQU30H
FUNCEQU31H
MOVVAX,#55;15;20;25;50;55
MOVA,VAX
CJNEA,#20,DO1
DO1:
JNCDO2
MOVB,#2
MULAB
SJMPMEM
DO2:
CJNEA,#50,DO3
DO3:
JNCMEM
MOVB,#5
MULAB
MEM:
MOVFUNC,A
SJMP$
END
X
Y
X
Y
15
2X=30=14H
50
X=50=32H
20
5X=100=64H
55
X=55=37H
25
5X=125=7DH
4-7外部RAM从2000H到2100H有一数据块,请编出将它们传送到外部RAM3000H到3100H区域的程序。
4-7ORG0000H
MOVDPTR,#2000H
MOVP2,#30H
MOVR0,#00H
MOVR2,#0
LOOP:
MOVXA,@DPTR
MOVX@R0,A
INCDPTR
INCR0
DJNZR2,LOOP;0—FF--0
MOVXA,@DPTR;(DPTR)=2100H
INCP2;31H
MOVX@R0,A
SJMP$
END
4-8在内部RAM中,有一个以BLOCK为始址的数据块,块长在LEN单元。
请用查表指令编一程序,先检查它们若是16进制中的A~F,则把它们变为ASCⅡ码;若不是,则把它们变为00H。
4-8
BLOCKEQU31H
LENEQU30H
NEQU30
ORG0000H
MOVR0,#BLOCK
MOVLEN,#N
MOVR2,LEN
LOOP:
MOVA,@R0
CJNEA,#0AH,DO1
DO1:
JNCDO2
SJMPDO5
DO2:
CJNEA,#0FH,DO3
SJMPDO4
DO3:
JCDO4
DO5:
MOVA,#0
SJMPNEXT
DO4:
MOVDPTR,#TAB
CLRC
SUBBA,#0AH
MOVCA,@A+DPTR
NEXT:
MOV@R0,A
INCR0
DJNZR2,LOOP
SJMP$
TAB:
DB'A','B','C','D','E','F'
END
4-9试编写一个子程序将字符串:
“MCS-51Microcntrol”装入外部RAM8000H开始的显示缓冲区。
4-9
ORG0000H
MOVDPTR,#TAB
MOVP2,#80H
MOVR0,#00H
MOVR2,#19
LOOP:
MOVA,#0
MOVCA,@A+DPTR
MOVX@R0,A
INCR0
INCDPTR
DJNZR2,LOOP
SJMP$
tab:
DB'MCS-51Microcontrol'
END
4-10将内部RAM的AAA单元中8位无符号二进制数转换成用BCD码表示的十进制数。
(要求用连续除10的方法实现)
4-10
ORG0000HORG1000H
AAADATA0FFHAAAEQU0FFH
MOVA,#AAAMOVA,#AAA
MOVB,#0AHMOVR0,#30H
DIVABMOVB,#0AH
MOV30H,BDIVAB
MOVB,#0AHMOV@R0,B
DIVABINCR0
MOV31H,BJNZLOOP
MOV32H,ASJMP$
SJMP$END
END
4-12求8个数的算数平均值Y=(∑Xi)/8(i=0,…7)
ORG0000H
MOVSP,#6FH
CALLZHISHU
MOVR2,#0
;QIUHEA
MOVR3,#0
;QIUHEB
MOVR0,#30H
MOVR4,#08
LOOP:
MOVA,@R0
JZNEXT
MOVB,#08H
DIVAB
ADDA,R2
MOVR2,A
MOVA,B
ADDA,R3
MOVR3,A
NEXT:
INCR0
DJNZR4,LOOP
MOVA,R3
MOVB,#08H
DIVAB
ADDA,R2
MOVR2,A
MOVR3,B
SJMP$
ZHISHU:
MOV30H,#0FFH
MOV31H,#0FFH
MOV32H,#0FFH
MOV33H,#0FFH
MOV34H,#0FFH
MOV35H,#0FFH
MOV36H,#0FFH
MOV37H,#0FFH
MOV38H,#0FEH;FH
MOV39H,#0FFH
RET
END
4-14设逻辑运算表达式为
原式为上式,印书成下式:
其中变量A、B、C分别为P1.0、P1.4、定时器溢出标志TF1,D、E、F分别为22H.2、22H.3的位地址、外部中断标志IF1,输出变量Y为P1.5,请编写程序用软件方法实现上述逻辑功能。
4-14-1
A1BITP1.0
B1BITP1.4
C1BITTF1
DBIT22H.2
EBIT22H.3
FBITIE1
YBITP1.5
ORG0000H
SETBA1
;SETBB1
;SETBC1
;SETBD
;SETBE
;SETBF
;CLRA1
CLRB1
CLRC1
CLRD
CLRE
CLRF
MOVC,B1
ORLC,C1
CPLC
ANLC,A1
MOVF0,C
MOVC,E
ORLC,F
CPLC
ANLC,D
ORLC,F0
MOVY,C
SJMP$
END
4-14-2
A1BITP1.0
B1BITP1.4
C1BITTF1
DBIT22H.2
EBIT22H.3
FBITIE1
YBITP1.5
ORG0000H
SETBA1
;SETBB1
SETBC1
;SETBD
;SETBE
;SETBF
;CLRA1
CLRB1
;CLRC1
CLRD
CLRE
CLRF
MOVC,A1
ANLC,/C1
ANLC,/B1
MOVF0,C
MOVC,D
ANLC,/F
ANLC,/E
ORLC,F0
MOVY,C
SJMP$
END