据传说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; }
据传说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; }
本文链接:https://twd2.me/archives/4933
你确定你的处理器支持?
这个指令编码时和BSR一样,只是多了个前缀,遇到不支持的处理器,就是你这现象