没学汇编,这种题我真是做一道错一道:-(
OF(overflow flag) 溢出标志位
溢出标志位 OF = 1 表示带符号整数运算时结果发生溢出。对于无符号整数运算,OF没有意义。
对于有符号数的溢出判断方式有:
1)采用一位符号位:思想为:'-'+'-'='+' 或 '+'+'+'='-'则为溢出,其他情况无溢出
2)采用双符号位:s1、s2表示运算结果的两个符号位
① s1s2 = 00 表示正数,无溢出
② s1s2 = 01 表示结果正溢出 ,即 '-'+'-'='+',且s2表示当前运算符号'-',s1表示原本正确的符号'+'
③ s1s2 = 10 表示结果负溢出 ,即 '+'+'+'='-',且s2表示当前运算符号'+',s1表示原本正确的符号'-'
④ s1s2 = 11 表示结果为负数,无溢出
3)采用一位符号位,根据数据位的进位情况判断溢出
Cs 表示两数之间符号位运算的进位
C1 表示最高数值位
V = Cs⊕C1 ,若 V=0 表示无溢出;V=1 表示有溢出
注:最高位产生进位不一定有溢出,可参考【图三】-(3 第三问
ZF(zero flag) 零标志位
ZF = 1表示结果为0,无论是有符号数还是无符号数,ZF都有意义
CF(carry flag) 进/借位标志位
表示无符号整数数加/减运算时的进位/借位。
含义:
加法时,CF = 1表示无符号数加法溢出。
减法时,CF = 1表示有借位,即不够减。
计算:(ALU运算逻辑)
加法时:SUB = 0
减法时:SUB = 1
CF = 最高位进位 ⊕ SUB
--可参考【图二】中右边四个运算式子 或【图四】
对于有有符号数的整数运算没有意义
但是真要看的话,CF=最高位进位输出,具体见下方题型归纳。
--可参考【图三】(2)、(3)问
注:
1)数据存放在内存或CPU寄存器中都统一使用有符号数的补码。
2)ALU中运算无视有无符号,统一使用一套逻辑,只会根据输入信号进行逻辑运算
若为加法: [x]补+[y]补
若为减法: [x]补-[y]补 = [x]补+[y]求补
3) 一个数的补码与对一个数求补的区别:
补码是对于有符号数而言的
求法:对除符号位外全部取反,末尾+1;
如: -5 原码 = 1101 ->除符号位取反:1010 ->末尾+1->1011=-5的补码( 红色为符号位)
求补则无视符号位,这就对于了上面说的:“ALU无视有无符号,统一使用一套逻辑”
求法:全部位数取反,末尾+1;见【图二】ALU电路图
如: 对 -5 求补 :-5 原码=1101->全部位取反:0010->末尾+1->0011
注:正数补码=原码,但 无论正负都可以求补。
SF(symbol flag) 符号标志位
结果为负,即符号位为1时SF=1,否则为0.
注意:当产生溢出时,说明符号标志位置出错,可参看OF-2)-②与③
以上来自王道课本
附
放两张wd上的相关视频截图吧
【图一】
1)“由加法器的原理图,加法器的方式控制MUX用于控制加减法,如上图,当M=1时进行S=A+B操作,当M=0时进行S=A-B操作。当M=0(减法)时,各个异或门对B的各位进行求反,并将1作为初始进位加入结果,也就是执行对B的求反加1,即求补操作。” 也就是说!B是有符号数时,无论符号位是0还是1,只要M=0, 就统统对B执行求补操作。
2)CPU只会根据输入信号进行逻辑运算,在硬件级别是没有有符号无符号的概念,运算结束会根据运算前的信号和输出信号来设置一些标志位,是不是有符号由写程序的人决定,标志位要看你把操作数当有符号还是无符号来选择。
大多数计算机内部的有符号整数都是用补码,就是说无论正负,这个计算机内部只用补码来 编码。
以上摘自有符号数的加减法 和无符号数的加减法,和,系统是如何识别有符号数和无符号数的
【图二】
本文着重研究CF标志位
题型总结
虽说总结,但是王道上相关的题目也就两道:-(
待我见识多几道题目再更好完善,如果有大佬能点拨一二更好
其一,题目显示给出这为有符号数
上面提到,机器是无法分辨现在正在执行的是有符号还是无符号数的运算,有无符合是程序给的定义,这也因此让一些标志位变得有意义:如CF。
既然题目人为的定义为了负数,那么我们就可以人为的“将减法转换为加法指令”(当然,如果如果要求的是加法那就不用管了),再然后由于是求CF位,那么我们需要将其视为无符号数,进行相加。
总结就是:使用补码规则将减法转化为加法,判断逻辑为无符号数的加法(具体见上面)。
【图三】
其二:数值以位串形式存放在寄存器中
寄存器中的数值运算是用ALU进行的。上面提到,ALU无视有无符号数统一使用一套逻辑,再结合开头提到的 注2) 以及无符号数的运算逻辑,即可得计算方法:
若为加法:[X]+[Y] 直接运算,
CF=最高位进位⊕0
若为减法:[X]-[Y] 对[Y]求补,后有:[X]-[Y]=[X]+[Y]求补
CF=上式最高位进位⊕1
【图四】文章来源:https://www.toymoban.com/news/detail-540310.html
一张放错位置的图:
文章来源地址https://www.toymoban.com/news/detail-540310.html
到了这里,关于CF、SF、OF、ZF标志位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!