据传说lzcnt指令”说明书是说计算最前面的1的前面的0的数目”, 然后经过实验发现, “但是现在这个指令好像变成了计算最前面的1的位置”。
对于零, 好像不会修改目标寄存器。
#include<iostream>
using namespace std;
int lzcnt(unsigned int n)
{
__asm(
"lzcnt 8(%esp),%eax\n"
);
}
int main()
{
cout<<lzcnt(65536)<<endl;
return 0;
}

你确定你的处理器支持?
这个指令编码时和BSR一样,只是多了个前缀,遇到不支持的处理器,就是你这现象