位运算

1.算术移位指令
指令格式:SAL/SAR Reg/Mem, CL/Imm                
    左边的操作数可以使寄存器或内存,右边的操作数可以是寄存器cl或立即数               
    SAL(Shift Arithmetic Left): 算术左移                
    SAR(Shift Arithmetic Right): 算术右移    
 
1)算术左移
左移一位,最高位存入cf,最低位补0;
例如:10000001左移一位    ->00000010
mov eax,0x81
sal eax,1
结果:
    eax=0x02,cf=1
 
2)算术右移
右移一位,最高位补符号位,最低位存入cf
例如:10000001右移一位    ->11000000
mov eax,0x81
sar eax,1
结果:
    eax=0xc0,cf=1 
 
2.逻辑移位指令
指令格式:SHL/SHR Reg/Mem, CL/Imm            
    SHL(Shift Left):      逻辑左移            
    SHR(Shift Right):      逻辑右移    
 
shl逻辑左移:最高位存入cf最低位补0;
shr逻辑右移:最低位存入cf,最高位补0;
 
3.循环移位指令
指令格式:ROL r/m, i8  ROR r/m, CL            
    ROL(Rotate Left):        循环左移            
    ROR(Rotate Right):       循环右移
 
循环左移rol:最高位的值拿出来放到最低位,cf放最后拿出来的那个值
循环右移ror:最低位拿出来放最高位,cf放最后拿出来的值
 
4.带进位循环移位指令
指令格式:RCL r/m, i8  RCR r/m, CL                
    RCL(Rotate through Carry Left):  带进位循环左移                
    RCR(Rotate through Carry Right): 带进位循环右移    
 
相当于把cf算进循环移位指令里;
带进位循环左移rcl:将最高位放入cf里,将cf中的值放入最低位;
带进位循环右移rcr:最低位放入cf,cf的值放入最高位;
 
5.c语言中的位运算
与运算 &
或运算 or
非运算 |
异或运算 ^
移位运算 <<  >>
 
1)操作位
 
 
 
 
posted @ 2019-10-14 18:51  L丶银甲闪闪  阅读(379)  评论(0编辑  收藏  举报