问题描述
我正在组装(MIps32),需要根据用户决定计算0的 OR 1的数量。 (即我事先不知道哪个)
需要该程序执行自上而下的操作,以便不允许控制流。
示例1 :
数字的二进制代表:00001010
用户选择:0
answer:6
Example2 :
数字的二进制代表:00001010
用户选择:1
answer:2
如果我事先知道哪一个,我就知道如何使用位掩码来计算两者的总数。但是,我完全迷失了如何获取任何一个的信息,而无需事先知道哪个。
解决方法
因此,假设您知道如何计算0的数量。一种方法是,如果用户想要1,则在对0计数之前对数字进行补码(按位非)。
实现后者的一种方法是通过与-1(以二进制补码表示,因此全为1)进行XOR。如果否定用户选择的0或1,则得到0或-1,并且与0的XOR不会影响数字。因此,在C语言中,这看起来像是
result = count_zeros(number ^ -choice)
我不知道MIPS指令集,所以我会把它留给你用汇编语言编写。
(如果这是一项作业,请记住在提交的内容中引用此答案。)