繁体   English   中英

MIPS汇编中2个二进制数之间的位差

[英]Bit Difference between 2 binary numbers in MIPS Assembly

因此,我必须创建一个MIPS汇编程序,从2个寄存器($ s0和$ s1)中读取2个数字,并计算这2个数字相差的位数。 并将结果存储在$ s2寄存器中。 我还必须以尽可能少的命令完成上述所有操作。 我已经在XOR操作上尝试了一些事情,但我无法确定如何计算不同位的数量。

如果有人可以提供帮助,那么欢迎您。 提前致谢

将这些位进行异或,然后计算结果数中的位数。 为此,您可以遍历每个位,检查它是否已设置(通过使用位掩码和bitshift),然后递增计数器。

我有意留下这个含糊不清的内容,因为这是你要弄明白的。

这是一种避免在32位上循环的方法。 它重复清除所有位,但是最左边的位,同时计算它们的数量。

  // x and y are the bits to compare
  int z=x^y;  // only bits different between x and y are set
  int w;
  int cnt=0;
  while(w=z&-z) { //w only has the left bit in z set
    cnt++;
    z^=w; // clear the processed bit
  }

它是基于公知的属性, x&-x是等于在较低的权重设置的比特x

内循环需要5 mips指令。

使用无循环弹出计数代码的C示例:

    int x, y, z;
    // ...
    z = x^y;   // x and y are inputs
    z -= (z >> 1) & 0x55555555;                      // 16   2 bit counts
    z = (z & 0x33333333) + ((z >> 2) & 0x33333333);  //  8   4 bit counts
    z = (z + (z >> 4)) & 0x0f0f0f0f;                 //  4   8 bit counts
    z = (z * 0x01010101) >> 24;                      //  1  32 bit count

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM