算术移位指令 【影响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位)
网友评论