数据表示与计算
- 数据表示
- 定点数
- 分为原码、反码、补码、移码。
- 原码、反码、补码参考《计算机系统》的数据表示。
- 移码为把所有原始值统一加上一个偏移量,存储的是偏移后的值。常用于浮点数的阶码表示。
- 这里的定点数既包括整数,也包括小数。
- 表示整数的定点数不写小数点。
- 表示小数的定点数中,小数点固定在最左边的数字后面。
- 浮点数
- 由尾数和阶码组成,尾数一般使用原码或补码,需要带有符号位,阶码一般使用补码或移码。
- IEEE 754 标准参考《计算机系统》的数据表示。
- 本课程中的浮点数一般不使用 IEEE 754,而使用尾数为补码、阶码为补码的表示。
- 自定义数据表示
- 带标志符数据:数据不仅有原来的值,还有额外标志位表示类型信息、功能信息等。
- 带数据描述符数据:描述符不含数据,包含地址、长度等数据结构相关信息。
- 寄存器堆栈:一组专用的寄存器表示堆栈,相邻栈帧之间数据可以推移。栈顶地址固定,栈底随着操作变化。
- 存储器堆栈:用主存区域存储数据,使用栈顶指针指向栈顶。栈底地址固定,栈顶随着操作变化。
- 定点数
- 数据计算
- 先行进位加法器
- 加法计算公式为 ,。
- 定义进位产生函数为 ,进位传递函数为 ,则 。
- 单级先行进位加法:展开 。
- 理论上可以完全展开到 ,延迟为 ,但是逻辑门数量爆炸。
- 一般仅部分展开。
- 多级先行进位加法:
- 溢出判断
- 单符号位:
- 运算前两数均为正数,运算后结果为负数,则发生正溢。
- 运算前两数均为负数,运算后结果为正数,则发生负溢。
- 双符号位/变形补码:两个符号位,正常的数两者相等。高位的那个符号位代表真正的符号,低位的符号位若与高位不同,则溢出。
- 进位位:
- 符号位不产生进位、最高有效位产生进位,则发生正溢。
- 符号位产生进位、最高有效位不产生进位,则发生负溢。
- 单符号位:
- Booth 乘法
- 给定两个小数点后 位的定点数 ,计算得到小数点后 的定点数。
- 使用的寄存器:
- :初始化为 ,最终会存放乘法的高 位。
- :存放 ,不变。
- :初始化为 ,最终会存放乘法的低 位。
- 计算过程:
- 和 排在一起, 在高, 在低。 最后额外补一个 。
- 根据连接的数字串最后两位( 的最后一位和额外一位)确定操作:
- 或 : 不变。
- : 加上 。
- : 加上 的相反数,即按位取反后加 。
- 、 和额外一位整体右移一位。
- 循环进行操作,相加 次,移位 次。

- 补码加减交替除法
- 给定两个小数点后 位的定点数 ,计算得到两个小数点后 的定点数商 和余数 。
- 使用的寄存器:
- :初始化为 ,存放初始的被除数、部分余数、最后的余数。
- :存放 ,不变。
- :初始化为 ,最后存放商。
- 计算过程:
- 根据当前部分余数的符号,选择加除数或加除数的相反数:
- 需要满足部分余数与选择的除数的符号相反。
- 相加后得到新的部分余数,与除数比较符号,确定上商:
- 若新部分余数与除数符号相同,商的最低位写 。
- 若新部分余数与除数符号不同,商的最低位写 。
- 、 整体左移一位。
- 循环执行,重复 次加法,重复 次移位。按照上面的规则上商 次,最后一次上商固定为 。
- 根据当前部分余数的符号,选择加除数或加除数的相反数:

- 浮点数加减
- 对齐阶码,小阶扩大为大阶。
- 对阶后尾数加减。
- 规格化结果:
- 两个符号位相同,符号与最高有效位不同 、:已经规格化。
- 两个符号位相同,符号与最高有效位相同同 、:未规格化,需要左移。
- 两个符号位不同 、:看似溢出,其实是未规格化,需要右移。
- 阶码溢出:
- 上溢:真正的溢出。
- 下溢:视为 。
- 浮点数乘法
- 阶码相加,尾数相乘。
- 特别需要考虑阶码用移码表示的情况,需要额外减去一个偏置值。
- 当 时,需要左移规格化一次。
- 浮点数除法
- 调整尾数,确保 ,不满足时只需右移 、增加 一次完成。
- 阶码相减,尾数相除。
- 规格化。
- 先行进位加法器
- ALU 设计
- 主要考虑加法器设计。
- 三级分组先行进位加法器:


