Assembly Atmel studio程序集:8位数字的平方根

Assembly Atmel studio程序集:8位数字的平方根,assembly,atmega,atmel,atmelstudio,Assembly,Atmega,Atmel,Atmelstudio,我在Atmel Studio中使用ATmega328P,我必须制作一个函数/算法,它采用8位数字并计算其平方根。结果必须在两个寄存器中给出,一个用于整数部分,另一个用于小数部分 我在想:根必须在给定的数字和0(或1)之间。所以我将lsr(除以2),它将检查它是否更大、更小或相等,然后以更高的精度重试,因此它将变得越来越精确 问题是整数是不正确的,我不知道如何将其编码,因为我是汇编新手。我也可以发布到目前为止我所做的 感谢您的建议和帮助。为了完整(或毫无意义的展示),这里介绍了如何通过线性搜索(在

我在Atmel Studio中使用ATmega328P,我必须制作一个函数/算法,它采用8位数字并计算其平方根。结果必须在两个寄存器中给出,一个用于整数部分,另一个用于小数部分

我在想:根必须在给定的数字和0(或1)之间。所以我将lsr(除以2),它将检查它是否更大、更小或相等,然后以更高的精度重试,因此它将变得越来越精确

问题是整数是不正确的,我不知道如何将其编码,因为我是汇编新手。我也可以发布到目前为止我所做的

感谢您的建议和帮助。

为了完整(或毫无意义的展示),这里介绍了如何通过线性搜索(在大多数情况下,0-15值的搜索速度比使用乘法的二进制搜索速度更快)仅使用整数而不使用乘法来完成任务

root=-1
平方=0
addValue=1

而(square
(10 256字节长的结果查找表如何?(嗯,更像512B长,因为小数部分…是定点数学8:8吗?我猜)(如果小数只有256B,整个部分可以通过一个循环简单+缓慢地完成)遗憾的是,这是一个和分配,我必须计算它,否则这将是一个可行的选择,但感谢您的输入。尽管我将这样做作为最后手段,如果我不明白。(您建议制作一个程序,将插入的数字与256个结果进行比较,如果发现正确,则结束?)这取决于你需要的复杂度和精度。因为你只需要做一个从0到15的蛮力就可以覆盖整个8位无符号数范围。它可以通过二进制搜索argh进一步优化…这不是8:8定点,这是一些…在现实世界中不可用,但适合赋值的东西。在8:8定点中,第二个是8位(第二个寄存器)是1/256的量,即0=0.00,0x80=0.5,0x29=0.16015625,0xFF=0.99609375…可直接用于进一步的数学计算。0x17=23更适合输出,但由于它是1/100的量,所以它是在浪费位(精度较低),并且很难再用于进一步的二进制数学计算。您应该指定有问题的值如何拆分到寄存器中。
root = -1
square = 0
addValue = 1
while (square <= input) {
    square += addValue
    addValue += 2
    ++root
}
; here root == trunc(sqrt(input))