C++ BSF操作码不工作
我使用的是Visual Studio 2010 professional,我刚刚在调试模式下检查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 找到位后,将存储其位索引 在目标操
__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位。我不知道你为什么抱怨,因为这确实是正确的价值观。如果你想以一种不那么迟钝的方式告诉我你认为我错在哪里,我很乐意重新审视答案。哦,是的,你是对的:)我想我太累了,看不到那一点!你应该说结果是正确的:)