x86 中的 BEXTR 指令如何工作

cap*_*nux 2 x86 assembly bit-manipulation

正如标题中提到的,我在 x86 汇编上遇到了 BEXTR(位提取)指令,但我似乎无法理解它是如何工作的。

在网上查找了一段时间后,我什至找到了一个假定的 C 等效项(src >> start) & ((1 << len) -1),但我似乎也无法真正理解。

谁能向我解释一下 BEXTR 指令是如何工作的?这些位是如何提取的?

Nat*_*dge 10

图片可能会有所帮助。假设起始位是 5,长度是 9。那么如果我们有

Input : 11010010001110101010110011011010 = 0xd23aacda
                          |-------|
                              \
                               \
                                \
                                 v
                               |-------|
Output: 00000000000000000000000101100110 = 0x00000166
Run Code Online (Sandbox Code Playgroud)

所需的位块进入输出的最低有效位,输出的其余位变为 0。