第4章 MCS?51系列单片机指令系统
1.访问外部数据存储器和程序存储器可以用哪些指令来实现?举例说明。 访问外部数据存储器: MOVX A,@DPTR MOVX @DPTR,A MOVX A,@Ri MOVX @Ri,A
访问程序存储器:
MOVC A,@A+DPTR MOVC A,@A+PC
2.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行下列程序段后,61H、62H、30H、31H、DPTR及SP的内容将有何变化?
PUSH 30H PUSH 31H POP DPL POP DPH MOV 0H,#00H MOV 31H,#0FFH
(61H)=24H (62H)=10H (30H)=00H (31H)=0FFH (DPTR)=2410H (SP)=60H
3.设(A) = 40H,(R1) = 23H,(40H) = 05H。执行下列两条指令后,累加器A和R1以及内部RAM中40H单元的内容各为何值?
XCH A,R1 XCHD A,@R1
(A)=25H (R1)=40H (40H)=03H
4.设(A) = 01010101B,(R5) = 10101010B,分别写出执行ANL A,R5; ORL A,R5;XRL A,R5指令后的结果。
00000000B 11111111B 11111111B
5.简述转移指令AJMP addr11,SJMP rel,LJMP addr16及JMP @A + DPTR的应用。
AJMP addr11:2K范围内的转移;SJMP rel:256字节复位内的转移;
LJMP addr16:64K范围内的转移;JMP @A + DPTR:在某一地址开始的256字节范围内的转移。
6.试用下列4种方式编程,将立即数0EFH送入内部RAM的40H单元中。 (1)用立即寻址;(2)用直接寻址;(3)用寄存器寻址;(4)用寄存器间接寻址 (1) MOV 40H,#0EFH---- 目的操作数立即寻址 (2) MOV 40H,#0EFH 源操作数直接寻址
(3) MOV R0,#0EFH
MOV 40H,,R0 源操作数寄存器寻址 (4) MOV R0,#40H
MOV @R0,#0EFH 目的操作数寄存器间接寻址 7.写出实现下列要求的指令或程序片段。
(1)将内部RAM20H单元内容与累加器A内容相加,结果存放在20H单元中。 (2)将内部RAM30H单元内容与内部RAM31H单元内容相加,结果存放到内部RAM31H单元中。
(3)将内部RAM20H单元内容传送到外部RAM2000H单元中。 (4)使内部RAM20H单元的D7和D3位清零,其他位保持不变。
(5)使内部RAM20H单元的D7和D3位置1,D5位清零,其他位保持不变。 (6)使内部RAM20H单元的D7和D3位置1,D5位取反,其他位保持不变。 (1) (2) (3) (4) 或:
ADD MOV MOV ADD MOV MOV MOV MOVX CLR CLR ANL SETB SETB CLR
A,#20H
20H,A A,30H A,31H 31H,A A,20H
DPTR,#2000H @DPTR,A 03H 07H 20H,#01110111B 03H 07H 05H
(5) 或:
ORL 20H,#10001000B ANL 20H,#11011111B (6) SETB 03H SETB 07H CPL 05H 或:
ORL 20H,#10001000B XRL 20H,#00100000B
8.试用三种方法实现累加器A和寄存器B的内容交换。 (1) MOV R0,A MOV A,B MOV B,R0 (2) PUSH A PUSH B POP A POP B (3) MOV R0,B XCH A,R0 MOV B,R0
9.试分析下列程序段执行后,(A) =?,(30H) =?
MOV
30H,#0A4H
MOV A,#0D6H MOV R0,#30H MOV R2,#5EH ANL A,R2 ORL A,@R0 SWAP A CPL A
XRL A,#0FEH ORL 30H,A
(A)=6EH (30H)=0EFH
10.下述程序执行后,(SP) =?,(A) =?,(B) =?
ORG 2000H MOV SP,#40H MOV A,#30H LCALL SUBR ADD A,#10H MOV B,A L1: SJMP L1 SUBR: MOV DPTR,#200AH PUSH DPL PUSH DPH RET
(SP)= 42H (A)=30H (B)=00H
11.设(R0) = 20H,(R1) = 25H,(20H) = 80H,(21H) = 90H,(22H) = 0A0H,(25H) = 0A0H,(26H) = 6FH,(27H) = 76H。下列程序执行后,结果如何?
CLR C MOV R2,#3 LOOP: MOV A,@R0 ADDC A,@R1 MOV @R0,A INC R0 INC R1
DJNZ R2,LOOP JNC NEXT MOV @R0,#01H SJMP $ NEXT: DEC R0 SJMP $ (R0)=22H,(R1) = 24H,(20H) = 10H,(21H) = 31H,(22H) = 0A1H,(25H) = 0A0H,(26H) = 6FH,(27H) = 76H。
12.设片内RAM(30H) = 0EH,执行下面的程序后,(A)=?,指出该程序完成的功能。
MOV
MOV RL MOV RL RL
R0,#30H A,@R0 A B,A A A
ADD
=8CH
A,B
功能:将30H中的内容*10操作,结果在累加器A中。
第5章 MCS?51系列单片机汇编语言程序设
计
1.编程将片内RAM 30H~39H单元中的内容送到以3000H为首的存储区中。 MOV R0,#30H MOV DPTR,#3000H MOV R7,#10
L1: MOV A,@R0
MOVX @DPTR,A INC R0 INC DPTR DJNZ R7,L1 RET
2.片内RAM 60H开始存放20个数据,试统计正数、负数及为零的数据个数,并将结果分别存在50H、51H、52H单元中。
MOV 50H,#0 MOV 51H,#0 MOV 52H,#0 MOV R7,#20 MOV R0,#60H MOV A,@R0 JZ L1
JB ACC.7,L2 INC 50H SJMP LEND INC 51H SJMP LEND INC 52H INC R0 DJNZ R7,L3 RET
3.设10次采样值依次放在片内RAM 50H~59H的连续单元中,试编程去掉一个最大
L3: L2: L1: LEND:
值、去掉一个最小值,求其余8个数的平均值,结果存放在60H中。
L1: L2:
MOV MOV MOV INC CLR MOV SUBB MOV JNC XCH INC DJNZ MOV
R0,#50H
A,@R0 R7,#9 R0 C B,A A,@R0 A,B L2 A,@R0 R0 R7,L1 R0,#51H
;最大值
;最小值