如何使用MIPS汇编查找二进制数的宽度

如何使用MIPS汇编查找二进制数的宽度,mips,Mips,假设我想计算9的宽度,它是二进制的1001 宽度应该是4 另一个例子是 0010000100010101宽度应为15 一般的概念是找到MSB和LSB,最好是从LSB到MSB并计数。请使用没有伪指令的MIPS汇编语言 到目前为止: #assume $1 holds 1, $2 holds the number that we want to find the width loop: and $3, $2, $1 #and with 1 until we find the lsb srl $2,

假设我想计算9的宽度,它是二进制的
1001

宽度应该是4

另一个例子是
0010000100010101
宽度应为15

一般的概念是找到MSB和LSB,最好是从LSB到MSB并计数。请使用没有伪指令的MIPS汇编语言

到目前为止:

#assume $1 holds 1, $2 holds the number that we want to find the width

loop:
and $3, $2, $1 #and with 1 until we find the lsb
srl $2, $2, 1 #shift right

#keep looping till we find lsb, then start counting till msb


一些处理器通过查找单词中的第一个来帮助实现这一点,但其他处理器则没有

对于无符号数字,因为我们需要先从MSB开始查找,然后再从低位开始查找,从计数32开始,然后向下.Loop,只要我们还没有找到
1
,寻找高位集(即,当解释为有符号时<0),如果没有,则计数-1,并将数字向左移动1。当找到
1
时,你有这个号码的~log2

如果要对有符号的数字执行此操作,可以查看该数字是否为正数,然后执行上述操作,否则将该数字取反并执行正数版本