DJNZ R7, LOOP1 CLR A MOV ACC.0, C MOV @R0, A RET
问:(1)DAA指令有何用途?
(2)若执行程序前(R0)=20H,(R1)=30H,(R7)=03H,则程序完成什么功能?程序最后的结果放在
哪些单元?(10分)
答案 :(1) DAA是对A中的数进行十进制数的调整。
(2) 将存放在 (22H) (21H) (20H)中的 BCD码与 (32)
(31H)(30H) 单元中的BCD码相加,结果调整为BCD码后放回(23H)(22H)(21H)
(20H)单元中,其中高地址存放高位字节。
20. MOV R0, #20H SLOP: MOV A, @R0
JZ LP1 JB ACC.7, LP2 INC 30H LP0: INC R0 DJNZ 1FH, SLOP END LP1: INC 31H SJMP LP0 LP2: INC 32H SJMP LP0
问:(1)若执行前(20H)单元中的内容为F1H,则程序能不能走到LP1处? (2)执行前1FH单元中存放的是什么?
(3)执行后30H,31H,32H单元中各存放的什么数据?(10分) (1) 不能
(2)参加统计的数的个数 (3) 30H中放正数的个数 31H中放“0”的个数 32H中放负数的个数
21. 已知(30H)=58H,读程序填空。(6分) CLR C
MOV A, 30H; 寻址方式是______, (A)=______
RLC A
RLC A ; (C)=_______
ADD A, #36H ; 寻址方式是_______,(A)=_______ JZ LOOP2 ; 程序转至LOOP1还是LOOP2?答_______ Loop1: MOV A, 00H
直接寻址, 58H
1
立即寻址, 96H LOOP1
22. (30H)=15H,问执行完程序后,A,B,SP,32H,33H ,34H的内容是多少?( MOV SP, #30H XCH A, 30H MOV B, A ANL A, #0FH MOV 33H, A MOV A, B PUSH A SWAP A ANL A, #15H MOV 34H, A PUSH A 答案 : (A)=11H (B)=15H (SP)=32H (32H)=11H (33H)=05H (34H)=11H
23. 内部RAM30H,31H单元中存放两个无符号数,读程序回答问题。(10分) ORG 1000H START: CLR C MOV A, 30H SUBB A, 31H JC NEXT MOV A, 30H
10分) XCH A, 31H MOV 30H, A NEXT: NOP SJMP $ END
(1) 程序完成什么功能?
(2) 若(30H)=89H,(31H)=F5H,执行程序后(30H)=____________, (31H)=_ __________,(Cy)=___________。
答案 :(1) 比较30H与31H中无符号数的大小,小数存于30H,大数存于31H (2) (30H)=89H, (31H)=F5H, (Cy)=1
四、编程题
1.编写程序,将外部RAM2000H-201FH数据块数据,传送到片内RAM40H-5FH的对应单元中,并统计其中数据‘0’的个数,将结果放入片内60H单元中。 答案 :START: MOV DPTR,#2000H
MOV R0,#40H MOV R1, #1FH MOV R2,#00H
LOOP: MOVX A,@DPTR
MOV @R0, A INC DPTR INC R0
CJNE A, #00H, LOOP1 INC R2
LOOP1: DJNZ R1, LOOP
MOV 60H, R2 RET
2. 已知8位要显示数字已存放在首地址为30H的片内RAM中,试将其转换为共阴显示字段码,存入首址为40H的内RAM中,已知TABD为0-9共阴字段码表首址。 ORG 1000H
TABD:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
答案 :MOV DPTR,#TABD
MOV R2,#8 MOV R0,#30H
MOV R1,#40H LOOP:MOV A,@R0
MOVC A,@A+DPTR MOV @R1,A INC DPTR INC R0 INC R1 DJNZ R7,LOOP
END
3. 试完成程序,求Y值,设m, n存在30H和31H中,Y存在32H中,且m?n积小于256,m/n的商为整数。
m?n (m
4. 求出片外RAM3000H——300FH,这16个单元数据的平均数,并将平均值放入片外RAM3010H单元中,
余数放入3011H单元中(设16个数的和小于256)。 答案 :
MOV DPTR,#3000H MOV R0,10H MOV B,#00H
MOV B,31H CJNE A,B,LOOP1 MOV 32H,#00H LJMP BB
LOOP1: JC LOOP2
DIV AB MOV 32H,A LJMP BB
LOOP2: MUL AB
MOV 32H,A
BB: END
LOOP: MOVX A,@DPTR
ADD A,B MOV B, A
INC DPTR
DJNZ R0,LOOP MOV A,B MOV B,#16 DIV AB
MOV DPTR,#3010H MOVX @DPTR,A
INC DPTR MOV A, B MOVX @DPTR,A
5. 设X由 P1口输入,Y存在外部RAM2000H单元,试按下列要求编制程序(设X?256)
X
2
2
END
; 当X ? 10时
Y= 2X ; 当10 ? X ? 100时
X/2 ; 当X ? 100时 答案 :MOV A, P1 CJNE A, #10, LOOP1 LOOP1: JNC LOOP2 MOV B, A MUL AB LJMP LOOP5 LOOP2: CJNE A, #101, LOOP3 LOOP3: JNC LOOP4 MOV B, A ADD A, B LJMP LOOP5 LOOP4: MOV B, #2 DIV A, B LOOP5: MOV DPTR, #2000H MOV @DPTR, A END
6. 片内RAM区中,有 20个补码表示的数存放在首地址为30H的单元中,请编程把其中的正数送到20H为首址的片外RAM中,负数不传送(0不是正数)。 答案 : MOV R0,#30H
MOV R1, #20H MOV R7,#20
LOOP: MOV A,@R0