添加16位数字,查找表,二进制加法还是简单加法的最有效方法?

时间:2015-07-13 18:10:38

标签: c binary addition msp430

我正在尝试为我正在尝试构建的MSP-430模拟器编写 ADD 函数。

我想知道添加两个16位数字的查找表是否是有效检索结果的可行解决方案。我想要实现的替代方法是二进制加法循环,它逐个添加位或简单的十进制加法。我需要能够确定标志和进位(如果有的话)。

可以找到微控制器上的任何规格here

1 个答案:

答案 0 :(得分:1)

您可以使用简单的32位,2-s补码算法。假设srcdst存储在uint32_t的低16位中,以下代码序列模拟ADD指令:

uint32_t xor = src ^ dst;
dst += src;
flags.N = (dst >> 15) & 1;
flags.C = (dst >> 16) & 1;
flags.V = ((~xor & (src ^ dst)) >> 15) & 1;
dst &= 0xFFFF;
flags.Z = (dst == 0);

添加本身的结果可以通过简单地取32位加法的低16位来获得。 N,Z和C标志也很容易计算。 (签名)溢出标志V更棘手。该代码基本上测试了srcdst的符号在添加之前是否相等,之后是不同的。