学习:逻辑指令

AND指令:与运算

A B C
1 0 0
0 1 0
0 0 0
1 1 1

1、当前汇编指令为and edx,ecx
2、当前ecx寄存器中的地址值为00000000,edx寄存器中的地址值11111111
3、单步步过

可以发现edx的值变为了00000000,原因是edx和ecx进行与运算,结果赋值给了edx寄存器中的地址值


OR指令:或运算

A B C
1 0 1
0 1 1
0 0 0
1 1 1

1、当前汇编指令为and edx,ecx
2、当前ecx寄存器中的地址值为11111111,edx寄存器中的地址值00000000
3、单步步过

发现结果edx中的地址为11111111,原因是进行了或运算 00000000 00000000 00000000 00000000 和 11111111 11111111 111111111 11111111 或运算结果自然是 11111111 11111111 11111111 11111111


XOR指令:异或运算

A B C
1 0 1
0 1 1
0 0 0
1 1 0

1、当前汇编指令为xor edx,ecx
2、当前ecx寄存器中的地址值为00000011,edx寄存器中的地址值00000000
3、单步步过

发现edx寄存器中的值也为00000011,原因是00000000 00000000 00000000 00010001 和 00000000 00000000 00000000 00000000

那么xor运算结果为00000000 00000000 00000000 00010001 转换为十六进制同样也就是00000011了


not指令:取反

A B
1 0
0 1

1、当前汇编指令为not ecx
2、当前ecx寄存器中的地址值为00000011
3、单步步过

结果发现ecx中的值为FFFFFFEE,原因 00000011的二进制为00000000 00000000 00000000 00010001,那么取反的话就是11111111 11111111 11111111 11101110也就是FFFFFFEE

原文地址:https://www.cnblogs.com/zpchcbd/p/12050190.html