BSF操作码不起作用

MCA*_*MCA 2 c++ x86 assembly visual-studio-2010

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

__asm
{   
    mov ebx, 0ffffffh;
    bsf ecx, ebx;
};
Run Code Online (Sandbox Code Playgroud)

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

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

在源操作数(第二个操作数)中搜索最低有效位设置位(1位).如果找到最低有效1位,则其位索引存储在目标操作数(第一个操作数)中.源操作数可以是寄存器或存储器位置; 目标操作数是一个寄存器.位索引是源操作数的位0的无符号偏移量.如果源操作数的内容为0,则目标操作数的内容未定义.

有人有什么想法吗?谢谢你们...

pax*_*blo 15

您将被ecx设置为0,因为值中最低有效(最少?)的1位0xffffff 位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
Run Code Online (Sandbox Code Playgroud)

  • +1,部分是为了正确答案(我相信),但主要是为了发明"最少"这个词...... ;-) (2认同)
  • @MCA:是的,我做到了.你抱怨它说0xffffff中最右边的1位是0位.我不确定_why_你是在抱怨,因为那确实是正确的价值.如果你想以一种不那么迟钝的方式告诉我你认为我错在哪里,我会很乐意重新审视答案. (2认同)