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

    你可能感兴趣的文章
    openstack--memecache
    查看>>
    openstack-keystone安装权限报错问题
    查看>>
    openstack【Kilo】汇总:包括20英文文档、各个组件新增功能及Kilo版部署
    查看>>
    openstack下service和endpoint
    查看>>
    Openstack企业级云计算实战第二、三期培训即将开始
    查看>>
    OpenStack创建虚拟机实例实战
    查看>>
    OpenStack安装部署实战
    查看>>
    OpenStack实践系列⑨云硬盘服务Cinder
    查看>>
    OpenStack架构
    查看>>
    OpenStack版本升级与故障排查实战
    查看>>
    Openstack的HA解决方案【替换原有的dashboard】
    查看>>
    OpenStack的基本概念与架构详解
    查看>>
    Openstack的视频学习
    查看>>
    OpenStack自动化安装部署实战(附OpenStack实验环境)
    查看>>
    openstack虚拟机迁移live-migration中libvirt配置
    查看>>
    OpenStack项目管理实战
    查看>>
    OpenStreetMap初探(一)——了解OpenStreetMap
    查看>>
    openSUSE 13.1 Milestone 2 发布
    查看>>
    openSUSE推出独立 GUI 包管理工具:YQPkg,简化了整个软件包管理流程
    查看>>
    OpenVP共用账号 一个账号多台电脑登录
    查看>>