如果有人帮助我理解以下代码,我将不胜感激
谢谢您
if (iins->uInstr.mnemonic == UD_Ipop)
regsUsed = (regsUsed & ~(LYNX_ESP | LYNX_SP));
最佳答案
如果助记符UD_Ipop
则不使用LYNX_ESP
和LYNX_SP
寄存器。
再多一点:LYNX_ESP
和LYNX_SP
的值只有一个位集。假设LYNX_ESP
是0x01
并且LYNX_SP
是0x02
。
(LYNX_ESP | LYNX_SP) -> (0x01 | 0x02) -> 0x03 (00000011b)
~(LYNX_ESP | LYNX_SP) -> 0xfc (11111100b)
regsUsed can be anything; ????????b
(regsUsed & ~(LYNX_ESP | LYNX_SP)) -> (????????b & 11111100b) -> ??????00b
因此,它关闭
LYNX_ESP
中表示LYNX_SP
和regsUsed
的位,并保持其他位不变。关于c - 了解给定的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12500741/