首页 > 解决方案 > 浮点加法组装算法

问题描述

我正在尝试为 picoblaze 微控制器编写二进制 8 位浮点加法算法(1 个符号位、4 个指数位和 3 个尾数位)

我让它与正数一起工作,但当也有负数时我不知道该怎么做。

我的主要问题是设置结果的符号位,有人可以解释如何正确设置吗?

我的想法是检查两个数字的符号;然后如果它们都是正数,则将符号设置为 0,如果它们都是负数,则将符号设置为 1,并使用与之前相同的方法进行加法,如果一个是负数,一个是正数,则比较数字并使用较大的一个符号位,但我不知道如何比较这两个数字,代码变得有点混乱,有没有更好的方法呢?

标签: assemblyfloating-pointadditionsignedpicoblaze

解决方案


一般来说(忽略 NaN 之类的东西),对于A = B + C

  • ifC的量级大于B, 交换BC这样你就知道它B必须具有“更大或相等”的量级。注意:幅度忽略符号位(例如,-6 的幅度大于 +4,因为 6 > 4)。

  • ifBC有不同的符号,否定C和做subtract_internal;否则做add_internal

  • 对于subtract_internal,忽略符号位,减去幅度(不要忘记B必须具有“更大或等于”幅度),然后将符号设置为A等于B或的符号C(无论如何它们将具有相同的符号)。

  • 对于add_internal,忽略符号位,添加幅度,然后将符号设置为A等于B或的符号C(无论如何它们将具有相同的符号)。

此外,一般来说(忽略 NaN 之类的东西),对于A = B - C

  • 如果C幅度大于B,则交换BC否定它们(例如A - C == (-C) - (-A)),以便您知道它B必须具有“更大或相等”的幅度。

  • ifBC有不同的符号,否定C和做add_internal;否则做subtract_internal


推荐阅读