0x01 逻辑指令简介
和 C 语言类似,逻辑运算可以有常见的与或非、移位的相关指令。
0x02 与或非指令
and 指令,即为与指令。
or 指令,即为或指令。
xor 指令,即为异或指令。
not 指令,即为非指令。
test 指令,将两个操作数相与,其结果并不保存(and 指令保存结果),并根据结果是否为 0 修改 ZF 标志位。
0x03 移位指令
在汇编中移位命令有很多,左移右移都有不同的类型。
一、左移
左移有 SHL(逻辑左移)、SAL(算术左移) ,两者都是左移,都使用 0 来填充移位产生的空位。两者没有区别。
左移还有 ROL(循环左移)、RCL(带进位循环左移),循环左移,顾名思义循环着左移的;带进位的循环左移,即移位产生的 “ 溢出 ” 位移入 CF 中,原 CF 中的值移入数中。
二、右移
右移有 SHR(逻辑右移)、SAR(算术右移),算术右移产生的位置使用符号位填充;逻辑右移使用 0 填充。
右移还有 ROR(循环右移)、RCR(带进位循环右移),类似于左移的循环与带进位循环。