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/64025.html