博客
关于我
汇编语言(六):位操作类指令(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/

    你可能感兴趣的文章
    PHPCMS多文件上传和上传数量限制
    查看>>
    phpEnv的PHP集成环境
    查看>>
    PHPExcel一些基本设置总结
    查看>>
    phpexcel中文手册
    查看>>
    PHPExcel导入导出 若在thinkPHP3.2中使用(无论实例还是静态调用(如new classname或classname::function)都必须加反斜杠,因3.2就命名空间,如/c...
    查看>>
    phpize及其用法
    查看>>
    phpMailer发送邮件
    查看>>
    PHPMailer发送邮件
    查看>>
    phpmailer发送邮件,可以带附件
    查看>>
    phpmailer的用法
    查看>>
    phpMQTT
    查看>>
    phpmyadmin 安装
    查看>>
    phpmyadmin导出数据库出现Fatal error: Cannot 'break' 2 levels in D:\phpstudy\WWW\phpMyAdmin
    查看>>
    phpmyadmin数据库建表及插入
    查看>>
    phpnow配置
    查看>>
    phprpc简单使用
    查看>>
    phpspider中当爬虫获取数据时如何去掉广告
    查看>>
    phpstorm 2016.3.3 激活
    查看>>
    phpstorm中Xdebug的使用
    查看>>
    phpstorm中使用svn版本控制器
    查看>>