访问嵌入式 X86 汇编中的特定位

Que*_*tin 2 x86 assembly inline-assembly visual-studio-2010

我正在尝试访问特定位并修改它。我已将 0x01ABCDEF(十六进制值)移至 ecx 中,并希望能够检查特定位置的位值。例如,我必须取 0x01ABCDEF (0xEF) 的字节 0 检查位置 7 处的位是否为 1,将中间 4 位设置为 1,其余设置为 0。

GJ.*_*GJ. 5

在 x86 下,最简单的解决方案是使用位操作指令,例如 BT(位测试)、BTC(位测试和补码)、BTR(位测试和重置)和 BTS(位测试和设置)。

位测试示例:

mov      dl, 7      //test 7th bit
bt       ecx, edx   //test 7th bit in register ecx 
Run Code Online (Sandbox Code Playgroud)

请记住:仅使用寄存器 edx 中的最后 5 位。

或者

bt       ecx, 7
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,结果都存储在进位标志中。