Arduino를 사용하여 어셈블리에서 두 개의 8 비트 값 중 8 비트 평균을 계산하는 컴퓨터 과학 수업을위한 Atmel AVR 어셈블리에 함수를 작성해야합니다. 분기 명령을 사용하는 것은 허용되지 않습니다 (건너 뛸 수 있음). 어셈블리에서 두 개의 8 비트 값 중 8 비트 평균을 계산하려면 어떻게합니까?
이
내가 지금까지 무엇을 가지고 : 그것은 반환, 내가 69과 60의 평균을 계산해야 내 프로그램의 일부를 들어.global average
average:
add r24, r22
asr r24
ret
-64 (64)는 누구나 알고 있나요 대신 어떻게 이 기능을 작동하게 만들까요? 어떤 도움이라도 대단히 감사 할 것입니다.
정수 오버플로/회피를 피하면서 평균을내는 트릭 : http://stackoverflow.com/a/3816471/224132. 나는 오버플로없이 정수 평균을 찾아서 잠깐 후에 발견했습니다. 트릭을 알고 있었지만 기억할 수 없었기 때문입니다. 그것은 아마 서명 2뿐만 아니라 서명되지 않은 작동하지만, 확인하지 않았다. 원하는 경우 Google 검색 용어에 '서명 됨'을 입력하십시오. –
내가 연결 한 대답은 서명 된 사람에게만 적용됩니다. 가장 높은 점수를 얻은 답변은 필요하지 않지만 ADD 및 ROR보다 많은 작업을 필요로합니다. 어쨌든 이것은 정수 트릭을 찾을 때 AVR asm으로 제한하지 않는다는 것을 보여줍니다. C에서는 AVR에 직접 구현하거나 컴파일러에 피드를 제공하고 어떻게 수행하는지 볼 수있는 많은 것을 찾을 수 있습니다. 예 : 이 중 일부는 유용합니다. https://graphics.stanford.edu/~seander/bithacks.html –