简记:
(1)作进位标志位的时候写Cy;做累加器的时候写C
练习题集锦:
(1)试求下列程序依次运行后有关单元中的内容。已知(R0)=20H,(CY)=1,(1FH)=59H,(20H)=24H,(24H)=B6H。
(1) MOV A,1FH
(2)ADDC A,20H
(3)CLR A
(4)ORL A,@R0
(5)RL A
(6)ANL A,#39H
(7)RRC A
(8)CPL A
答案:
(1)(A)=59H,Cy=1[数据传送类指令不影响PSW寄存器中的标志位Cy、Ac、Ov,但累加器奇偶标志位P除外。]
(2)(A)=7EH,Cy=0[位7为进位,则Cy置零]
(3)(A)=00H,Cy=0[CLR指令不影响标志位]
(4)(A)=0B6H,Cy=0[逻辑或不影响标志位]
(5)(A)=6DH,Cy=0[RL不影响标志位]
(6)(A)=29H,Cy=0[逻辑与不影响标志位]
(7)(A)=14H,Cy=1[A与Cy一起右环移一位,得到Cy=1]
(8)(A)=0EBH,Cy=1[CPL不影响标志位]
(2)若(A)=15H,(B)=16H,(R0)=11H,(R1)=12H,(20H)=05H,(23H)=40H,(PSW)=81H,在下列指令后的注释区写出顺序执行每条指令的结果,并写出PSW的值。
(1)MOV A,R0
(2)MOV B,20H
(3)ADD A,R1
(4)MOV R1,A
(5)MOV 20H,@R1
(6)MUL AB
(7)SUBB A,R1
(8)ANL A,#0FH
(9)ORL A,20H
(10)RRC A
答案:
(1)(A)=11H,P=0,(PSW)=80H
(2)(B)=05H,P=0,(PSW)=80H
(3)(A)=23H,P=1,Cy=0,Ac=0,Ov=0,(PSW)=01H
(4)(R1)=23H,P=1,Cy=0,Ac=0,Ov=0,(PSW)=01H
(5) (20H)=40H,P=1,(PSW)=01H
(6)(A)=0AFH,P=0,Cy=0,Ac=0,Ov=0,(PSW)=00H[MUL时,Cy总是置零]
(7)(B)=8CH,P=1,Cy=0,Ac=0,Ov=0,(PSW)=01H
(8)(A)=0CH,P=0,Cy=0,Ac=0,Ov=0,(PSW)=00H
(9)(A)=4CH,P=1,Cy=0,Ac=0,Ov=0,(PSW)=01H
(10)(A)=26H,P=1,Cy=0,Ac=0,Ov=0,(PSW)=01H
(3)试求下列程序依次运行后有关单元的内容。
(1)MOV 20H,#0A5H
(2)MOV C,00H
(3)ANL C,04H
(4)CPL 07H
(5)SETB 01H
(6)MOV A,20H
(7)RLC A
(8)MOV 02H,C
答案:
0A5H写成二进制为: 1 0 1 0 0 1 0 1
(1)(20H)=0A5H【转移指令,立即数寻址】
(2)(C)=1【00H就是指20H单元内容的第0位值给C。字节为20H的位地址从00H开始出发,21H的位地址从08H开始出发,详见张毅刚的单片机原理及应用第三版P30页】
(3)(C)=0【04H就是指第4位值0和C=1逻辑与后得到0并给C】
(4)(20H).7=0【对20H单元内容的第七位取反,得到0 0 1 0 0 1 0 1】
(5)(20H).1=1【第1位置1得到0 0 1 0 0 1 1 1】
(6)(20H)=27H—>(A)=27H
(7)(A)=4EH
(8)(20H).2=0