灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3178回复:0

逻辑左移 SHL

楼主#
更多 发布于:2012-09-10 18:59

汇编指令shl进行逻辑左移操作,右边补零
如:
mov ax, 0x15 ; ax = 0001 0101
shl ax, 1; 左移1位,结果ax = 0010 1010 相当于 ax = ax * 2
编译器对高级语言(如c++)进行编译时,如遇到对变量
进行乘以2的幂运算时,编译后常优化为shl.
如下代码:
C/C++ Code复制内容到剪贴板
int a = 0x15;  
a = a * 4;  

编译后反汇编代码可能为:
mov dword ptr [a],15h ; a = 0x15
mov eax,dword ptr [a]  
shl eax,2             ; 左移2位
mov dword ptr [a],eax


另外shr命令实现右移功能,相当于除以2的幂,有符号数右移采用sar
TAG: 汇编指令 逻辑左移

喜欢0 评分0
游客

返回顶部