算术运算指令
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,#data
add a,data
add a,@ri
add 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,#data
addc a,data
addc a,@ri
addc a,rn
这是四条带进位的加法指令。将累加器a内容加当前cy标志位内容,再加无符号单字节的数,和存于累加器a中。当运算结果第3、7位产生进位溢出时,则分别置位ac、cy和ov标志位。本指令执行将影响标志位ac、cy、ov、p。
本指令常用于多字节加法。
3、加1指令:
inc a
inc data
inc @ri
inc rn
inc 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,#data
subb a,data
subb a,@ri
subb 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 a
dec data
dec @ri
dec rn
dec指令把所指的寄存器内容减1,结果仍送回原寄存器,若原来寄存器的内容为00h,则减1后将为ffh,运算结果不影响任何标志位,该组指令使用了直接、寄存器和寄存器间寻址。同加1指令一样,在第二条指令中,若直接地址是i/o口,则进行“读-改-写”操作。
x86处理器有漏洞,安全性保障要突破
关于TI HDC2080数字温湿传感器性能介绍
希捷推出全球首个最大16TB容量的安防硬盘
工业物联网安全建立在硬件之上
可提高电源效率的同步整流ic U7718
算术运算指令
小米MIUI无障碍触感新功能重磅发布
区块链、智能合约和区中心化网络的基本原理
ICT是什么?ICT的社会和经济影响
Porsche Design二合一笔电,基于ARM的Windows 10笔记本
“燧原-之江人工智能芯片联合研究中心”正式成立
nbiot和cat1区别是什么?nbiot和cat1哪个好?技术疯狂内卷下NB-IoT真的会被Cat.1取代吗?
西人马将助力中国芯片事业真正实现自主发展
Mouser率先备货Fairchild FOD8160逻辑栅极光耦合器
电动车电池的分段恒流充电方案
IC引脚未在应用中使用如何处置
当音乐遇上IoT—— 疫情推动音乐物联网创新应用
基尔霍夫电压定律应用于什么
返工堆叠封装所需要的各项技能,你真正了解吗?
人工智能在电子商务中的应用有哪些