Ссылка, которую дал Крис, дает несколько хороших методов подсчета битов. Я бы предложил этот метод , так как он очень быстрый и не требует зацикливания, а только побитовой операции, что было бы проще сделать при сборке.
Еще один способ получить код сборки - это создать код на C, скомпилировать его и затем посмотреть на выходную сборку (большинство компиляций может выводить файл сборки (-S для gcc, но обязательно отключите оптимизацию с помощью -O0, чтобы получить более легкий для понимания кода), или позволяет просматривать двоичный файл в разобранном виде). Это должно указать вам правильное направление.
Как анекдот, я некоторое время назад проводил тестирование на PowerPC (не MIPS, я знаю ...) для самого быстрого способа подсчета битов в 32-битном int. Метод, который я связал, был лучшим из всех других методов, пока я не сделал справочную таблицу размером в байт и обратился к ней 4 раза. Казалось бы, ALU медленнее, чем ссылка на кеш (работает около миллиона чисел по алгоритму).