计算设置的位数

csg*_*y11 6 assembly mips hammingweight

我想计算设置的二进制数中的位数。例如,用户输入数字 97,二进制表示为 01100001。该程序应该告诉我 3 位是使用 MIPS ISA 设置的。

我能够用 C 实现这一点,但我不知道如何使用汇编代码实现它。

Chr*_*ich 6

您要查找的内容通常称为人口计数 (popcount)。

Bit Twiddling Hacks有许多 C 实现(其中一些非常聪明)。如果您熟悉 C,每种方法在分解表达式后都应该有一个合理的 MIPS 汇编转换。

如果您的输入域很小(例如0-255),您始终可以执行查找表并使用输入作为偏移量来直接获取popcount。