当前位置: 首页 > news >正文

x86汇编语言入门基础(三)汇编指令篇3 位移运算

位移运算指令:SHL逻辑移位,SAR算术移位, ROR循环右移

1. SHL 逻辑移位

Shift Left, SHL代表向左移位,SHR代表向右移位

指令格式shl op1, op2

  • 目的操作数 op1:寄存器/内存地址
  • 源操作数 op2:寄存器(通常是低8位寄存器CL)/立即数(表示移位的位数,在32位系统中立即数通常限制为1-32之间的值)

指令释义:向左移动指定位数,高位丢弃,低位补0(二进制按位移动)

  • 任何因移位产生的新的位都会自动填充位0(零扩展)

实例理解

1. 指令 shl eax, 0x10(向左移动16位)

  • 假设eax的值是0x0000ffff,
  • 位移运算前的二进制表示:0000 0000 0000 0000 1111 1111 1111 1111
  • 位移运算后的二进制表示:1111 1111 1111 1111 0000 0000 0000 0000

2. 指令 shl [ebx], cl

  • 将内存地址[ebx]中的值向左移动CL寄存器中的指定位数

2. SAR 算术移位

Shift Arithmetic Right,SAR算术右移,SAL算术左移

指令格式:sar op1, op2

  • 目的操作数 op1:寄存器/内存地址
  • 源操作数 op2:寄存器/立即数

指令释义:用于对寄存器或内存中的值进行算术右移操作,算术右移是一种特殊的位移操作,它在移位时会保留符号位(最高位),因此适用于有符号整数的移位操作。

  • SAR操作会对值进行符号扩展,所有新的位会以最高有效位1来填充;
  • SAL与SHL指令操作相同,都是对值进行零扩展,新的位用0来填充

实例理解

1. sar al, 3

  • 假设位移运算前为:1000 0000
  • 那么位移运算后为:1111 0000
  • sar进行符号扩展,复制最高有效位1

3. ROR 循环右移

Rotate Right,循环右移

指令格式:ror op1, op2

  • 目的操作数 op1:寄存器/内存地址
  • 源操作数 op2:寄存器/立即数

指令释义:将目标操作数向右循环移位,常用于生成字符串哈希(通过逐字符处理一个字符串,右旋转打乱当前值的位顺序)

实例理解

1. ror edx, 0x0c(向右循环位移12次)

  • 假设位移运算前edx的值为0x87654321
  • 位移运算前二进制表示:1000 0111 0110 0101 0100 0011 0010 0001
  • 位移运算后二进制表示:0011 0010 0001 1000 0111 0110 0101 0100
  • 位移运算后的十六进制表示为 0x32187654

位移运算的指令格式

  • 目的操作数 operand1:寄存器或内存地址
  • 源操作数 operand2:寄存器(通常是低8位寄存器CL),或立即数(表示移位的位数,在32位系统中立即数通常限制为1-32之间的值),目前看的例子中源操作数用立即数更常见

前序文章

x86汇编语言入门基础(三)汇编指令篇1 逻辑位运算-CSDN博客

x86汇编语言入门基础(三)汇编指令篇2 算术运算-CSDN博客

http://www.dtcms.com/a/272692.html

相关文章:

  • 【threejs】第一人称视角之八叉树碰撞检测
  • 蜻蜓I即时通讯系统重构宣言:破茧重生的技术革命-长痛不如短痛卓伊凡|麻子|果果
  • 大健康IP如何借“合规创新”抢占行业新风口|创客匠人
  • 解读 Go 中的 constraints包
  • 【TCP/IP】7. IP 路由
  • xml 知识总结: xsd,xsi:schemaLocation,xmlns,xmlns:xsi
  • SpringBoot系列—MyBatis(xml使用)
  • codeforeces Round1032 - Round 1036
  • 【node后端】搭建项目(Express+Ts+Typeorm+Mysql一步到位)
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • Arc Institute提出首个AIVC虚拟细胞模型STATE
  • 上海交大医学院张维拓老师赴同济医院做R语言训练营培训
  • 从Debug中学习MiniGPT4
  • 在Vue中如何对组件进行销毁在进行挂载
  • 模型训练之数据标注-Labelme的使用教程
  • 5款工具高效制作插图,PPT设计新选择!
  • 货车车架和悬架设计cad【7张】+设计说明书
  • leetcode 3440. 重新安排会议得到最多空余时间 II 中等
  • 《PyQt6-3D:开启Python 3D编程新世界 2》
  • 【TCP/IP】8. 传输层协议
  • hive小文件问题
  • 二层环路避免-STP技术
  • Linux【大数据运维】下制作Redis绿色免安装包(一)
  • 企业网络安全的“金字塔”策略:构建全方位防护体系的核心思路
  • upload-labs靶场通关详解:第20关 /.绕过
  • 以下哪种类型在Golang中不是内置类型?
  • zookeeper etcd区别
  • Keepalived+LVS实现LNMP网站的高可用部署
  • 登录为图片验证时,selenium通过token直接进入页面操作
  • Java 导出word 实现饼状图导出--可编辑数据