您的位置 首页 嵌入式

单片机中的CY与OV具体解析

单片机中的CY与OV详细解析-CY(Carry): 用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0

OV: 表示运算过程中是否发生了溢出,若运算结果超过了8位二进制数所能表示数据的范围即有符号数-128~+127,则标志位置1。

CY(Carry): 用于表明加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY方位1,不然为0

OV: 表明运算过程中是否发生了溢出,若运算成果超过了8位二进制数所能表明数据的规模即有符号数-128~+127,则标志方位1。

对无符号数的运算,判别只需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标志为零。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/346997.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部