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

【汇编】逻辑指令

文章目录

  • 一、逻辑运算指令
    • (一)各逻辑运算指令格式及操作
      • (1)逻辑非指令 NOT
      • (2)逻辑与指令 AND
      • (3)逻辑或指令 OR
      • (4)异或指令 XOR
      • (5)测试指令 TEST
    • (二)应用实例
  • 二、移位指令
    • (一)算术移位指令
      • (1)算术左移指令 SAL
      • (2)算术右移指令 SAR
    • (二)逻辑移位指令
      • (1)逻辑左移指令 SHL
      • (2)逻辑右移指令 SHR
    • (三)循环移位指令
      • (1)循环左移指令 ROL
      • (2)循环右移指令 ROR
      • (3)带进位的循环左移指令 RCL
      • (4)带进位的循环右移指令 RCR
    • (四)使用注意事项

一、逻辑运算指令

  1. OPR不能为立即数
  2. 至少有一个数在寄存器中,NOT 除外,源操作数是立即数除外
  3. NOT 不影响标志位,其他使 CF=0、OF=0,AF 无定义
  4. 可用标志位:SF、ZF、PF

(一)各逻辑运算指令格式及操作

(1)逻辑非指令 NOT

  • 格式NOT OPR
  • 执行的操作(OPR) ← ¬(OPR)

(2)逻辑与指令 AND

  • 格式AND DST,SRO
  • 执行的操作(DST) ← (DST)∩(SRC)

(3)逻辑或指令 OR

  • 格式OR DST,SRO
  • 执行的操作(DST) ← (DST)∪(SRC)

(4)异或指令 XOR

  • 格式XOR DST,SRO
  • 执行的操作(DST) ← (DST)⊕(SRC)

(5)测试指令 TEST

  • 格式TEST OPR1,OPR2
  • 执行的操作(OPR1)∩(OPR2)

TEST 指令与AND运算的工作原理相同,但与AND指令不同的是,它不会更改第一个操作数。因此,如果我们需要检查寄存器中的数字是偶数还是奇数,我们也可以使用TEST指令执行此操作,而无需更改原始数字(TEST 相当于与操作但不保存结果

(二)应用实例

在这里插入图片描述

二、移位指令

  1. 进位 CF 始终是最后被移出的一位,AF 位无定义
  2. 溢出 OF 只有移 1 位最高位改变时设置
  3. 循环移动只影响 CF 和 OF
  4. 其他移动还影响 SF、ZF、PF

(一)算术移位指令

(1)算术左移指令 SAL

  • 格式SAL OPR,CNT

  • 执行的操作

    在这里插入图片描述

(2)算术右移指令 SAR

  • 格式 SAR OPR,CNT

  • 执行的操作

    在这里插入图片描述

(二)逻辑移位指令

(1)逻辑左移指令 SHL

  • 格式 SHL OPR,CNT

  • 执行的操作

    在这里插入图片描述

(2)逻辑右移指令 SHR

  • 格式 SHR OPR,CNT

  • 执行的操作

    在这里插入图片描述

(三)循环移位指令

(1)循环左移指令 ROL

  • 格式 ROL OPR,CNT

  • 执行的操作

在这里插入图片描述

(2)循环右移指令 ROR

  • 格式 ROR OPR,CNT

  • 执行的操作

    在这里插入图片描述

(3)带进位的循环左移指令 RCL

  • 格式 RCL OPR,CNT

  • 执行的操作

    在这里插入图片描述

(4)带进位的循环右移指令 RCR

  • 格式 RCR OPR,CNT

  • 执行的操作

    在这里插入图片描述

(四)使用注意事项

  • OPR 可用除立即数以外的任何寻址方式

  • 针对 CNT 的不同数值执行的操作 (以 SHL 为例)

    • CNT = 1 时 ➡️ SHL OPR,1
    • CNT > 1 时 ➡️ MOV CL,CNTSHL OPR,CL
  • 条件标志位

    • CF = 移入的数值
    • CNT = 1 时,最高有效位的值发生变化 ➡️ OF = 1
      CNT = 1 时,最高有效位的值不变 ➡️ OF = 0
  • 移位指令

    SF、ZF、PF 根据移位结果设置,AF无定义

  • 循环移位指令

    不影响 SF、ZF、PF(奇偶)、AF


参考文章

汇编语言-移位指令


http://www.kler.cn/a/418382.html

相关文章:

  • hive3.1.3安装及基本例子
  • K8s调度器扩展(scheduler)
  • 家庭打印机如何连接电脑
  • Qt桌面应用开发 第七天(绘图事件 绘图设备)
  • 【聊天室后端服务器开发】语音转换子服务
  • 微信小程序首页搜索框的实现教程
  • 重生之我在异世界学编程之C语言:二维数组篇
  • vue 2 父组件根据注册事件,控制相关按钮显隐
  • 1 MyBatis 的增删改查操作
  • 瑞芯微rv1106的自带的录音和播放功能
  • 图论入门教程:GTM173 Graph Theory
  • centos里docker安装jenkins
  • python实现TCP Socket控制测试仪器
  • go语言的成神之路-筑基篇-对文件的操作
  • 基于LSTM的文本多分类任务
  • C、C++ 和 Java的区别
  • stm32 HAL读取GZP6816D传感器
  • 移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图
  • WPF控制文本框输入的小数点位数
  • 使用Dify与BGE-M3搭建RAG(检索增强生成)应用-改进一,使用工作流代替Agnet
  • Mybatis:接口方法中的参数传递
  • Vue 集成和使用 SQLite 的完整指东
  • SpringBoot开发——Spring Boot 3.3 高效批量插入万级数据的多种方案
  • 等保三级安全架构设计方案
  • Cent0S7 安装Redis
  • mybatis.mapper-locations=classpath:mapper/*.xml