四个符号位具体含义与逻辑表达式
标志位英文全称含义说明适用数据类型判断逻辑表达式OFOverflow Flag有符号数运算中溢出标志。结果超出了补码能表示的范围。有符号数OF = Cn异或Cn-1CFCarry Flag无符号数运算中进位标志。加法产生了进位,减法产生了借位。无符号数CF = C0异或CnZFZero Flag结果是否为0。通用ZF = 1表示结果为0SFSign Flag结果的符号位(即最高位),表示结果是否为负(仅对有符号数有意义)。有符号数SF = 结果的最高位
OF解析
OF表示有符号数的加减运算是否溢出,其值为符号位进位(Cn)与数值位最高位进位(Cn-1)的异或。
推断出这个逻辑表达式的基础在于,如果有符号数的加减运算出现溢出,只有下面两种情况:
1、同符号数相加结果异号;
2、负-正得正,正-负得负。
那么只需要简单列举一下能出现溢出的所有情况,即可推出表达式:
具体情形符号位进位(Cn)溢出情况下,数值位最高位进位(Cn-1)正数+正数0+0,Cn=0正数加正数得负数则溢出,故Cn-1=1负数+负数1+1,Cn=1负数+负数得正数则溢出,故Cn-1=0负数-正数1+1,Cn=1负数-正数得正数则溢出,故Cn-1=0正数-负数0+0,Cn=0正数-负数得负数则溢出,故Cn-1=1
所以从上表显然当Cn异或Cn-1时,发生溢出,即OF=1。
CF解析
CF表示无符号数的加减运算是否溢出,其值为符号位进位(Cn)与最低进位输入(C0)的异或。
这应该怎么理解呢?首先需要知道一个前提,无符号数虽然没有补码的概念,但是无符号数的加减运算同样属于模运算的范畴,所以减去一个无符号数B等于+(-B),这里的-B应当等于M-B,即B的所有位数按位取反后再加1(类似于补码的计算方法)。
有了上面这个基础之后,如果两个无符号数的加减法发生溢出,则:
加法时,C0=0(控制端),若Cn=1,则发生了溢出。
减法时,如果发生溢出(被减数小于减数)的情况如下图所示:
从上图易看出无符号数减法发生溢出时,Cn=0(A+(-B)没有产生进位,即发生借位,不够减),又已知C0=1,所以CF的值等于Cn异或C0。
二数比较方法
无符号数
设结果为A-B,易知:
如果ZF=0,且CF=0,则A>B;若ZF=0,且CF=1,则A
有符号数
设结果为A-B,由枚举所有情况可得:
ZF等于0,且OF异或SF=1时,A