我使用的是Visual 2010专业版,我只是在调试模式下检查BSF不工作--我尝试了很多组合,它们都没有工作!
__asm
{
mov ebx, 0ffffffh;
bsf ecx, ebx;
};上面的代码至少给了我一些结果,但我在ecx寄存器上得到了0(我使用64位win7,应用程序是32位)
以下是英特尔对BSF的看法:
在源操作数(第二个操作数)中搜索最小有效集位(1位)。如果找到最不重要的1位,则其位索引存储在目标操作数(第一个操作数)中。源操作数可以是寄存器或内存位置;目标操作数是寄存器。位索引是源操作数位0的无符号偏移量。如果源操作数的内容为0,则目标操作数的内容未定义。
有人有想法吗?谢谢大家..。
发布于 2011-04-15 13:12:46
您将ecx设置为0,因为值0xffffff中最不重要的1位是位0。它的二进制数是0000 .... 1111 1111 1111 1111 1111 1111。
换句话说,你看到的结果是正确的。
例如,如果要在0xfc上尝试(二进制1111 1100),则应该得到2。这是因为最不重要的位位于二进制数的最右边:
Hex F C
Binary 1111 1100
Bit# 7654 3210
^
|
+-- rightmost (least significant) 1-bit发布于 2011-04-15 13:28:29
不要使用内联asm,使用编译器本质:_BitScanForward
https://stackoverflow.com/questions/5677221
复制相似问题