这组指令的功能是将操作数所指定单元的内容减1。除“DEC A”指令影响P标志外,其余指令均不影响PSW标志
3.4.6 乘、除法指令
MCS-51系列单片机有乘除法指令各一条,它们都是一字节指令,执行时需四个机器周期。
1.乘法指令
MUL AB ;BA←(A)×(B)
这条指令的功能是把累加器A和寄存器B中的两个8位无符号数相乘,所得16位乘积的低8位放在A中,高8位放在B中。
乘法指令执行后会影响三个标志:若乘积小于FFH(即B的内容为0),则OV=0,否则OV=1。CY总是被清0,奇偶标志P仍按A中1的奇偶性来确定。
例3-12 已知(A)=80H,(B)=32H, 执行指令 MUL AB
结果:(A)=00H,(B)=19H,OV=1,CY=O,P=0。 2.除法指令
DIV AB ;A←(A)÷(B)之商,B←(A)÷(B)之余数 这条指令的功能是对两个8位无符号数进行除法运算。其中被除数存放在累加器A中,除数存放在寄存器B中。指令执行后,商存于累加器A中,余数存于寄存器B中。
除法指令执行后也影响三个标志:若除数为0(B=0)时,OV=1,表示除法没有意义;若除数不为0,则OV=0,表示除法正常进行。CY总是被清0,奇偶标志P仍按A中1的奇偶性来确定。
例3-13 已知(A)=87H(135D),(B)=0CH(12D), 执行指令 DIV AB 结果:(A)=0BH,(B)=03H,OV=0,CY=O,P=1。
3.4.7 十进制调整指令
DA A
该指令的功能是对A中刚进行的两个BCD码的加法结果进行修正。该指令只影响进位标志CY。
有时我们希望计算机能存储十进制数,也希望计算机能进行十进制数的运算,这时就要用BCD码来表示十进制数。
所谓BCD码就是采用四位二进制编码表示的十进制数。四位二进制数共有十六个编码,BCD码是取它前十个的编码0000~1001来代表十进制数的0~9,这种编码称为8421BCD码,简称BCD码。一个字节可以存放2位BCD码(称为压缩的BCD码)。
如果两个BCD码数相加,结果也是BCD码,则该加法运算称为BCD码加法。在MCS-51系列单片机中没有专门的BCD码加法指令,要进行BCD码加法运算,也要用加法指令ADD或ADDC,然而计算机在执行ADD或ADDC指令进行加法运算时,是按照二进制规则进行的,对于4位二进制数是按逢16进位,而BCD码是逢十进位,二者存在进位差。因此用ADD或ADDC指令进行BCD码相加时,可能会出现错误。例如:
(a) 3+5=8 (b) 6+7=13 (c) 8+9=17
13
0 0 1 1 0 1 1 0 1 0 0 0
+)0 1 0 1 +) 0 1 1 1 +) 1 0 0 1
1 0 0 0 1 1 0 1 1 0 0 0 1
在上述3组运算中,(a) 的运算结果是正确的,因为8的BCD码就是1000;(b)的运算结果是错误的,因为13的BCD码应是00010011,但运算结果却是1011,BCD码中没有这个编码;(c)的运算结果也是错误的,因为17的BCD码应是00010111,而运算结果是00010001。
由此可知,当运算结果>16或在10~16之间时,都将出现错误结果。因此,要对结果进行修正,这就是所谓的十进制调整问题。
使用DA A指令可修正这种错误,它能对运算结