导读:
bsfl汇编指令:
intel汇编指令:bsf oprd1,oprd2;
顺向位扫描(bit scan forward)
从右向左(从位0-->位15或位31)扫描字或双字操作数oprd2中第一个含"1"的位,并把扫描到的第一个含'1'的位的位号送操作数oprd1
AT&T格式汇编指令bsfl类似bsf,只是源操作数和目的操作数顺序相反。
比如网上有一个类似语句的分析:
.__asm__("bsfl %1,%0/n/t"
"jne 1f/n/t"
"movl $32, %0/n"
"1:"
: "=r"(set)
:"r"(~ (*p >> bit)));
进入汇编指令前的初始条件:
p:指向offset所指向的起始位所处的那个unsigned long型4B双字的开始处。
bit: offset所指向的起始位位于所处在的那个unsigned long型4B双字中的第几位。
*p >> bit : 将指向offset所指向的起始位所处的那个unsigned long型4B双字的开始处的指针右移bit位,即:将offset所指向的起始位前面的位全部移出去,而将offset所指向的起始位右移到了最右端(最低位,0位),该起始位成了
bsfl汇编指令:
intel汇编指令:bsf oprd1,oprd2;
顺向位扫描(bit scan forward)
从右向左(从位0-->位15或位31)扫描字或双字操作数oprd2中第一个含"1"的位,并把扫描到的第一个含'1'的位的位号送操作数oprd1
AT&T格式汇编指令bsfl类似bsf,只是源操作数和目的操作数顺序相反。
比如网上有一个类似语句的分析:
.__asm__("bsfl %1,%0/n/t"
"jne 1f/n/t"
"movl $32, %0/n"
"1:"
: "=r"(set)
:"r"(~ (*p >> bit)));
进入汇编指令前的初始条件:
p:指向offset所指向的起始位所处的那个unsigned long型4B双字的开始处。
bit: offset所指向的起始位位于所处在的那个unsigned long型4B双字中的第几位。
*p >> bit : 将指向offset所指向的起始位所处的那个unsigned long型4B双字的开始处的指针右移bit位,即:将offset所指向的起始位前面的位全部移出去,而将offset所指向的起始位右移到了最右端(最低位,0位),该起始位成了