单片机程序状态字PSW的OV位到底是怎么判断溢出的?有CY位不就够了么?
首先,要知道,什么是溢出?
一般来说,容器太小,盛不下了,就会溢出。
在计算机方面,溢出,就是数据太大,超出了预定的范围。
数字,在计算机中,都是用机器码代表的。
人们最常用的“自然数”和“整数”,其范围如下:
机器码,无论代表什么数字,只要运算结果超出预定范围,就是【溢出】。
但是,在计算机专业人的嘴里,就不一样了。
【无符号数的溢出】,不叫溢出,要叫做【进位】。
【带符号数的溢出】,才叫做【溢出】。
搞计算机的这些人,基本概念不清,却自命不凡!
冒充脑回路清奇。。。正常人对此,就只能无语了。
---------------------------
那么,就按照计算机专业的说法吧:
溢出,是指“补码运算结果超出范围”。
溢出的特征,是“符号错误”。
知道了这些,判断是否溢出,就很容易了。
CPU 做完运算,就会给出结果和“溢出标志位 OV”。
如果 OV=1,就代表:刚刚做的计算,发生了溢出。
人工判断是否溢出,有如下六个方法。
一、无符号数的运算,肯定不会溢出。只有进位。
二、只有:正+正、负+负,才有可能超出范围。不是这些,就绝不会溢出。
三、人工用数值计算。和,如果没有超出范围,就没有溢出。
四、人工用补码计算。和的符号,如果正确,就没有溢出。
五、编个程序,让计算机计算。然后观察溢出标志位,为零,就没有溢出。
六、人工用补码计算,如“最高位的进位”和“次高位的进位”相同,就没有溢出。
第六种,本是 CPU 的硬件所用的方法。
硬件,其理论基础,是很晦涩难懂的。
异或运算,一般也不需要初学者掌握。
但是,一些爱得瑟的老师,偏爱介绍这种方法。
却又拿不出任何的理论!
其实,这是很无聊的表现,就是想着难为学生。
首先,要知道,什么是溢出?
一般来说,容器太小,盛不下了,就会溢出。
在计算机方面,溢出,就是数据太大,超出了预定的范围。
数字,在计算机中,都是用机器码代表的。
人们最常用的“自然数”和“整数”,其表达范围如下:
机器码,无论代表什么数字,只要运算结果超出预定范围,就是【溢出】。
但是,在计算机专业人的嘴里,就不一样了。
【无符号数的溢出】,不叫溢出,要叫做【进位】。
【带符号数的溢出】,才叫做【溢出】。
搞计算机的这些人,基本概念不清,却自命不凡!
冒充脑回路清奇。。。正常人对此,就只能无语了。
---------------------------
那么,就按照计算机专业的说法吧:
溢出,是指“补码运算结果超出范围”。
溢出的特征,是“符号错误”。
知道了这些,判断是否溢出,就很容易了。
CPU 每次做完运算,就会给出结果和“进位标志位 CY”和“溢出标志位 OV”。
如果 OV=1,就代表:刚刚做的计算,发生了溢出。
人工判断是否溢出,有如下六个方法。
一、无符号数的运算,肯定不会溢出。只有进位。
二、只有:正+正、负+负,才有可能超出范围。不是这些,就绝不会溢出。
三、人工用十进制数值计算。和,如果没有超出范围,就没有溢出。
四、人工用二进制补码计算。和的符号,如果正确,就没有溢出。
五、编个程序,让计算机计算。然后观察溢出标志位,为零,就没有溢出。
六、人工用补码计算,如“最高位的进位”和“次高位的进位”相同,就没有溢出。
第六种,本是 CPU 的硬件所用的方法。
硬件,其理论基础,是很晦涩难懂的。
异或运算,一般也不需要初学者掌握。
但是,一些爱得瑟的老师,偏爱介绍这种方法。
却又拿不出任何的理论!
其实,这是很无聊的表现,就是想着难为学生。
单片机程序状态字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。
扩展资料
数据类型:
SFR也是一种扩充数据类型,占用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们可以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。
参考资料来源:《单片机原理及应用》曹巧媛 编著 电子工业出版社 第二章 MCS-51单片机结构及原理 第一节 MCS-51单片机结构
参考资料来源:百度百科--PSW
参考资料来源:百度百科--程序状态字
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位作为最后结果。
CY(Carry): 用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0
OV: 表示运算过程中是否发生了溢出,若运算结果超过了8位二进制数所能表示数据的范围即有符号数-128~+127,则标志位置1。
单片机程序状态字PSW的OV位到底是怎么判断溢出的?
----
首先,要知道,什么是溢出?
一般来说,容器太小,盛不下了,就会溢出。
在计算机方面,溢出,就是数据太大,超出了预定的范围。
数字,在计算机中,都是用机器码代表的。
常用的两种数字,其范围如下:
机器码,无论代表什么数字,只要运算结果超出范围,就是【溢出】。
但是,在计算机专业人的嘴里,就不一样了。
【无符号数的溢出】,不叫溢出,要叫做【进位】。
【带符号数的溢出】,才叫做【溢出】。
搞计算机的这些人,基本概念不清,却自命不凡!
冒充脑回路清奇。。。正常人对此,就只能无语了。
---------------------------
那么,就按照计算机专业的说法吧:
溢出,是指“补码运算结果超出范围”。
溢出的特征,是“符号错误”。
知道了这些,判断是否溢出,就很容易了。
CPU 做完运算,就会给出结果和“溢出标志位 OV”。
如果 OV=1,就是说,刚刚做的计算,发生了溢出。
人工判断是否溢出,有如下六个方法。
一、无符号数的运算,肯定不会溢出。只有进位。
二、只有:正+正、负+负,才有可能超出范围。不是这些,就绝不会溢出。
三、人工用数值计算。和,如果没有超出范围,就没有溢出。
四、人工用补码计算。和的符号,如果正确,就没有溢出。
五、编个程序,让计算机计算。然后观察溢出标志位,为零,就没有溢出。
六、人工用补码计算,如“最高位的进位”和“次高位的进位”相同,就没有溢出。
第六种,本是 CPU 的硬件所用的方法。
硬件,其理论基础,是很晦涩难懂的。
异或运算,一般也不需要初学者掌握。
但是,一些爱得瑟的老师,偏爱介绍这种方法。
却又拿不出任何的理论!
其实,这是很无聊的表现,就是想着难为学生。
cpu主频1.7怎么样
指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。有的指令中也直接包含操作数本身。提取 第一阶段,提取,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)。由程序计数器(Program Counter)指定存储器的位置。(...
下列有关操作系统的硬件环境的叙述中,不正确的是( )。
【答案】:C 指令系统中的指令分为特权指令和非特权指令,CPU状态分为管态和目态。管态又称为特权状态、系统态或核心态,CPU在管态下可以执行指令系统的全集。目态又称常态或用户态。机器处于目态时程序只能执行非特权指令。
住放红色: 8051的PSW几乎都是状态位,状态位有C,AC,OV,P,F0,F1控制位有RS1,RS0
美溪区17843659678: 单片机中程序状态字什么作用?PSW.2(OV):溢出标志什么意思? - ?
住放红色: 51单片机的PSW(程序状态字)寄存器包括了C,AC,RS1,RS0,OV,P等几个状态位,这些状态位反映的是51单片机在执行完某个指令后的状态,比如有没有进位,有没有溢出,A中1的个数是奇数还是偶数个等.其中OV是溢出位,主要是想反映有符号数在运行时,是不是超出的最后的表示范围,平时在无符号位运算时没有会意思.OV是进位位与第二进位位异或的结果.
美溪区17843659678: 对无符号数,PSW中的OV怎么判断??求详解 ?
住放红色: 不溢出应该清楚怎么判断正负吧.就是C位. 考虑溢出 -128-1单片机的计算方法为先把1和128用补码表示为11111111b和10000000b.相加得,01111111b=127正数C=0溢出0V=1,-128-1;我也是刚看到.原来OV就是为有符号设计的当数寄存器值小于-127或大于128时候置位.
美溪区17843659678: 8051单片机的PSW寄存器各位标志有什么功能意义 - ?
住放红色: PSW寄存器是单片机内最重要的一个寄存器,其中的标志位会控制程序的执行的.每一位的功能意义见 下图.
美溪区17843659678: 关于单片机 CPU的程序状态字的问题 - ?
住放红色: PSW:程序方式字寄存器第零位:奇偶校验位P(如果累加器A里1的个数是单数,p=1,否则P=0)第一位:f1用户自定义位1(由用户自行设定)第二位:OV溢出位(当带符号数的运算结果超...
美溪区17843659678: PSW程序状态字每位的意义是什么? - ?
住放红色: 位 7: CY:进位标志. 当最后一次算术操作产生进位(加法)或借位(减法)时,该位置 1.其它算术操作将其清 0.位 6: AC:辅助进位标志.当最后一次算术操作向高半字节有进位(加法)或借位(减法)时,该位置 1.其它算术操作将其...
美溪区17843659678: 51单片机程序状态字PSW的值51单片机工作时候,程序状态字PS ?
住放红色: 在单片机中状态寄存器PSW是一个用了比较多的寄存器,除了D1位空着外,其它的7位都要使用,其中D7位Cy,是进(借)位位,当做加法或减法时,进位标志和借位标...
美溪区17843659678: 80C51单片机的psw寄存器各位标志的意义如何? - ?
住放红色: Cy(PSW.7)进位标志位;Ac(PSW.6)辅助进位标志位;F0(PSW.5)用户自定义标志位;RS1,RS0(PSW.4,PSW.3)4组工作寄存器选择控制位;OV(PSW.2)溢出标志位;PSW.1保留位,未用;P(PSW.0)奇偶标志位
美溪区17843659678: 单片机的PSW的作用是什么? - ?
住放红色: PSW即程序状态字(有些教材也叫程序状态寄存器),Program Status Word 程序状态寄存器PSW是计算机系统的核心部件——控制器的一部分 (1)Cy(PSW.7)PSW.7是Cy即C,来源于最近一次算术指令或逻辑指令执行时软硬件的改写. ...