博客
关于我
汇编语言(六):位操作类指令(AND, OR, XOR, NOT, TEST, 移位指令)
阅读量:375 次
发布时间:2019-03-04

本文共 1349 字,大约阅读时间需要 4 分钟。

汇编语言课程笔记:位操作类指令

目录

  • 逻辑运算指令
  • 移位指令
  • 循环移位指令
  • 1. 逻辑运算指令

    1.1 逻辑与指令 (AND)

    • 指令格式:AND reg,imm/reg/mem
    • 功能:设置标志位CFOF为0,根据结果设置SFZFPF状态。
    • 用途:用于将某位或某些位置为0,不影响其他位。

    1.2 逻辑或指令 (OR)

    • 指令格式:OR reg,imm/reg/mem
    • 功能:设置标志位CFOF为0,根据结果设置SFZFPF状态。
    • 用途:用于将某位或某些位置为1,不影响其他位。

    1.3 逻辑异或指令 (XOR)

    • 指令格式:XOR reg,imm/reg/mem
    • 功能:设置标志位CFOF为0,根据结果设置SFZFPF状态。
    • 用途:用于对某些位取反,不影响其他位。

    1.4 逻辑非指令 (NOT)

    • 指令格式:NOT reg/mem
    • 功能:不影响标志位。
    • 用途:用于对单个寄存器或内存位置取反。

    1.5 测试指令 (TEST)

    • 指令格式:TEST reg,imm/reg/mem
    • 功能:执行逻辑与运算,但不改变操作数。
    • 用途:用于检测某些条件是否满足,避免改变原操作数。

    2. 移位指令

    移位指令用于对寄存器或内存位置的数值进行位操作,分为逻辑移位和算术移位。

    2.1 逻辑移位指令

    • 左移:SHL reg/mem,1/CLSHL reg/mem,CL
    • 右移:SHR reg/mem,1/CLSHR reg/mem,CL
    • 特点:适用于无符号数移位处理。
      • 左移:最高位进入CF,最低位补0。
      • 右移:最低位进入CF,最高位补0。

    2.2 算术移位指令

    • 左移:SAL reg/mem,1/CLSAL reg/mem,CL
    • 右移:SAR reg/mem,1/CLSAR reg/mem,CL
    • 特点:适用于有符号数移位处理。
      • 左移:最高位进入CF,最低位补0。
      • 右移:最低位进入CF,符号位不变。

    2.3 移位指令对标志的影响

    • CF:根据移入的位设置。
    • SFZFPF:根据移位后的结果设置。
    • AF:未定义。
    • OF:当移位前最高位与移位后最高位不同时为1,否则为0。

    3. 循环移位指令

    循环移位指令用于将操作数的位进行循环移位操作,分为带进位和不带进位两种类型。

    3.1 不带进位循环移位

    • 左移:ROL reg/mem,1/CL
    • 右移:ROR reg/mem,1/CL
    • 特点:被移位的位会进入CF

    3.2 带进位循环移位

    • 左移:RCL reg/mem,1/CL
    • 右移:RCR reg/mem,1/CL
    • 特点:移位时会考虑CF的值,类似于加法中的进位处理。

    3.3 循环移位对标志的影响

    • CF:根据指令功能设置。
    • SFZFPFAF:不受影响。
    • OF:当移位前最高位与移位后最高位不同时为1,否则为0。

    4. 实际应用示例

    4.1 移位操作示例

    • shl ax,1:将AX左移一位,CF为1。
    • shr al,1:将AL右移一位,CF为0。

    4.2 循环移位示例

    • rol al,1:将AL左循环移位一位。
    • ror bl,1:将BL右循环移位一位。

    4.3 位传送示例

    • ror bl,1:将BL的最低位送到AL的最低位。
    • ror al,1:将AL的最低位送到BL的最低位。

    转载地址:http://mtih.baihongyu.com/

    你可能感兴趣的文章
    MySQL数据库与Informix:能否创建同名表?
    查看>>
    MySQL集群解决方案(4):负载均衡
    查看>>
    MySQL高级-视图
    查看>>
    nacos集群搭建
    查看>>
    Nessus漏洞扫描教程之配置Nessus
    查看>>
    Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
    查看>>
    Netpas:不一样的SD-WAN+ 保障网络通讯品质
    查看>>
    Netty WebSocket客户端
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>