1、- 1 -第 3 章习题参考答案3.1 (略)3.2 (略)3.3 (略)3.4 指出下列指令源操作数的寻址方式和功能。1) MOV A,# 40H ;立即寻址。 40H A2) MOV A, 40H ;直接寻址。 (40H) A3) MOV A, R1 ;寄存器间址。 (R1) A4) MOV A, R3 ;寄存器寻址。 R3 A5) MOVC A,A+PC ;变址寻址。 (A+PC) A6) SJMP LOOP ;相对寻址。 程序转到标号为 LOOP 的语句处执行。3.5 内部 RAM 的 00H 单元的寻址方式:1) 直接寻址,MOV A,00H2) 因为 00H 是工作寄存器区,所以还
2、可以寄存器寻址。MOV A, R0特殊功能寄存器中的操作数的寻址方式:1) 直接寻址,MOV A, SP2) 部分 SFR 可以位寻址,MOV C, ACC.73.6 变址寻址和相对寻址中的地址偏移量异同:1) 变址寻址的偏移量是一个 00H FFH 范围内的无符号数;相对寻址偏移量是一个带符号的 8 位二进制补码,范围为-128 +127。2) 变址寻址的偏移量放在累加器 A 中,相对寻址的偏移量直接在指令中给出。3) 都是将基地址与地址偏移量相加,形成操作数地址。3.7 写出下列指令的机器码,指出指令中 50H 和 66H 各代表什么?1) 指 令 50H 的含义 机器码MOV A,# 5
3、0H 源操作数 7450HMOV A,50H 源操作数的地址 E550HMOV 50H,# 20H 目的操作数的地址 755020HMOV C, 50H 位地址 A250HMOV 50H,20H 目的操作数的地址 852050H2) 指 令 66H 的含义 机器码MOV R0,# 66H 源操作数 7666HMOV R6,#66H 源操作数 7E66HMOV 66H,# 45H 目的操作数的地址 756645HMOV 66H,C 位地址 9266HMOV 66H,R1 目的操作数的地址 8966H3.8 写出下列指令的机器码,指出下列程序执行后的结果。1) MOV A,# 60H 机器码: 7
4、460HMOV R0,# 40H 7840HMOV R0,A F6 HMOV 41H,R0 8841HXCH A,R0 C8 H 结果:A = 40H,R0 = 60H, (40H)= 60H, (41H)= 40H2) MOV DPTR, # 2003H 机器码:902003HMOV A, # 18H 7418HMOV 20H,# 38H 752038H- 2 -MOV R0, # 20H 7820HXCH A, R0 C8H结果:A = 38H, R0 = 20H, (20H)= 18H3.9 写出能完成下列数据传送的指令。1) R1 中的内容传送到 R0MOV R0, 01H 或: MO
5、V A, R1MOV R0, A2) 内部 RAM 20H 单元中的内容送到 30HMOV 30H, 20H3) 外部 RAM 20H 单元中的内容送到内部 RAM 20H 单元MOV R0, # 20HMOV P2, # 00H ; 外部 RAM 区 16 位地址的高 8 位清 0MOVX A, R0 MOV 20H, A4) 外部 RAM 2000H 单元中的内容送到内部 RAM 20H 单元MOV DPTR, # 2000HMOVX A, DPTRMOV 20H, A5) 外部 ROM 2000H 单元中的内容送到内部 RAM 20H 单元MOV DPTR, # 2000HMOV A,
6、# 00HMOVC A, A+DPTRMOV 20H,A6) 外部 ROM 2000H 单元中的内容送到外部 RAM 3000H 单元MOV DPTR, # 2000HMOV A, # 00HMOVC A, A+DPTRMOV DPTR, # 3000HMOVX DPTR, A3.10 试编出把外部 RAM 的 2050H 单元中的内容与 2060H 单元中的内容相交换的程序MOV DPTR, # 2050HMOVX A, DPTRMOV R0,AMOV DPTR, # 2060HMOVX A, DPTRXCH A, R0MOVX DPTR,AMOV DPTR,# 2050HMOV A, R0
7、MOVX DPTR,A3.11 已知(20H)= X, (21H)= Y, (22H)= Z。请用图示说明下列程序执行以后堆栈中的内容是什么?MOV SP,# 70H PUSH 20HPUSH 21HPUSH 22H70H 栈底71H X72H Y73H Z SP60H 栈底61H Z62H Y63H X SP- 3 -1) MOV SP,# 60H PUSH 22HPUSH 21HPUSH 20H3.12 已知 SP = 73H, (71H)= X, (72H)= Y, (73H)= Z。试问执行下列程序后 20H,21H 和 22H 单元中的内容是什么?并用图示说明堆栈指针 SP 的指向和
8、堆栈中数据的变化。1) POP 20H ;(20H)= ZPOP 21H ;(21H)= YPOP 22H ;(22H)= X2) POP 22H ;(22H)= ZPOP 21H ;(21H)= YPOP 20H ;(20H)= X3.13 试问如下程序执行后累加器 A 和 PSW 中的内容是什么?1) MOV A,# 0FEHADD A,# 0FEH ;A = FCH,PSW = C0H2) MOV A,# 92HADD A,# 0A4H ;A = 36H,PSW = 84H3.14 指令结果如下:1) A = 20H,Cy = 1, (30H)= A6H2) A = D5H,Cy = 1
9、3) A = 49H,Cy = 0,R0 = 2FH4) A = 4AH,Cy = 0, (30H)= A4H3.15 已知内部 RAM 的 M1、M2 和 M3 单元中有无符号数 X1、X2 和 X3。编程令其相加,并把和存入 R0 和R1(R0 中为高 8 位)中。 参考程序如下:ORG 1000HMOV R0, # M1MOV R1, # M2MOV A, R0ADD A, R1MOV B, AMOV A, # 00HADDC A, # 00H MOV R1, AMOV A, BMOV R0, # M3 ADD A, R0MOV R0, AMOV A, # 00HADDC A, R1MO
10、V R1, ASJMP $END3.16 参考程序:ORG 1000HMOV R0, # M1MOV A, R0 ;取被乘数低 8 位MOV R1, # M2MOV B, R1 ;取乘数MUL AB ;被乘数低 8 位与乘数相乘MOV R4, A ;保存低 8 位MOV R3, BINC R0 MOV A, R0;取被乘数高 8 位MOV B, R1MUL ABADD A ,R3 MOV R3, AMOV A, BADDC A, # 00H ;加上进位MOV R2, A ;保存高 8 位SJMP $ END3.17 参考程序:70H 栈底71H X72H Y73H Z SP数据出栈后SP 的位
11、置- 4 -ORG 1000HMOV R0, # 20HMOV A, R0 ;取被除数INC R0MOV B, R0 ;取除数DIV AB ;A / B = ABMOV R0, # 20HMOV P2, # 00HMOVX R0, A ;保存商INC R0MOVX R0, B ;保存余数SJMP $END 3.18 参考程序:ORG 1000HCLR CMOV A, # 5DHSUBB A, # B4HMOV R0, # 30HMOV R0, A ;保存商的低 8 位MOV A, # 6FHSUBB A, # 13HINC R0MOV R0, A;保存商的高 8 位SJMP $END 3.19
12、 参考答案:1) A = E1H, (30H)= ABH2) A = AAH3) A = 10H4) A = F0H3.20 参考程序:1) ANL 20H, 3FH2) ORL 20H, C0H3) XRL 20H, C0H4) XRL 20H, FFH或:MOV A, 20H CPL A MOV 20H, A3.21 参考程序:(用移位指令,两操作数为 8 位无符号数,操作结果 10CJNE A, # 0AH,COMP ;若 A10,则形成 Cy 并转到 COMPSJMP DONE ;若 A = 10,则停机COMP: JC DONE ;若 Cy = 1,表示 A 10,转到 LABELD
13、ONE: SJMP $3.23 参考程序:ORG 1000HMOV DPTR, # DATA1 ;源操作区的起始地址MOV R0, #30H ;目的操作区的起始地址MOV R2, #14H ;数据块长度NEXT: MOVX A, DPTRMOV R0, A ;从源操作取操作数INC DPTRINC R0DJNZ R2, NEXT ;判断数据块是否传送结束SJMP $END3.24 执行完调用指令后,堆栈指针 SP = 72H, 堆栈中的内容为 2345H+02H = 2347H,如图所示:调用的子程序在:3456H3.25 执行 RET 指令后,SP = 70H,PC = 2347H71H、7
14、2H 中的内容不变,仍为 47H 和 23H,但不属于堆栈区。3.26 若 SUPER = 4060H,则程序 2、3 都是正确的。程序 3 更好一点。程序 1 是绝对调用指令,只能在 2KB 区域内寻址。若 SUPER = 2060H,程序 1 最好,因为绝对调用指令是在页内寻址,比长调用指令更有效。3.27 参考程序:ORG 1000HMOV R0, #20H ;目的操作区的起始地址MOV R2, #14H ;数据块长度70H 栈底71H 47H72H 23HSP- 6 -MOV DPTR, # 2000H ;源操作区的起始地址LOOP: MOVX A, DPTRINC DPTRJB ACC.7, NEXT ;若为负数,则去判断下一个MOV R0, A ;若为正数,则送到片内 RAM 区INC R0NEXT: DJNZ R2, LOOP ;判断数据块是否传送结束SJMP $END3.28 参考程序:ORG 1000HMOV A, 20HCLR CSUBB A, 21HJNB ACC.7, DONE ;差为正数则存结果CPL A ;若差为负数,则求绝对值INC ADONE: MOV 30H, A ;存结果SJMP $END