VMP 的逻辑运算只有一个或非, nor, 而不是什么与非
使用或非组合可以实现与, 或, 异或三个运算
# not eax
# not edx
# and eax, edx
def nor(a):
return ~(a | a)
def nor(a, b):
return ~a & ~b
def and(a, b):
# ~(~a | ~b) = a & b
return nor(nor(a), nor(b))
def or(a, b):
# ~(~(a | b)) = a | b
return nor(nor(a, b))
def xor(a, b):
# ~((~a & ~b) | (a & b))
return nor(nor(a, b), nor(nor(a), nor(b)))