我目前正在为16位自定义微处理器编写软件。我需要能够处理大于16位的数字。指令集非常有限,但是左移,右移,AND,OR和NOT。我该如何实现这种算术?
答案 0 :(得分:2)
对于加法和减法,确实可以将溢出从一个单词带到另一个单词。对于乘法,http://en.wikipedia.org/wiki/Binary_multiplier中描述的技术是一个相当容易实现的技术,并且优于串行加法。一般来说,分工比较复杂,但一个好的起点是http://en.wikipedia.org/wiki/Division_algorithm#Integer_division_.28unsigned.29_with_remainder。
该除法算法实际上只是一个整数“长除法”。速度不是很快,但准确无误。这篇文章有更多涉及的方法,但它们......嗯,更多参与。可能会轻松搞定,然后看看你是否需要优化它。
另请查看http://en.wikipedia.org/wiki/Multiplication_algorithm。并且http://x86asm.net/articles/working-with-big-numbers-using-x86-instructions/在x86处理器上有关于多字算术的一些很好的信息,其中大部分应该适用于其他CPU。
自从我玩这个东西以来已经太久了。在Z80上完成了32位算术(很多年前),我知道你在这里遇到了什么。