位运算

算术移位指令 【影响CF标志位】

SAL    (Shift Arithmetic Left)    算术左移

MOV        AL,0x81             1000 0001 = 0x81

SAL          AL,    1               0000 0010    CF = 1   (CF=最高位移出来放到CF位,低位补0)

【最高位向左移,移出来的最高位放到CF位,空出的最低位补0】          


SAR    (Shift Arithmetic Right)    算术右移

MOV    AL,    0x81           1000 0001 = 0x81

SAR    AL,    1                  1100 0000     CF = 1    (CF=最低位移出来放到CF位,高位补符号位)

【最低位向右移,移出来的放到CF位,空出的最高位补符号位是什么补什么】

逻辑移位指令 【影响CF标志位】

SHL    (Shift Left)    逻辑左移

 MOV        AL,0x81             1000 0001 = 0x81

 SHL          AL,    1               0000 0010  CF = 1    (CF=最高位移出来放到CF位,低位补0)

【最高位向左移,移出来的最高位放到CF位,空出的最低位补0】


SHR    (Shift Right)    逻辑右移

MOV    AL,    0x81           1000 0001 = 0x81

SHR    AL,    1                  0100 0000     CF = 1    (CF=最低位移出来放到CF位,高位都补0)

【最低位向右移,移出来的放到CF位,空出的高位补0,没符号之说】

循环移位 【影响CF标志位】

ROL(Rotate Left)循环左移

MOV    AL,    0x81           1000 0001 = 0x81

ROL    AL,    1                 0000 0011    CF = 1(CF=最高位移出来的位是啥就是啥)

【最高位向左移动,移出来的最高位放到,空出来的最低位】


ROR(Rotate Right)循环右移

MOV    AL,    0x81           1000 0001 = 0x81

ROR    AL,    1                 1100 0000    CF = 1(CF=最低位移出来的位是啥就是啥)

【最低位向右移动,移出来的最低位放到,空出来的最高位】

带进位循环移位 【影响CF标志位】重点:把CF位加到被操作数的最高位成员,然后再循环移动

RCL(Rotate Through Carry Left)带进位循环左移

CF = 0

MOV    AL,    0x81           1000 0001 = 0x81

RCL    AL,    1                 0000 0010    CF = 1    (CF位补到最低位)


RCR(Rotate Through Carry Right)带进位循环左移

CF = 0

MOV    AL,    0x81           1000 0001 = 0x81

RCR    AL,    1                 0100 0000    CF = 1 (最低位补到CF位)



你可能感兴趣的:(位运算)