我对汇编Mips编程很新,我感觉在C中更加舒适,但我想学习这门语言。
我正在考虑一个计算二进制数1的程序。例如,字母“e”的十字形代码是0x65,二进制0b1100101。 我的程序如果收到字母“e”作为输入,在输出中将有十进制的“4”,这是“e”的二进制1的数量。
我认为我需要逻辑按位指令,因为我不使用字节而是使用单个位。 任何人都可以帮我解决这个问题吗?非常感谢你。
答案 0 :(得分:2)
如果我记得很清楚,在整数中将位数计为1的最快方法是SWAR算法:
int swar(uint32_t i) {
i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
return (((i + (i >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
}
您可以通过搜索适当的MIPS指令进行逻辑转换,等等来将其转换为汇编...