assembly - 浮点加法汇编算法

标签 assembly floating-point addition signed picoblaze

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

我知道它可以处理正数,但是当也有负数时我不知道该怎么做。

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

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

最佳答案

通常(忽略像 NaN 这样的东西),对于 A = B + C :

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

  • 如果 BC有不同的符号,否定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必须具有“大于或等于”量级。

  • 如果 BC有不同的符号,否定C并做 add_internal ;否则做 subtract_internal .

关于assembly - 浮点加法汇编算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56674027/

相关文章:

Python:在循环中对变量执行用户定义的加法

assembly - 使用gdb作为监视器?

assembly - 二进制如何转换为硬件?

algorithm - ARM整数除法算法

c - 浮点舍入效果说明

python-3.x - 如何将数据类型更改为 float64 以便 sklearn 可以在数据大于 np.float32 的数据帧上工作

c - 为什么 float 相乘没有错误?

java - 在 Java 中添加多个对象到列表时遇到问题

python - 添加程序不起作用

c++ - 英特尔®事务同步扩展新指令(TSX-NI)与英特尔TSX有区别吗?