BSF操作码不起作用

时间:2011-04-15 13:07:33

标签: c++ visual-studio-2010 assembly x86

我正在使用Visual Studio 2010专业版,我刚刚在调试模式下检查过BSF无法正常工作我尝试了很多组合,但没有一个能够工作!

__asm
{   
    mov ebx, 0ffffffh;
    bsf ecx, ebx;
};

上面的代码至少给了我一些结果,但我在ecx寄存器上得到0(我使用的是64位win7,应用程序是32位)

以下是英特尔关于BSF的说法:

  

搜索源操作数(第二个   操作数)用于最不重要的集合   位(1位)。如果最不重要1   找到位,存储其位索引   在目标操作数中(第一个   操作数)。源操作数可以是a   寄存器或存储位置;该   目标操作数是一个寄存器。该   位索引是一个无符号偏移量   源操作数的第0位。如果   源操作数的内容为0,   目标操作数的内容   未定义。

有人有什么想法吗?谢谢大家...

2 个答案:

答案 0 :(得分:15)

您将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

答案 1 :(得分:4)

不要使用内联asm,请使用编译器内在函数:_BitScanForward