逆向随笔 - 位运算

来源:互联网 发布:手机跑分软件 编辑:程序博客网 时间:2024/05/23 00:19

一、算术移位运算


       算术左移 (shift arithmetic left)  

       SAL reg/mem, CL/Imm

       每位左移, 低位补 0, 高位进 CF

       例如: 0100 0101  CF=0  算术左移3位

       1 ->     1000 1010  CF = 0

       2 ->     0001 0100  CF = 1

       3 ->     0010 1000  CF = 0

‭ 

       算术右移 (shift arithmetic right)  

       SAR reg/mem, CL/Imm

       每位右移, 高位补符号位,  低位进 CF

       例如: 1100 0101  CF=0  算术右移3位

       1 ->     1110 0010  CF=1

       2 ->     1111 0001  CF=0

       3 ->     1111 1000  CF=1

 


二、逻辑移位运算


       逻辑左移(shift logical Left

       SHL reg/mem, CL/Imm

       每位左移, 低位补 0, 高位进 CF

       例如: 0100 0101  CF=0  算术左移3位

       1 ->     1000 1010  CF = 0

       2 ->     0001 0100  CF = 1

       3 ->     0010 1000  CF = 0

       

       逻辑右移 (shift logical right)  

       SHR reg/mem, CL/Imm

       每位右移, 高位补0,  低位进 CF

       例如: 1100 0101  CF=0  逻辑右移3位

       1 ->     0110 0010  CF=1

       2 ->     0011 0001  CF=0

       3 ->     0001 1000  CF=1




三、循环移位运算


       循环左移rotate left

       ROL reg/mem, CL/Imm

       每位左移, 高位填充到低位, 高位进 CF

       例如: 0100 0101  CF=0  循环左移3位

       1 ->     1000 1010  CF = 0

       2 ->     0001 0101  CF = 1

       3 ->     0010 1010  CF = 0

       

       循环右移 (rotate right)  

       ROR reg/mem, CL/Imm

       每位右移, 低位填充到高位, 低位进 CF

       例如: 1100 0101  CF=0  循环右移3位

       1 ->     1110 0010  CF=1

       2 ->     0111 0001  CF=0

       3 ->     1011 1000  CF=1


 

四、带进位循环移位运算


       带进位循环左移rotate through carry left

       RCL reg/mem, CL/Imm

       每位左移, CF填充到低位, 高位进 CF

       例如: 0100 0101  CF=0  带进位循环左移3位

       1 ->      1000 1010  CF = 0

       2 ->      0001 0100  CF = 1

       3 ->      0010 1001  CF = 0

       

       带进位循环右移 (rotate through carry right)  

       RCR reg/mem, CL/Imm

       每位右移, CF填充到高位, 低位进 CF

       例如: 1100 0101  CF=0  带进位循环右移3位

       1 ->      0110 0010  CF=1

       2 ->      1011 0001  CF=0

       3 ->      0101 1000  CF=1



0 0