制数相加之后,必须经过该指令的调整才能得到压缩型BCD码的和数。“DA A”指令对两个BCD码的减法结果不能进行调整。
BCD码采用4位二进制数编码,并且只采用了其中的10个编码,即0000~1001,分别代表BCD码0~9,而10lO~1111为无效码。当两个BCD码相加结果大于9时,说明已进入无效编码区;当两个BCD码相加结果有进位时,说明已跳过无效编码区。若结果进入或跳过无效编码区,则结果是错误的,相加结果均比正确结果小6(差6个无效编码)。
十进制调整的修正方法为:当累加器低4位大于9或半进位标志AC=1时,进行低4位加6修正;当累加器高4位大于9或进位标志CY=l时,进行高4位加6修正。
【3一11】说明80C51单片机的布尔处理机的构造及功能。
【答】80C51单片机内部有一个布尔(位)处理机,具有较强的布尔变量处理能力。布尔处理机实际上是一位微处理机,它包括硬件和软件。布尔处理机以进位标志CY作为位累加器,以80C51单片机内部RAM的20H~2FH单元及部分特殊功能寄存器为位存储器,以80C51单片机的PO、P1、P2和P3为位I/O。
对位地址空间具有丰富的位操作指令,包括布尔传送指令、布尔状态控制指令、位逻辑操作指令及位条件转移指令,为单片机的控制带来很大方便。
【3—12】试分析以下程序段的执行结果。
MOV SP,#60H
MOV A,#88H
MOV B,#OFFH
PUSH ACC
PUSH B
POP ACC
POP B
【答】结果如下:
MOV SP,#60tt ;(SP)=60H
NOV A,#88tt ;(A)=88H
MOV B.#0FFH ;(B)=FFH
PUSH ACC ;(SP)=61H,(61H)=88H
PUSH B ;(SP)=62H,(62H)=FFH
POP ACC ;(A)=FFH,(SP)=61H
POP B ;(B)=88H,(SP)=60H
程序段的执行结果:累加器A和寄存器B的内容通过堆栈进行了交换。
注意:80C51单片机的堆栈是按照先进后出的原则进行管理的。
【3-1】已知(A)=7AH,(RO)=30H,(30H)=A5 H,(PSW)=80H。请填写各条指令单独执行后的结果。
(1) XCH A,R0
(2) XCH A,30tt
(3) XCH A,@R0
(4) XCHD A,@R0
(5)SWAP A
(6) ADD A,R0
(7) ADD A,30H
(8) ADD A,#30H
(9) ADDC A,30H