导读:
逻辑移位(不管是左移位还是右移位) 都是空缺处补0
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
shl ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
shr ax , cl ; 结果 ax = 0001_1000_1110_1101
算术移位要保证符号位的不改变(逻辑左移位补0, 逻辑右移位看符号位)
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
sal ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 1111_1000_1110_1101
mov ax , 0100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 0000_1000_1110_1101
经测试,VC编译器里面是算术移位。
本文转自
http://topic.csdn.net/t/20051123/00/4411562.html
逻辑移位(不管是左移位还是右移位) 都是空缺处补0
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
shl ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
shr ax , cl ; 结果 ax = 0001_1000_1110_1101
算术移位要保证符号位的不改变(逻辑左移位补0, 逻辑右移位看符号位)
例如: mov ax , 1100_0111_0110_1000B
mov cl , 3
sal ax , cl ; 结果 ax = 0011_1011_0100_0000
mov ax , 1100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 1111_1000_1110_1101
mov ax , 0100_0111_0110_1000B
mov cl , 3
sar ax , cl ; 结果 ax = 0000_1000_1110_1101
经测试,VC编译器里面是算术移位。
本文转自
http://topic.csdn.net/t/20051123/00/4411562.html