assembly - x86中的BEXTR指令是如何工作的

标签 assembly x86 bit-manipulation

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

在网上找了一段时间后,我什至找到了一个假定的 C 等价物 (src >> start) & ((1 << len) -1)我似乎也不太明白。

任何人都可以向我解释 BEXTR 指令的工作原理吗?位是如何提取的?

最佳答案

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

Input : 11010010001110101010110011011010 = 0xd23aacda
                          |-------|
                              \
                               \
                                \
                                 v
                               |-------|
Output: 00000000000000000000000101100110 = 0x00000166

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

关于assembly - x86中的BEXTR指令是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70208751/

相关文章:

assembly - Intel 8086 汇编——寄存器平方

gcc - GNU 程序集内联 : what do %1 and %0 mean?

assembly - 与 Spectre #2 相比,LFENCE 真的没用吗?

assembly - 将格式化为 ASCII 的大十进制数(128 位)转换为二进制(十六进制)

c# - 检查一个字符是否等于多个其他字符,分支越少越好

c# - C# 中的无符号右移对负数使用 Java 语义

c++ - 启动一个程序,该程序会选择一个特定的 Ubuntu iso 并从中启动

c - 硬件进程是 "sandboxed"吗?

c - 如何摆脱 C 代码中的 gcc 汇编器警告 "setting incorrect section attributes for .init"?

hash - 如何在Go中实现HashCash的算法(类型转换问题)?