汇编 SHL指令和SHR指令
Posted ʚVVcatɞ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编 SHL指令和SHR指令相关的知识,希望对你有一定的参考价值。
SHL指令
SHL指令使目的操作数逻辑左移一位,最低位用0填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃。
若将1100 1111左移1位,该数就变为 1001 1110
例如:
BL左移一位。最高位复制到进位标志位,最低位填充0:
mov bl, 8FH ; BL = 10001111b
shi bl, 1 ; CF = 1, BL = 00011110b
当一个数多次进行左移时,进位标志位保存的是最后移出最高有效位(MSB)的数值。
mov al, 10000000b
shi al, 2 ; CF = 0, AL = 00000000b
步骤:
1.将一个寄存器或者内存单元中过的数据向左移动bit位。
2.将溢出的这一位放到CF中。
3.最低位用0补充。
位元乘法
数值进行左移即行了位元乘法。
任何操作数左移 n 位,将该数乘以 2n。
例如,十进制数 10 左移两位,其结果与10 * 2n相同。
mov al, 10 ; 00001010
shl dl ,2 ; 00101000
SHR指令
SHR指令使目的操作数逻辑右移一位,最高位用0填充。最低位置复制到进位标志位,而进位标位中原来的数值被丢弃。
例如:
AL中的最低位0被复制到进位标志位,而AL中的最高位用0填充。
mov al, 0D0H ; aL = 11010000b
shr al, 1 ; aL = 01101000b, CF = 0
在多位移操作中,最后一个移出位0的数值进入进位标志位。
mov al, 00000010b
shr al, 2 ; AL = 00000000b, CF = 1
总结:
当一个数多次进行右移时,进位标志位保存的是最后移出最低有效位的数值。
以上是关于汇编 SHL指令和SHR指令的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )
Android 逆向x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )