第3章习题参考答案
3.1 3.2 3.3 3.4
(略) (略) (略)
指出下列指令源操作数的寻址方式和功能。 1) MOV A,# 40H ;立即寻址。 40H? A 2) MOV A, 40H 4) MOV A, R3 6) SJMP LOOP 3.5
;直接寻址。 (40H)? A
(R1)? A
R3? A (A+PC)? A
;寄存器寻址。
3) MOV A, @R1 ;寄存器间址。 5) MOVC A,@A+PC ;变址寻址。 内部RAM的00H单元的寻址方式: 1) 直接寻址,MOV A,00H
2) 因为00H是工作寄存器区,所以还可以寄存器寻址。MOV A, R0 特殊功能寄存器中的操作数的寻址方式: 1) 直接寻址,MOV A, SP
2) 部分SFR可以位寻址,MOV C, ACC.7 3.6
变址寻址和相对寻址中的地址偏移量异同:
1) 变址寻址的偏移量是一个00H ~ FFH范围内的无符号数;相对寻址偏移量是一个带符号的8位二进制补码,
范围为-128 ~ +127。
2) 变址寻址的偏移量放在累加器A中,相对寻址的偏移量直接在指令中给出。 3) 都是将基地址与地址偏移量相加,形成操作数地址。 3.7
写出下列指令的机器码,指出指令中50H和66H各代表什么? 1) 指 令 50H的含义
MOV A,# 50H MOV A,50H MOV 50H,# 20H MOV 50H,20H
源操作数
机器码 7450H E550H 755020H A250H 852050H 机器码 7666H 7E66H 756645H 9266H 8966H
;相对寻址。 程序转到标号为LOOP的语句处执行。
源操作数的地址 目的操作数的地址 位地址
目的操作数的地址 源操作数 源操作数 位地址
MOV C, 50H
2) 指 令 66H的含义
MOV @R0,# 66H MOV R6,#66H MOV 66H,# 45H MOV 66H,C MOV 66H,R1
3.8
目的操作数的地址
目的操作数的地址
写出下列指令的机器码,指出下列程序执行后的结果。 1) MOV A,# 60H 机器码: 7460H
MOV R0,# 40H MOV @R0,A XCH A,R0
MOV 41H,R0
7840H F6 H 8841H C8 H
机器码:902003H
7418H 752038H
结果:A = 40H,R0 = 60H,(40H)= 60H,(41H)= 40H 2) MOV DPTR, # 2003H
MOV A, # 18H MOV 20H,# 38H
MOV R0, # 20H XCH A, @R0
3.9
7820H C8H
结果:A = 38H,R0 = 20H,(20H)= 18H 写出能完成下列数据传送的指令。 1) R1中的内容传送到R0
MOV R0, 01H 或: MOV A, R1 MOV R0, A 2) 内部RAM 20H单元中的内容送到30H
MOV 30H, 20H
3) 外部RAM 20H单元中的内容送到内部RAM 20H单元 MOV R0, # 20H MOV P2, # 00H MOVX A, @R0 MOV 20H, A
4) 外部RAM 2000H单元中的内容送到内部RAM 20H单元
MOV DPTR, # 2000H MOVX A, @DPTR MOV 20H, A
5) 外部ROM 2000H单元中的内容送到内部RAM 20H单元
MOV DPTR, # 2000H MOV A, # 00H MOVC A, @A+DPTR MOV 20H,A
6) 外部ROM 2000H单元中的内容送到外部RAM 3000H单元
MOV DPTR, # 2000H MOV A, # 00H MOVC A, @A+DPTR MOV DPTR, # 3000H MOVX @DPTR, A
3.10 试编出把外部RAM的2050H单元中的内容与2060H单元中的内容相交换的程序
MOV
DPTR, # 2050H
MOVX A, @DPTR MOV R0,A MOV
DPTR, # 2060H
MOVX A, @DPTR XCH A, R0 MOVX @DPTR,A MOV DPTR,# 2050H MOV A, R0 MOVX @DPTR,A
3.11 已知(20H)= X,(21H)= Y,(22H)= Z。请用图示说明下
列程序执行以后堆栈中的内容是什么? MOV SP,# 70H PUSH 20H PUSH 21H PUSH 22H
; 外部RAM区16位地址的高8位清0
70H 71H 72H 73H
栈底 X Y Z SP 60H 61H 62H 63H
栈底 Z Y X SP 1) MOV SP,# 60H
PUSH 22H PUSH 21H PUSH 20H
3.12 已知SP = 73H,(71H)= X,(72H)= Y,(73H)= Z。试问执行下列程序后20H,21H和22H单元中的内容
是什么?并用图示说明堆栈指针SP的指向和堆栈中数据的变化。 1) POP 20H ;(20H)= Z
POP 21H ;(21H)= Y POP 22H ;(22H)= X 2) POP 22H ;(22H)= Z
POP 21H ;(21H)= Y POP 20H ;(20H)= X
3.13 试问如下程序执行后累加器A和PSW中的内容是什
么?
1) MOV A,# 0FEH
ADD A,# 0FEH 2) MOV A,# 92H
ADD A,# 0A4H
3.14 指令结果如下:
1) A = 20H,Cy = 1,(30H)= A6H 2) A = D5H,Cy = 1
3) A = 49H,Cy = 0,R0 = 2FH 4) A = 4AH,Cy = 0,(30H)= A4H
3.15 已知内部RAM的M1、M2和M3单元中有无符号数X1、X2和X3。编程令其相加,并把和存入R0和R1(R0
中为高8位)中。 参考程序如下:
ORG 1000H MOV R0, # M1 MOV R1, # M2 MOV A, @R0 ADD A, @R1 MOV B, A MOV A, # 00H ADDC A, # 00H MOV R1, A
3.16 参考程序:
ORG 1000H MOV R0, # M1 MOV A, @R0 MOV R1, # M2 MOV B, @R1
;取乘数
MUL AB ;被乘数低8位与乘数相乘 MOV R4, A ;保存低8位 MOV R3, B INC R0
3.17 参考程序:
;取被乘数低8位
MOV A, @R0;取被乘数高8位 MOV B, @ R1 MUL AB ADD A ,R3 MOV R3, A MOV A, B
ADDC A, # 00H ;加上进位 MOV R2, A SJMP $ END
;保存高8位
MOV A, B MOV R0, # M3 ADD A, @R0 MOV R0, A MOV A, # 00H ADDC A, R1 MOV R1, A SJMP $ END
;A = 36H,PSW = 84H
;A = FCH,PSW = C0H
70H 71H 72H 73H
栈底 X Y Z SP 数据出栈后
SP的位置