使用Arduino,我必须在我的计算机科学类Atmel AVR Assembly中编写一个函数,计算汇编中两个8位值的8位平均值。我也不允许使用任何分支指令(但跳过也没问题)。如何计算汇编中两个8位值的8位平均值?
这是我到目前为止有:
.global average
average:
add r24, r22
asr r24
ret
我的程序的一部分,我必须计算的69和60的平均,它返回-64而不是64有谁知道我会使这个功能有效吗?任何帮助将非常感激。
避免整数溢出/环绕的平均技巧:http://stackoverflow.com/a/3816471/224132。我在一分钟之内通过搜索'没有溢出的整数平均值'找到了,因为我知道那里*是一个技巧,但是不记得它。它可能适用于有符号2的补码以及未签名,但我没有检查。如果需要,可以将'signed'放入Google搜索字词中。 –
请注意,我链接的答案只适用于未签名,如果你知道他们在什么顺序。最高票数的答案不需要,但需要比ADD和ROR更多的操作。无论如何,这只是表明,当寻找整数技巧时,不要将自己限制在AVR asm。你会在C中找到很多东西,你可以在AVR中自己实现,甚至可以提供给编译器,看看它是如何实现的。例如其中一些是有用的:https://graphics.stanford.edu/~seander/bithacks.html –