http://www.wkfxw.com 文库分享网
内低 128
个字节有直接寻址、位寻址、间接寻址,高 128 字节有间接寻址。 3.3 要访问片外 RAM,可有哪几种寻址方式 ? 解:访问片外 RAM 有寄存器间接寻址方式。 3.4 要访问 ROM,可有哪几种寻址方式 ?
解:要访问 ROM 有直接寻址、变址寻址、相对寻址
3.5 试分别对 51 子系列和 52 子系列,说明 MOV A,direct 指令与 MOV A,@Rj 指令的访问范围。
解:MOV A,direct 指令中 direct 对于 51 子系列的访问范围为内 RAM 中的低 128B 单元,从 00H
到 7FH,访问 SFR 的范围是从 80H 到 FFH;52 子系列的访问范围与 51 子系列的访问范围相同。
MOV A,@Rj 指令对于 51 子系列的访问范围为内 RAM 的 128B 单元,从 00H 到 7FH,对于
52 子系列的访问范围为片内 RAM 从 00H 到 FFH。
3.6 传送指令中有哪几小类是访问 RAM 的?哪几个类是访问 ROM 的,CPU 访问 ROM 多不多?
什么时候需要访问 ROM?
解: 访问 RAM 的有:以累加器 A 为一方的传送指令,不以累加器为一方的传送指令,用立即数置
数的指令,访问片外 RAM 的传送指令, 进栈出栈指令,交换指令。 访问 ROM 的有: 基址寄存器加变址寄存器间址指令
23
因为 ROM 是只读存储器,用作程序存储器,已事先存入各种程序,常数、表格等,CPU 访问
ROM 不多,当执行程序,程序转移以及用户访问时需要访问 ROM。 3.7 区分下列指令的不同功能: ⑴ MOV A ,#24H 与 MOV A,24H ⑵ MOV A ,R0 与 MOV A, @R0 ⑶ MOV A, @R0 与 MOVX A,@R0
解:⑴ 前者是将立即数 24H 送入 A 中,后者是将 24H 单元的内容送入 A 中. (2) 前者将 R0 中的内容送入 A 中,后者是将以R0 中的内容为地址所在单元的内容送入 A 中.
(3) 前者是将片内 RAM 以 R0 中的内容为地址所在单元的内容送入 A 中,后者是将片外 RAM
的以 R0 中的内容为地址所在单元的内容送入 A 中.
3.8 设片内 RAM30H 单元的内容为 40H,设片内 RAM40H 单元的内容为 10H,片内 RAM10H 单
元的内容为 00H,(P1)=0CAH,请写出下列指令执行后的结果。 MOV R0, #30H MOV A, @R0 MOV R1, A MOV B , @R1 MOV @R0 , P1
http://www.wkfxw.com 文库分享网
MOV P3 , P1 MOV 10H ,#20H MOV 30H, 10H
解: MOV R0, #30H ; R0←30H MOV A, @R0 ; A←40H MOV R1, A ; R1←40H MOV B , @R1 ; B←10H
MOV @R0 , P1 ; 30H ←0CAH MOV P3 , P1 ; P3←0CAH MOV 10H ,#20H ; 10H←20H MOV 30H, 10H ; 30H←20H
3.9 已知:(A)=35H,(R0)=6FH,(P1)=(90H)=FCH,(SP)=C0H,试写出下列指令的执行结果。 (1) MOV R6,A (2) MOV @R0,A (3) MOV A,#90H (4) MOV A,90H (5) MOV 80H,#81H (6) MOVX @R0,A (7) PUSH A (8) SWAP A (9) XCH A,R0
24
解: (1)MOV R6, A ; (R6)=35H (2)MOV @R0, A ; (6FH)=35H (3)MOV A, #90H ; (A)=90H (4)MOV A, 90H ; (A)=FCH (5)MOV 80H, #81H; (80H)=81H (6)MOV @R0, A ; (6FH)=35H
(7)PUSH A ; (SP)=C1H,(C1H)=35H (8)SWAP A ; (A)=53H
(9)XCH A, R0 ; (A)=6FH,(R0)=35H
3.10 已知:(A )=02H,(R 1)=7FH,(D PTR)=2FFCH,片 内 RAM(7FH)=70H,片 外 RAM(2FFEH)=11H,
ROM(2FFEH)=64H,试分别写出下列指令的执行结果。 (1) MOV A ,@R1 (2) MOVX @DPTR,A (3) MOVC A,@A+DPTR (4) XCHD A,@R1
解:(1) (A)=70H (2) 片外 RAM(2FFCH)=02H
(3) (A)=64H (4) (A)=00H 片内 RAM(7FH)=72H 3.11 已知:(A)=78H,(R1)=78H,(B)=04H,C=1,片内 RAM(78H)=DDH,片内 RAM(80H)=6CH, 试分别写出下列指令的执行结果(如涉及标志位,也要写出)。 (1) ADD A ,@R1 (2) ADDC A,78H
http://www.wkfxw.com 文库分享网
(3) SUBB A,#77H (4) INC R1 (5) DEC 78H (6) MUL AB (7) DIV AB
(8) ANL 78H,#78H (9) ORL A,#OFH (10) XRL 80H,A
解:(1)(A)=55H (PSW)=11×××1×0 (2)(A)=56H (PSW)=11×××1×0 (3)(A)=00H (PSW)=00×××0×0
25
(4)(R1)=79H (5)(78H)=DCH
(6)(BA)=01E0H, C=1 OV=1 (7)(B)=00H,(A)=1EH (8)(78H)=58H (9)(A)=7FH (10)(80H)=14H
3.12 请对下列各组数分别计算“与”、“或”、“异或”的结果: (1) 10011010B 和 00001111B (2) 11010011B 和 01011010B (3) 11001100B 和 00110011B (4) 10101010B 和 11111111B
解:(1)结果分别为 00001010B 10011111B 10010101B (2)结果分别为 01010010B 11011011B 10001001B (3)结果分别为 00000000B 11111111B 11111111B (4)结果分别为 10101010B 11111111B 01010101B
3.13 为达到下列要求,请说明应采用何种逻辑操作,采用什么操作数,要求不得改变各未涉及位的 内容。
(1) 使累加器的最低位置1 (2) 清除累加器的高四位 (3) 使 A.2 和 A .3 置 1。
(4) 清除 A.3、A .4、 A.5、A .6
解:(1)逻辑或操作 操作数:00000001B (2)逻辑与操作 操作数:00001111B (3)逻辑或操作 操作数:00001100B (4)逻辑与操作 操作数:10000111B
3.14 写出下列各条指令的机器码,并逐条写出依次执行每一条指令后的结果和 PSW 的内容:
(1) CLR A
(2) MOV A, #9BH (3) MOV B,#0AFH
http://www.wkfxw.com 文库分享网
26
(4) ADD A,B
解: (1)机器码 E4H ;(A)=0 (2)机器码 749BH ;(A)=9BH (3)机器码 75F0AFH ;(A)=AFH
(4)机器码 25F0H ;(A)=4AH;(PSW)=11XXX1X1B
3.15 要选用工作寄存器 3 组,请采用三种不同的指令实现之。 解: (1) SETB PSW.4 SETB PSW.3
(2) ORL PSW,#18H (3) MOV PSW,#18H
3.16 列举三种能使累加器 A 内容清零的指令,并比较其优缺、点。 解: (1) ANL A,#00H (2) MOV A,#00H (3) CLR A
3.17 回答问题:
(1) 算术操作类指令对标志位的影响。 (2) 逻辑操作类指令对字节内容的修改。
解:(1)算术操作指令的执行将影响特殊功能寄存器中状态寄存器 PSW 的 3 个标志位: C:(PSW.7)进位标志;Ac:(PSW.6)辅助进位标志;OV:(PSW.2)辅助进位标志 3 个标志除特别指出外,指令服从以下规则:
① 操作结果在最高位有进位输出(加法时)或借位输入(减法时),C=1;否则;C=0。 ② 操作结果的低 4 位有进位输出( 加法时)或 有向高4 位的借位( 减法时),A c=1;否 则;A c=0。
③ 溢出标志OV满足逻辑关系式OV=C6⊕ C 7; C6 为加法时,累加器 A 的 D6 位向 D7 产生的进位,或减法时累加器 A 的 D6 位向 D7 产生的
借位,有进位或借位时,C6=1;
C7 为加法时,累加器 A 的 D7 位向更高位产生的进位,或减法时累加器 A 的 D7 位向更高位产
生的借位,有进位或借位时,C7=1;
OV 标志位常用于加减指令对带符号数做补码加、减运算时,(OV)=1 表示加、减运算的结果超出
了 A 所能表示的带符号数的范围(128~ 127)。
(2)①若要对内部的某几位清零,而其它位保持不变,可以选用 ANL direct,#data 指令,在需
27
要清零的位上对应的 data 的相应位清零。
② 若要对内部的某几位置 1 可以选用ORL direct,#data 指令,在需要置 1 的位上对应的 data
的相应位置 1。
③ 若要对内部的某几位求反可以选用XRL direct,#data 指令,在需要求反的位上对应的 data
http://www.wkfxw.com 文库分享网
的相应位置 1。若要对内部 RAM 某单元求反可以选用 XRL direct,#0FFH。
3.18 要将片内 RAM 0FH 单元的内容传送去专用寄存器 B,对 0FH 单元的寻址可有三种方法:
(1) R 寻址; (2) R 间址;
(3) Direct 寻址;
请分别编写出相应程序,比较其字节数、机器周期数和优缺点。 解: (1) MOV R0,0FH MOV B,R0
(2) MOV @R0,0FH MOV B,@R0 (3) MOV B,0FH
(1) 占四个字节数,四个机器周期数;(2) 占四个字节数,四个机器周期数;(3) 占三个字节
数,三个机器周期数;所以第三种方法最好。
3.19 设(R0)=7EH, (DPTR)=10FEH,片 内 RAM 7EH 单元的内容为 0FFH;7F单元的内容为 38H,
试为下列程序的每条指令注释其执行结果。 INC @R0 INC R0 INC @R0 INC DPTR INC DPTR INC DPTR
解: INC @R0;将 7EH 单元的内容加1,即 7EH←00H INC R0 ;R0←7FH INC @R0 ;7FH←39H INC DPTR ;DPTR←10FFH INC DPTR ;DPTR←1100H INC DPTR ;DPTR←1101H
28
3.20 试编程:引用“与”运算,判断某 8 位二进制数是奇数还是偶数
解: 设该 8 位二进制数放在累加器 A 中,如果是奇数,将 F0 标志置 1,如果是偶数,将 F0 标志 清 0。 ORG 2000H
START:MOV R0,A ANL A,#01H JZ LOOP MOV A,R0 SETB PSW.5 SJMP HERE
LOOP: MOV A,R0 CLR PSW.5