汇编 - 提取特定位

Assembly - extract specific bit

我想从我的 32 位 (int) 值中提取第 17 位。我这样做对吗?我正在使用 AT&T 语法。

movl [=10=]x11112222,%eax   
movb [=10=]b01000000,%bl
andb %ah,%bl

我把32位数字放到32位寄存器中。现在第 17 位在 ah 寄存器中(以及其他 16-23 位)。现在它是 ah 寄存器中的第二位,我创建了一个 "mask"。然后我在做和操作。 我的想法对吗?

一般的想法是可行的,但是你有错误的常量和错误的字节。您的掩码应该是 0b000000100000000000000000(或更易读的 0x20000)并且您应该使用 32 位掩码,因为您无法访问具有 16-23 位的字节。你错误地指出那些住在 %ah,但这是错误的,因为 %ah 有位 8-15。

此外,此操作会将位保留在原位。根据您的具体需要,您可以将整个 eax 右移 17,然后保留最低有效位。