MCS-51具有强壮的加、减、乘、除四则算术运算指令。
1.程序状况字PSW
MCS-51有一个程序状况字寄存器PSW,用来保存指令履行成果的标志,供程序查讯和判别。PSW是特别功用寄存器中的一个,其格局如下:
PSW7--既是布尔处理机的累加器C,又是进位标志CY,假如操作成果在最高位有进位输出(加法时)或借位输入(减法时),置位CY,不然清“0”CY。
AC--辅佐进位(半进位)标志。假如操作成果的低4位有进位(加法时)或向高4位借位时(减法),置AC,不然清“0”AC,AC首要用于二-十进制数加法调整。
OV--溢出标志。假如操作成果有进位进入最高位,但最高位没有发生进位,或许最高位发生进位而低位没有向最高位进位,这时置位溢出标志位,不然OV清“0”。溢出标志位用于补码运算,当有符号的数运算成果不能用8位二进制数表明时,OV将置位。
P--累加器A的奇偶标志位,假如累加器A的8位的模2和为1(奇),则P=1;不然P=0。因为P总是表明A的奇偶性,跟着A的内容改变的,所以一个值写入PSW的P位的值不变。
RS1、RS0--指示当时运用的作业寄存器区。
F0--用户标志位。可作为软件标志,它的效果和内部RAM位寻址区的各位类似。
PSW1--保存位,对它的操作无效。
2.加法指令
1、不带进位加法指令
ADD A,#dataADD A,dataADD A,@RiADD A,Rn
作业寄存器、内部RAM单元内容或当即数的8位无符号二进制数和累加器A中数相加,所得和存放于累加器A中,当和的第3、7位有进位时,别离将AC,CY标志方位1;不然为0。
上述指令的履即将影响标志位AC、CY、OV、P。
关于无符号数,进位标志位CY=1,表明溢出;CY=0表明无溢出。带符号数运算的溢出取决于第6、7位中有一位发生进位,而另一位不发生进位,溢出标志位OV置“1”不然被清“0”。OV=1表明两个正数相加,和变为负数,或两个负数相加,和变为正数的过错成果。
源操作数有四种寻址方法:寄存器、直接、直接和当即数。
2、带进位加法指令:
ADDC A,#dataADDC A,dataADDC A,@RiADDC A,Rn
这是四条带进位的加法指令。将累加器A内容加当时CY标志位内容,再加无符号单字节的数,和存于累加器A中。当运算成果第3、7位发生进位溢出时,则别离置位AC、CY和OV标志位。本指令履即将影响标志位AC、CY、OV、P。
本指令常用于多字节加法。
3、加1指令:
INC AINC dataINC @RiINC RnINC DPTR
INC指令将指定的内容加1,成果仍存放于原A或原单元中。如原值为0FFH,加1运算后将变成00H,运算成果不影响标志位。
本指令可对累加器A、作业寄存器RN、RI间址和直接寻址的单元内容进行加1运算。可见MCS-51加1指令是较丰厚的。
留意:当用本指令使输出并行I/O内容加1时,用作输出口原始值,将从输出口的数据锁存器中读入,而不是从输出口的引脚上读入。
4、二-十进制调正指令:
DA A
若[(A0-3)》9]或[(AC)=1),则(A0-3)(A0-3)+06H
本指令是对A的BCD码加法成果进行调正。两个紧缩型BCD码按二进制数相加之后,有必要经本指令调正,才干得到紧缩型BCD码的和数。
本指令的操作为:若累加器A的低4位数值大于9或许第3位向第4位发生进位,即AC辅佐进位位为1,则需将A的低4位内容加6调正,以发生低4位正确的BCD码值。假如加0调正后,低4位发生进位,且高4位均为1时,则内部加法将置位CY,反之,它并不清“0”CY标志位。
若累加器A的高4位值大于9或最高进位位CY=1,则高位4位需加6调正,以发生高4位的正确BCD码值。相同,在加6调正后发生最高进位,则置位CY,反之,不清“0”CY这时CY的置位,表明和数BCD码值大于等于100。这对多字节十进制加法有用。不影响OV标志。
由此可见,本指令是依据累加器A的原始数值和PSW的状况,对累加器A进行加O6H、60H或66H的操作。
有必要留意:本指令不能简略地把累加器A中的16进制数交换成BCD码,也不能用于十进制减法的调正。
3.减法指令
MCS-51在MCS-48的基础上添加了带借位减法指令,加强了计算机的运算功用。
1、带借位减法指令:
SUBB A,#dataSUBB A,dataSUBB A,@RiSUBB A,Rn
带借位减法指令SUBB,从累加器A中减去进位标志位CY和指定的变量,成果在累加器A中,若第七位有借位,则置位位CY,不然CY清0。若第3位有错位,则置位辅佐进位标志AC,不然清0 AC。若第7和第6位中有一位需借位,而另一位不借位,则置位溢出标志OV。溢出位OV用于带符号的整数减法,它表明(OV=1)一个正数减负数成果为负数;或一个负数减正数成果为正数的过错成果。
源操作数答应有四种寻址方法:寄存器RN,直接地址direct,间址Ri或当即数。
当在进行单字节或多字节减法前,不知道进位标志位CY的值,则应在减法指令前先将CY清“0”。
4.乘法指令
MUL AB
乘法指令是MCS-51新添加的,运算速度只需4个机器周期。它大大添加了MCS-51单片机的运算功用,克服了MCS-48系列单片机的缺乏。
本指令将累加器A和寄存器B中二个8位无符号整数进行相乘,16位乘积的低8位存于A中,高8位存于B中,假如乘积大于255(0FFH),即B的内容不为0时,则置位溢出标志位OV,不然清“0”OV。进位标志位CY总是清“0”。
5.除法指令
DIV AB
MCS-51系列单片机添加的除法指令,运算时刻亦只需4个机器周期,相同也增强了MCS-51的运算功用,使它能适用于杂乱的且要求运算功用较强的控制系统。除法指令格局:
本指令将累加器A中8位无符号整数除以B寄存器中8位无符号整数,所得成果商的整数部分存于A中,整数作数部分存于寄存器B中。清“0”CY和OV标志位。当除数(B中内容)为00H时,则履行成果将为不定值,即履行成果送往A和B中的为不定值,且置位溢出标志位OV。在任何情况下,均清“0”CY。
6.减一指令
DEC ADEC dataDEC @RiDEC Rn
DEC指令把所指的寄存器内容减1,成果仍送回原寄存器,若本来寄存器的内容为00H,则减1后将为FFH,运算成果不影响任何标志位,该组指令运用了直接、寄存器和寄存器间寻址。同加1指令相同,在第二条指令中,若直接地址是I/O口,则进行“读-改-写”操作。