CLR C
SUBB A, #30H ;ASCII码变为BCD数字 SWAP A ANL 42H, #0FH ORL 42H, A
2、 将片内RAM的20H-24H单元中5个压缩BCD码拆开,并转换为10个ASCII码,依
次存入外部RAM2100H-2109H单元中。
ORG 0000H AJMP 0100H ORG 0100H
LOOP0: MOV R0, #20H
MOV R7, #05 MOV DPTR, #2100H
LOOP: MOV A, @R0
ANL A, #0FH ADD A, #30H MOVX @DPTR, A INC DPTR MOV A, @R0 ANL A, #0F0H SWAP A ADD A, #30H MOVX @DPTR, A INC DPTR INC R0 DJNZ R7, LOOP SJMP $ END
3、 请编写多字节加法子程序。入口条件有3个,即字节长度、加数首地址和被加数首地址,
累加和存放地址与加数存放单元相同。对源程序加注释和伪指令。
注:加数首地址放在R0中,被加数首地址放在R1中,字节长度放在R7中。 ORG 0000H
AJMP 0100H
ORG 0100H
ADDSUB: CLR C
6
LOOP: MOV A, @R0
ADDC A, @R1 MOV @R0, A INC R0 INC R1 DJNZ R7, LOOP RET END
4、 在片外数据存储器8000H和8001H单元内各有一个小于0CH的数,请编写源程序求出
这两个数的平方之和,要求采用调用查表子程序的方法实现。平方和存放在片内RAM中。对源程序加注释和伪指令。
注:平方和放在内部RAM20H中, 用DPTR作为外部RAM地址指针。
ORG 0000H AJMP MAIN ORG 0100H
MAIN: MOV DPTR, #8000H
MOVX A, @DPTR LCALL GETSQUARE MOV 20H, A INC DPTR MOVX A, @DPTR LCALL GETSQUARE ADD A, 20H XCH A, 20H SJMP $
GETSQUARE: ADD A, #01H
MOVC A, @A+PC RET
TAB: DB 0H, 1H, 4H, 9H, 10H, 19H, 24H,31H, 40H, 51H, 64H, 79H
END
5、 编写一程序将片外数据存储器中7000H~70FFH单元全部清零。
ORG 0100H MOV DPTR, #7000H MOV R0, #00H CLR A
LOOP: MOVX @DPTR, A
7
INC DPTR DJNZ R0, LOOP RET END
六、 读程序题
1.执行下列程序段后,(P1)=_9BH___。 MOV P1,#5DH CPL P1.1 CPL P1.2 CLR P1.6 SETB P1.7
2.执行下列程序段后,(A)=__8BH_____,(C)=_保持不变 ___。 MOV A,#C5H RL A
3.下列程序段执行后,(R0)=__7FH__,(7EH)=_00H___,(7FH)=_41H___。 MOV R0,#7EH MOV 7EH,#0FFH MOV 7FH,#40H INC @R0 INC R0 INC @R0
4.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALL SUBTRN双字节指令后,(PC)=_0345H__,(61H)=__25H_____,(62H)= _01H___。 5.阅读下列程序,说明其功能。 MOV R0,#data MOV A,@R0 RL A MOV R1,A RL A RL A ADD A,R1 MOV @R0,A RET
把内存中地址为data单元中的值放大十倍
8
6.阅读程序并填空,形成完整的程序以实现如下功能。
有一长度为10字节的字符串存放在8031单片机内部RAM中,其首地址为40H,每个字符串的内容为7位,要求在每个字符串的D7位加上偶校验位。(以调用子程序的方法来实现。)
源程序如下: ORG 1000H MOV R0,#40H
MOV R7,#10
NEXT: MOV A, ① @R0 ACALL SEPA MOV @R0,A INC R0
DJNZ ② R7 ,NEXT
SJMP
$
SEPA: ③ JNC PSW.0,SRET
ORL A, ④ #80H
SRET: ⑤ RET
9