汇编 - 提取特定位

时间:2015-05-04 20:31:13

标签: assembly x86 gas att

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

movl $0x11112222,%eax   
movb $0b01000000,%bl
andb %ah,%bl

我将32位数放入32位寄存器。现在第17位是啊寄存器(以及其他16-23位)。现在因为它是寄存器中的第二位,我创建了一个"掩码"。然后,我正在做和操作。 我在想这个吗?

1 个答案:

答案 0 :(得分:2)

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

此外,此操作将使位保持不变。根据您的具体需要,您可以将整个eax向右移动17,然后保持最低位。