单片机第3章习题参考答案 下载本文

内容发布更新时间 : 2024/5/16 6:09:49星期一 下面是文章的全部内容请认真阅读。

第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的位置