我想从我的32位(int)值中提取第17位。我这样做了吗?我正在使用AT& T语法。
movl $0x11112222,%eax
movb $0b01000000,%bl
andb %ah,%bl
我将32位数放入32位寄存器。现在第17位是啊寄存器(以及其他16-23位)。现在因为它是寄存器中的第二位,我创建了一个"掩码"。然后,我正在做和操作。 我在想这个吗?
答案 0 :(得分:2)
一般的想法可行,但你有错误的常量和错误的字节。您的掩码应该是0b000000100000000000000000
(或更可读0x20000
)并且您应该使用32位掩码,因为您无法使用16-23位访问该字节。您错误地将这些内容置于%ah
中,但这是错误的,因为%ah
有8-15位。
此外,此操作将使位保持不变。根据您的具体需要,您可以将整个eax向右移动17,然后保持最低位。