Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ BSF操作码不工作_C++_Visual Studio 2010_Assembly_X86 - Fatal编程技术网

C++ BSF操作码不工作

C++ BSF操作码不工作,c++,visual-studio-2010,assembly,x86,C++,Visual Studio 2010,Assembly,X86,我使用的是Visual Studio 2010 professional,我刚刚在调试模式下检查BSF不起作用我尝试了很多组合,但都不起作用 __asm { mov ebx, 0ffffffh; bsf ecx, ebx; }; 上面的代码至少给出了一些结果,但我在ecx寄存器上得到了0(我使用的是64位win7,应用程序是32位的) 以下是英特尔对BSF的看法: 搜索源操作数(秒) 最低有效集的操作数) 位(1位)。如果最小有效值为1 找到位后,将存储其位索引 在目标操

我使用的是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。。。。1111111111111111111111111111111111111

换句话说,你看到的结果是正确的

例如,如果您要在
0xfc
上尝试它(二进制
1111100
),您应该得到2。这是因为最低有效位位于二进制数的最右边位置:

Hex        F    C
Binary   1111 1100
Bit#     7654 3210
               ^
               |
               +-- rightmost (least significant) 1-bit

不要使用内联asm,使用编译器内部函数:

+1,部分是为了正确答案(我相信),但主要是为了发明“leastmost”这个词;-)@麦卡:是的。您正在抱怨它说0xffffff中最右边的1位是0位。我不知道你为什么抱怨,因为这确实是正确的价值观。如果你想以一种不那么迟钝的方式告诉我你认为我错在哪里,我很乐意重新审视答案。哦,是的,你是对的:)我想我太累了,看不到那一点!你应该说结果是正确的:)