单片机中的CY与OV详细解析
CY(Carry): 用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0
OV: 表示运算过程中是否发生了溢出,若运算结果超过了8位二进制数所能表示数据的范围即有符号数-128~+127,则标志位置1。
单片机中的CY与OV详细解析
对无符号数的运算,判断只需CY即可,OV无作用。
对有符号数的运算,OV位是有用的。“OV位是C6位进位与C7位进位的异或”,说法对的(对51单片机而言),但不同的计算机说法不一
CY位是累加器的进位、借位标志。下文的叙述按16位机来举例说明,如果是8位机或其它字长,则可换一个例子,但道理相似。
对于无符号数的运算,CY位就可以表示其是否溢出。但如果是有符号数,则不能按CY标志来判断了。为此,设了另一个标志OV,其含义就是“假如是有符号数运算,是否出现了溢出”。
例如对于16位运算器,65534 + 3,(即二进制的1111111111111110 + 0000000000000011),
本该得65537,(即二进制的10000000000000001),但因为寄存器只有16位,最高位的那个1丢掉了(进入了CY标志)。结果寄存器中只剩下了1,(即二进制的0000000000000001)。
此时,我们可以说,16位的无符号数加法,65534+3溢出了,溢出后的答案成了1。
但是对于有符号整数,情况就不同了。有符号整数采用补码表示法。16位有符号整数不可能表示65534,此时如果机内二进制是1111111111111110,程序中认为它是-2,故:
机内的二进制的1111111111111110 + 0000000000000011,代表的是(-2) + 3。
请注意,此时的(-2)+3和上文的无符号数65534+3,在CPU的运算器硬件上完全相同,都是得到和为1,而CY标志也为1。
但是,有符号数(-2)+3=1并无溢出。故此时的CY标志不能代表它溢出了。
另外再举一例:
无符号数32763 + 8 = 32771,没有进位,CY标志为0。此时并不溢出。
但是,如果是有符号数32763 + 8,这就是溢出了,因为32773的二进制为1000000000000011,作为有符号数会被看成负数-32765。16位有符号数不可能表示32773的。
不管是有符号数还是无符号数,CPU的二进制运算器机器加、减操作是一样的,但其“溢出”的条件不同。
现在大多数的计算机中,如果是无符号数,都可以用CY标志来判断其是否溢出;而如果是有符号数,则需要用OV标志来判断其是否溢出。
至于OV标志在逻辑上又是根据什么产生的呢?则不同的计算机上有不同的实现方法,但效果都是一样。
这里介绍一种道理比较容易懂的方法:“双符号位法”。具体是:
作加、减法前,先将两个运算数都按照有符号数的规则扩充成17位。即:符号位是0的前面添一位0,符号位是1的前面添一位1。
然后按17位的机器加、减,得出17位的结果。
如果17位结果的高两位(即双符号位)不同,就置OV标志为1,否则,OV标志为零。
跟电师傅学单片机(13):单片机算术运算类指令图文讲解
一:加一减一指令(共9条)
单片机加一减一指令表
1、INC:单片机加1指令(共5条),主要用于修改地址指针和计数次数,只有一个操作数。
指令功能:是将操作数所确定的单元或寄存器中的内容加1,最后将结果还是送回原操作数单元中。
操作数:累加器A、寄存器Rn、直接地址direct、寄存器间接寻址单元、数据指针寄存器DPTR中的内容。
2、DEC:单片机减1指令(共4条),只有一个操作数,与INC指令类似。
指令功能:是将操作数所确定的单元或寄存器中的内容减1,最后将结果还是送回原操作数单元中。
操作数:累加器A、寄存器Rn、直接地址direct、寄存器间接寻址单元中的内容。
二:十进制调整指令(1条)
DA A
单片机十进制调整指令,功能是在进行BCD码加法运算时,用来对BCD码的加法运算结果自动进行修正,修正结果存放在A中。
BCD码:是二进码十进数或二-十进制代码,用4位二进制数来表示1位十进制数中的0~9这10个数码。
注意:
1:在进行BCD加法运算时,在单片机加法指令ADD或ADDC指令后紧跟着DA A指令,单片机自动判断和修正。
2:对BCD码的减法运算时不能用DA A指令不进行修正,不适用减法指令。
3:影响PSW中CY、AC、OV标志位。(请看下图:标志寄存器PSW功能图)
三:乘法指令(1条)
MUL AB
单片机乘法指令,功能是实现2个8位无符号数的乘法运算,相乘的2个数分别存放在累加器A中和寄存器B中,乘积结果为16位:低8位存放在A中,高8位存放在B中。
注意:
1:乘数和被乘数可以交换。
2:乘积结果大于255,PSW中的溢出标志位OV置1,否则为0 。
单片机标志寄存器PSW功能图
单片机指令举例:
02H和04H的乘法运算
MOV A,#02H
MOV B,#04H
MUL AB
执行指令结果:
A:08H
B:00H
OV:0
四:除法指令(1条)
DIV AB
单片机除法指令,功能是实现2个8位无符号数的除法运算,被除数放在累加器A中,除数放在寄存器B中。相除结果:商放在A中,余数放在B中。
注意:
单片机除法指令也影响PSW中CY和OV标志位,相除之后CY和OV均为0。(请看上图:标志寄存器PSW功能图)
单片机指令举例:
22和4的除法运算
MOV A,#22
MOV B,#04
MUL AB
执行指令结果:
A:05H
B:02H
CY:0
OV:0
单片机乘除法指令
到此为止,24条单片机算术运算类指令讲解完毕,谢谢阅读!欢迎留言讨论,共同提高!
相关问答
51 单片机中 , CY 为1那么OV是不是也为1?加法时, CY 为1时表示最高...[最佳回答]不一定CY例如-1+(-2)=-3,CY溢置1,OV不置1,减法也一样的CY:进位标志.当最后一次算术操作产生进位(加法)或借位(减法)时,该位置1.其它算术操作将其清...
3.MCS-51 单片机中 决定程序执行顺序的】作业帮[最佳回答]太多了,建议看书去.----2.简述标志CY与OV的意义.为什么会发生溢出?溢出的本质是什么?--51系列单片机,是八位机,每次计算操作都是针对八位数进行的...
单片机 的DJNZ指令和 cy 位是什么意?DJNZ就是将一个寄存器或直接寻址字节减一,不等于零则跳转到指定位置,等于零则继续向下运行。CY位就是进位/借位位。DJNZ就是将一个寄存器或直接寻址字节减一,...
单片机中 ,进位标志 CY 在加法中当有进位CY为1那么在加法中,有借位时CY为0吗?进位和借位都是CY,加法有进位CY=1,减法有借位CY=1例如:MOVA,#81HADDA,#80H此时CY=1CLRCMOVA,#80HSUBBA,#81H此时CY=1进位和借位都是CY...
51 单片机CY 位与汇编CF位的区别?51单片机Cy位即PSW.7,是51单片机算数运算中的进位借位标志,根据算数运算结果由系统置位或复位,也可以编程置位或复位。置位指令为:SETBC;复位指令为CLRC。...
单片机 填空求助1.MCS-51系列单片机为()位单片机.2.8051单片...[最佳回答]1.MCS-51系列单片机为(8)位单片机.2.8051单片机有两种复位方式,既上电复位和手动复位.复位后SP=(07H),PC=(0000H),PSW=(00H),P0=(F...
单片机 的psw是什么?程序状态寄存器PSW。程序状态寄存器是计算机系统的核心部件——运算器的一部分,PSW用来存放两类信息:一类是体现当前指令执行结果的各种状态信息,如有无进位(...
单片机 相对转移指令?CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者...
单片机 运算前PSW=80H,MOVA,#0ABHSUBBA,#0C3H求ACC= CY =AC=OV=...[最佳回答]1、由于是用0ABH-0C3H=0E8H(也就是十进制的-24,补码表示),因此ACC=0E8H;2、由于AB比C3小,因此运算时必然借位,因此CY=1;3、由于AB=10101011,C3=1100...
单片机 指令DA解释?BCD码转换指令;比如说:81D+91D=172D而:81H+91H=112H这里为了将81H+91H结果与81D+91D一致,经过DA有:DA(112H)=112H+60H=172H虽然一个是16...