思考题与习题4及答案赵晓安文档格式.docx
《思考题与习题4及答案赵晓安文档格式.docx》由会员分享,可在线阅读,更多相关《思考题与习题4及答案赵晓安文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
![思考题与习题4及答案赵晓安文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/6615763b-6e9b-46af-a631-70ef0d1ba935/6615763b-6e9b-46af-a631-70ef0d1ba9351.gif)
MULAB;
(A)=1EH
DAA;
(A)=24HERROR
4-2设一个加数在50H~52H单元中,另一个加数在53H~55H中,进位存放在位地址00中,
试编程实现两数求和。
ORG000H
ONEDATA50H
TWODATA53H
WEIBIT00H
MOVR0,#ONE
MOVR1,#TWO
;
MOVC,WEI
CLRC
MOVR2,#3
MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
MOVWEI,C
4-2-2
ORG0000H
SETBRS0
MOVR0,#58H
CLRRS0
4-3试用除法指令将20H单元的两位BCD码变成ASCII码后存入21H和22H单元。
4-3
MOV20H,#67H
MOVB,#10H
DIVAB
ADDA,#30H
ORLB,#30H
MOV22H,B
4-4从20H单元开始存放一组带符号数,其数目已存在1FH单元。
要求统计出大于0、小于0和等于0的个数并存于ONE、TWO、THREE三个单元。
4-4
ONEEQU30H
TWOEQU31H
THREEEQU32H
NUMEQU1FH
MOVNUM,#0FH
MOVR0,#20H;
-1,2,34,0A0H,0....
MOVR1,#ONE
MOV@R1,#0
CJNER1,#34H,LOOP
LOOP1:
JZMTHREE
JBACC.7,MTWO
INCONE
SJMPDJNZZ
MTHREE:
INCTHREE
MTWO:
INCTWO
DJNZZ:
DJNZNUM,LOOP1;
NUM=0FH
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
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
MEM:
MOVFUNC,A
X
Y
15
2X=30=14H
50
X=50=32H
20
5X=100=64H
X=55=37H
25
5X=125=7DH
4-7外部RAM从2000H到2100H有一数据块,请编出将它们传送到外部RAM3000H到3100H区域的程序。
4-7ORG0000H
MOVDPTR,#2000H
MOVP2,#30H
MOVR0,#00H
MOVR2,#0
MOVXA,@DPTR
MOVX@R0,A
INCDPTR
DJNZR2,LOOP;
0—FF--0
MOVXA,@DPTR;
(DPTR)=2100H
INCP2;
31H
4-8在内部RAM中,有一个以BLOCK为始址的数据块,块长在LEN单元。
请用查表指令编一程序,先检查它们若是16进制中的A~F,则把它们变为ASCⅡ码;
若不是,则把它们变为00H。
4-8
BLOCKEQU31H
LENEQU30H
NEQU30
MOVR0,#BLOCK
MOVLEN,#N
MOVR2,LEN
CJNEA,#0AH,DO1
SJMPDO5
CJNEA,#0FH,DO3
SJMPDO4
JCDO4
DO5:
MOVA,#0
SJMPNEXT
DO4:
MOVDPTR,#TAB
SUBBA,#0AH
MOVCA,@A+DPTR
NEXT:
TAB:
DB'
A'
'
B'
C'
D'
E'
F'
4-9试编写一个子程序将字符串:
“MCS-51Microcntrol”装入外部RAM8000H开始的显示缓冲区。
4-9
MOVDPTR,#TAB
MOVP2,#80H
MOVR2,#19
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
4-12求8个数的算数平均值Y=(∑Xi)/8(i=0,…7)
MOVSP,#6FH
CALLZHISHU
MOVR2,#0
QIUHEA
MOVR3,#0
QIUHEB
MOVR0,#30H
MOVR4,#08
JZNEXT
MOVB,#08H
MOVA,B
ADDA,R3
MOVR3,A
DJNZR4,LOOP
MOVA,R3
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
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
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
ANLC,D
ORLC,F0
MOVY,C
4-14-2
SETBC1
CLRC1
MOVC,A1
ANLC,/C1
ANLC,/B1
MOVC,D
ANLC,/F
ANLC,/E