OF(overflow flag) 溢出标志位
没学汇编,这种题我真是做一道错一道:-(
OF(overflow flag) 溢出标志位
ZF(zero flag) 零标志位
CF(carry flag) 进/借位标志位
注:
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) 符号标志位
以上来自王道课本
附
放两张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
【图四】
一张放错位置的图:
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/95975.html