顶点运算——加减法运算
补码加减运算公式
即:A + B = [[A] 补码+ [B]补码]补码,所以求和运算全部用补码的加法,结果是结果的补码
溢出判断
一位符号位判断溢出
- 定义:参加操作的两个数符号相同,其结果的符号与原操作数的符号不同,
- 硬件实现:
最高有效位的进位 异或 符号位的进位 = 1 - 情况分类
| 符号位 | 数值位最高位 | 溢出判定结果 | |
|---|---|---|---|
| 正数 0,1100与0,1011 | 0与0,不进位 | 1与1,进位 | 0⊕1 = 1发生溢出 |
| 正数 0,1100与0,0011 | 0与0,不进位 | 0与1,不进位 | 0⊕0 = 0不发生溢出 |
| 负数 1,1100与1,1011 | 1与1,进位 | 1与1,进位 | 1⊕1 = 0不发生溢出 |
| 负数 1,0100与1,0011 | 1与1,进位 | 0与0,不进位 | 1⊕0= 1发生溢出 |
总结:
- 对于正数来说,0表示0,1表示1;但是对于负数来说,1表示0,0表示1.
- 负数发生溢出,最高位不会进位,符号位一定会进位;
- 正数发生溢出,最高位一定会发生溢出,符号位不发生改变。
两位符号位判断溢出(单符号位判定溢出的改良版)
- 定义:由数值部分求补码,真值 加上2n,仅仅生成一个符号位,要生成两个符号位,改为:真是加上2n+1多一个符号位。
以下是常见补码的求法——加上2n+1次方
以下是移码的常见求法——加上2n
以下适用于判定是否溢出的两位符号位的求法——加上2n+2
- 原则:
- 结果的两个符号位相同,未溢出,对比单符号位的进位判定,如果都进位或者都不进位,那么就没有溢出
- 结果的两个符号位不同,溢出,对比单符号的进位判定,对于正数是符号位没有进位,但是数值位进位溢出;对于负数是,符号位进位,数值位没有进位,溢出
- 注意:对于最后的运算结果,最高位才是真正的符号
补码加减法的硬件配置
说明:
- A为寄存器ACC,保存被加数;
- X为模型机寄存器X,保存加数或者被减数;
- GA和GS标记,加法GA = 1,减法GS = 1;
- 求补控制逻辑,用于支持将减法转成负数的补码;
注:上述为个人上课的总结与回顾