导航:首页 > 操作系统 > 单片机ov溢出运算

单片机ov溢出运算

发布时间:2024-06-27 01:44:50

⑴ 51单片机中,溢出标志OV=CP⊕CS。CP和CS是什么

嘿嘿 这个俺知道, 可以告诉你
51单片机中,溢出标志OV=CP⊕CS, 应该表示为OV=C6'⊕C7'
即加减运算时,C6'是次高位D6I向最高位产生的进位或借位
C7'是次高位D7I向第九位产生的进位或借位
二者的异或 如果为1 则表示溢出。

呵呵 满意 就选满意回答喽

⑵ 单片机psw中的ov为1或0,有什么意义啊1和0说明了什么

单片机psw中的ov为溢出位,当OV=1时,说明运算有溢出,如果OV=0,说明运算没有溢出。

⑶ 单片机中的cy和ov要怎样理解啊,能否举例子

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标志为零。

然后取其低16位作为最后结果。

⑷ 关于单片机OV溢出的问题

对于单片机,不如先将两个操作数扩大一个类型,如原来是signed
char
就扩成signed
short然后再运算,运算后再判断是否在signed
char
下相加会溢出,即大于127。这个比相加后再判断要好一点。
数据长度扩大后,肯定不会出现溢出了。

⑸ 单片机程序状态字PSW的OV位到底是怎么判断溢出的有CY位不就够了么

单片机程序状态字PSW的OV位是溢出标志,当进行算数运算时,如果产生溢出,则硬件将OV置1,否则清0。执行有符号加、减法指令的时候,当D6位有向D7位的进位或借位时C6Y=1时,而D7位没有向CY位的进位或借位C7Y=0时,OV=1或C6Y=0,C7Y=,1时,则OV=1。

溢出的逻辑表达式:OV=C6Y_C7Y。CY位是累加器的进位或借位标志,对于无符号数可以用CY来判断溢出,但是对有符号数就无法判断了,所以只有CY位是不够的。

PSW各位的定义如下:
CY(PSW.7):D7位,进位、借位标志。进位、借位CY=1;否则CY=0.

AC(PSW.6):D6位,辅助进位、借位标志。当D3向D4有借位或进位时,AC=1;否则AC=0.

F0(PSW.5):D5位,用户标志位;

RS1、RS0(PSW.4及PSW.3):D4、D3位,寄存器组选择控制位;

OV(PSW.2):溢出标志。有溢出OV=1,否则OV=0;

F1(PSW·1):D1位,用户标志位;

P(PSW·0):奇偶校验标志位;累加器ACC中的运算结果有奇数个1时P=1,否则P=0。

(5)单片机ov溢出运算扩展阅读

数据类型:

SFR也是一种扩充数据类型,占用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们可以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。

⑹ 51单片机的溢出问题

有深入探究的意愿,很好。

OV标志位是针对有符号数据类型计算的溢出标志,所以其规则是对bit6(有效数据最高位)或bit7(符号位)其中一位发生进位或借位时,OV才会置位。
以你举的例子来解释,运算时bit6和bit7同时发生进位了,所以OV并不置位。或者从另一个角度来说,前一个二进制补码代表-123,后一个二进制补码代表-1,二者相加的结果是-124——并没有超过八位有符号整型-128~+127的有效范围,所以并不溢出。

⑺ 单片机中psw中的ov的用法

单片机是8位的
当低四围向高四位进位时,ov溢出就置1了

阅读全文

与单片机ov溢出运算相关的资料

热点内容
什么是多台服务器 浏览:33
菜鸟音乐编辑app哪个好 浏览:545
人工鱼群算法matlab 浏览:80
算法coursera 浏览:122
潍坊诸城DNS服务器地址联通 浏览:9
共享文件夹不显示任务栏 浏览:251
唱歌给党听是哪个app的活动 浏览:499
bp算法源代码 浏览:648
发票服务器怎么选 浏览:387
哪个app陪伴运动 浏览:882
学编程每天六点起床 浏览:954
乌鸦搜索算法复现 浏览:77
android3d切换 浏览:751
资源管理器选定文件夹 浏览:989
分数公约数的算法 浏览:589
yii2引入php文件 浏览:564
华为p20方舟编译器评测 浏览:187
pntp服务器是什么 浏览:654
程序员培训多长时间 浏览:557
求aaa的和python 浏览:194