BSF操作码不起作用

| 我使用的是Visual Studio 2010 Professional,我只是在调试模式下检查BSF无法正常工作,所以尝试了很多组合,但没有一种有效!
__asm
{   
    mov ebx, 0ffffffh;
    bsf ecx, ebx;
};
上面的代码至少给了我一些结果,但是我在ecx寄存器上得到了0(我使用的是64位win7,应用程序是32位) 英特尔对BSF的评价如下:   搜索源操作数(第二个   最低有效集的操作数)   位(1位)。如果最低有效1   找到位,存储其位索引   在目标操作数中(第一个   操作数)。源操作数可以是   注册或存储位置;的   目标操作数是一个寄存器。的   位索引是相对于的无符号偏移   源操作数的位0。如果   源操作数的内容为0,   目标操作数的内容   未定义。 有人有什么想法吗?谢谢你们...     
已邀请:
您将
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
    
不要使用内联asm,请使用编译器内部函数:
_BitScanForward
    

要回复问题请先登录注册