mcs-51第四章答案 汇编语言程序设计
- 格式:pdf
- 大小:118.38 KB
- 文档页数:4
第四章汇编语言程序设计
1 题若晶振为12MHz,试编制延时2ms和1s子程序。
答:延时2ms:
DELY: MOV R7, #10
DLY0: MOV R6, #98
NOP
DLY1: DJNZ R6, DLY1
DJNZ R7, DLY0
RET
延时1s:
DELY: MOV R0, #50
LP11: MOV R1, #100
LP22: MOV R2, #100
LP33: DJNZ R2, LP33
DJNZ R1, LP22
DJNZ R0, LP11
RET
4 题试求20H和21H单元中16位带符号二进制补码数的绝对值,并送回20H和21H单元,高位在先,低位在后。
答:方法一:
先判断符号位,若为0则不作任何处理(因为正数的补码数与原数相同,而0的补码数就是0)。若符号位为1,则用0减去该数即可。编程如下:
ORG 1000H
MOV A, 20H
JNB ACC.7, DONE
CLR C
CLR A
SUBB A, 21H
MOV 21H, A
CLR A
SUBB A, 20H
MOV 20H, A
DONE: SJMP $
END
方法二:可用变反加“1”来完成。
ORG 1000H
MOV A, 20H
JNB ACC.7, DONE
CPL A
MOV 20H, A
MOV A, 21H
CPL A
MOV 21H, A
CLR C
MOV A, 21H
ADD A, #1
MOV 21H, A
MOV A, 20H
ADDC A, #0
MOV 20H, A
DONE: SJMP $
END
5题试求内部RAM 30~37H单元8个无符号数的算术平均值,结果存入38H单元。
答:方法一:相加后和放在R3:38H中,然后将结果整体右移3位,得数放在38H单元中。
ORG 1000H
START: MOV R7, #07H
MOV R3, #00H
MOV A, 30H
MOV R0, #31H
LOOP: ADD A, @R0
JNC NEXT
INC R3
NEXT: INC R0
DJNZ R7, LOOP
MOV 38H, A
MOV R7, #3
LOOP1: CLR C
MOV A, R3
RRC A
MOV R3, A
MOV A, 38H
RRC A
MOV 38H, A
DJNZ R7, LOOP1
SJMP $
END
方法二:相加后和放在R3:38H中,然后将R3中的数乘以25,将38H 中的数除以23,然后将两个结果相加,放入38H单元中。
ORG 1000H
START: MOV R7, #07H
MOV R3, #00H
MOV A, 30H
MOV R0, #31H
LOOP: ADD A, @R0
JNC NEXT
INC R3
NEXT: INC R0
DJNZ R7, LOOP
MOV 38H, A
PR: MOV A, R3
MOV B, #32
MUL AB
MOV R3, A
MOV A, 38H
MOV B, #8
DIV AB
ADD A, R3
MOV 38H, A
6题试编一数据块搬迁程序。将外部RAM 2000H~204FH单元中的数,移入内部RAM 30H~7FH单元中。
编程如下:
ORG 1000H
MOV R0, #50H
MOV R1, #30H
MOV DPTR, #2000H
LP1: MOVX A, @DPTR
MOV @R1, A
INC R1
INC DPTR
DJNZ R0, LP1
END