使用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 –