如果有人帮助我理解以下代码,我将不胜感激
谢谢您

if (iins->uInstr.mnemonic == UD_Ipop)
    regsUsed = (regsUsed & ~(LYNX_ESP | LYNX_SP));

最佳答案

如果助记符UD_Ipop则不使用LYNX_ESPLYNX_SP寄存器。
再多一点:
LYNX_ESPLYNX_SP的值只有一个位集。假设LYNX_ESP0x01并且LYNX_SP0x02

(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_SPregsUsed的位,并保持其他位不变。

关于c - 了解给定的代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12500741/

10-14 12:34