单片机中的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 是什么意思?51单片机中Cy是进位标志位。在进行加法或减法运算时,若运算结果最高位有进位或借位,则Cy进位。51单片机是对所有兼容Intel8031指令系统的单片机的统称。该...
【 单片机 psw位中的 cy 进位标识位与ov溢出标志位有什么区别吗?...[最佳回答]cy表示最高位是否向前进位或借位,而OV表示是否超过该数所能表示的范围(-128~127或00H~0FFH)
cy 值是什么?CY(Carry)在单片机里是进位标志。CY=0是无溢出,CY=1有溢出。用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则...
单片机 的进位标志 CY 是当第3和第7位有进位时位1?第3位的进位标志是半进位标志AC,这个一般是参与BCD运算,平常我们不太用。CY是第7位的进位标志,与第3位没太多联系。你问的排列是什么,是指PSW的排列还是别...
单片机 ac是什么位?单片机汇编语言中CY(PSW.7)是进位或借位,来源于最近一次算术指令或逻辑指令执行结果。AC(PSW.6)是辅助进位或辅助借位,用于BCD码的十进制调整运算。OV(PS...
一些 单片机 的基础题6、在片外扩展一片2764程序存储器芯片要(...[最佳回答]6、在片外扩展一片2764程序存储器芯片要(13位)地址线。15、DA指令是(二进制转十进制)指令,它只能紧跟在(加法)指令后使用。38、在程序状态寄存器PS...
51 单片机CY 位与汇编CF位的区别?51单片机Cy位即PSW.7,是51单片机算数运算中的进位借位标志,根据算数运算结果由系统置位或复位,也可以编程置位或复位。置位指令为:SETBC;复位指令为CLRC。...
减法指令 cy 位怎么判断?CY(Carry):用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位则CY位置1,否则为0OV:表示运算过程中是否发生了溢出,若运算结...
单片机 若 CY =1,知P1=101000011B,P3=01101100B,执行程序后 C...p1.0~p1.7逐个点亮并反复循环当开关1闭合时进入中断服务程序p2口的8个述:每个1秒,计数值自动加1(若超过9999,那么计数值重新计数),然后通过数码管,y...
cy 版本是什么意思?cy版本就是进位标志版本。在进行加法或减法运算时,若运算结果最高位有进位或借位,则Cy进位。51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列...