【新书推荐】8.4 逻辑运算指令

本节内容:逻辑运算指令。8086 CPU逻辑运算指令包括NOT、AND、OR、XOR,除NOT指令外,均有两个操作数。逻辑运算指令影响状态标志位。

否操作指令NOT指令格式:NOT OPRD。将OPRD取反,然后送回OPRD。操作数可以是8位/16位寄存器或内存操作数,不可以是立即数操作数。

与操作指令AND指令格式:AND OPRD1,OPRD2。对两个操作数进行按位“与”运算,结果送入目的操作数OPRD1。操作数可以是8位/16位寄存器操作数或内存操作数。OPRD2为立即数时,称为掩码。OPRD1不可以为立即数。

或运算指令OR指令格式:OR OPRD1,OPRD2。对两个操作数进行按位的逻辑“或”运算,结果送入OPRD1。操作数可以是8位/16位寄存器操作数或内存操作数。OPRD2为立即数时,称为掩码。OPRD1不可以为立即数。

异或操作指令XOR指令格式:XOR OPRD1,OPRD2。两个操作数按位进行“异或”运算,结果送入OPRD1。操作数可以是8位/16位寄存器操作数或内存操作数,不可以是立即数。如果操作自己与自己进行异或运算,则结果为0,CF=0。

测试指令TEST指令格式:TEST OPRD1,OPRD2。TEST指令与AND指令类似,两个操作数按位进行“与”操作,但是结果不送入OPRD1,仅仅影响标志位。

注意

1.如果指令有两个操作数,最多只能有一个操作数为存储器;

2.只有通用寄存器或存储器操作数可作为目的操作数,用于存放运算结果;

3.如果只有一个操作数,则该操作数既是源操作数也是目的操作数;

4.操作数可以是字节,也可以是字,如果是两个操作数,类型必须一致;

5.对于存储器操作数可采用[BX+SI+位移量]四种寻址方式;

         接下来,我们分别介绍逻辑运算指令的用法。

8.4.1 否操作指令NOT

指令格式:NOT OPRD

将OPRD取反,然后送回OPRD。操作数可以是8位/16位寄存器或内存操作数,不可以是立即数操作数。

NOT AX    

NOT  VARW       ;字变量

NOT AL

NOT BYTE PTR VARB;字节变量

         动手实验43:否操作指令NOT

如图8-22所示,在debug调试器内输入如下一组汇编指令,注意观察AX值的变化:

mov al,1            ;al=0000 0001B

 not al                 ;al=1111 1110B

  mov ax,2           ;ax = 0000 0000 0000 0010B

  not ax                ;ax = 1111 1111 1111 1101B

                图8-22 NOT指令

8.4.2 与操作指令AND

指令格式:AND OPRD1,OPRD2

对两个操作数进行按位“与”运算,结果送入目的操作数OPRD1。操作数可以是8位/16位寄存器操作数或内存操作数。OPRD2为立即数时,称为掩码。OPRD1不可以为立即数。

例:

AND AL,0DFH       ;将al寄存器第5位清零

AND DH,0DH        ;操作数自己和自己做“与”运算,值不变,但是CF清0。

AND AX,ES:[SI]     ;AX寄存器与内存操作数ES:[SI]按位与运算。

对标志位的影响

该指令执行后,CF=0,OF=0,PF,ZF,SF反映运算结果,AF未定义。

AND操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清0的场合。

动手实验44:与操作指令AND

如图8-23所示,在debug调试器内输入如下一组汇编指令,注意观察标志位的变化:

MOV AL,34H         ;AL=34H

AND AL,0FH          ;AL=04H,将AL的高4位清零

                                                图8-23 AND指令

8.4.3 或运算指令OR

指令格式:OR OPRD1,OPRD2

对两个操作数进行按位的逻辑“或”运算,结果送入OPRD1。操作数可以是8位/16位寄存器操作数或内存操作数。OPRD2为立即数时,称为掩码。OPRD1不可以为立即数。

例:

OR AX,8080H                      ;将AX寄存器的第7位和第15位置1

OR CL,AL                              ;将CL和AL寄存器按位或运算

OR WORD PTR [BX-3],AX ; 将内存操作数DS:[BX-3]和AX寄存器按位或运算

OR DH,DH        ;操作数与自己本身进行或运算,值不变,但CF清0。

对标志位的影响

OR指令执行后,CF=0,0F=0,标志PF,ZF,SF反映运算结果,标志AF未定义。

OR指令主要用于使一个操作数不变,而另外若干位置1的场合。

动手实验45:或运算指令OR

如图8-24所示,在debug调试器内输入如下一组汇编指令,注意观察标志位的变化:

MOV AL,41H         ;AL=01000001B

OR AL,20 H           ;AL=01100001B

                                                    图8-24 OR指令

8.4.4 异或操作指令XOR

指令格式:XOR OPRD1,OPRD2

两个操作数按位进行“异或”运算,结果送入OPRD1。操作数可以是8位/16位寄存器操作数或内存操作数,目的操作数不可以是立即数。

如果操作自己与自己进行异或运算,则结果为0,CF=0。

XOR DX,DX         ;DX=0,CF=0

XOR异或操作指令主要用于是一个操作数若干位维持不变,而另外若干位取反场合。

动手实验46:异或运算指令XOR

                                                图8-25 XOR指令

如图8-25所示,在debug调试器内输入如下一组汇编指令,注意观察标志位的变化:

MOV AL,34H       ;AL=00110100B

XOR AL,0FH        ;AL=00111011B

8.4.5 测试指令TEST

指令格式:TEST OPRD1,OPRD2

TEST指令与AND指令类似,两个操作数按位进行“与”操作,但是结果不送入OPRD1,仅仅影响标志位。

对标志位的影响

TEST指令执行后,标志ZF,PF,SF反映运算结果,标志CF,OF被清零。

TEST通常用于检测某些位是否为1,但又不希望改变原操作数的值的场合。

动手实验47:测试指令TEST

如图8-26所示,在debug调试器内输入如下一组汇编指令,注意观察标志位的变化:

检查AL中的位6和位2是否有一位为1:

MOV AL,1

TEST AL,01000100B ;如果位6和位2全部为0,则ZF=1,否则ZF=0。

MOV AL,2

TEST AL, 01000100B

                                        图8-26 TEST指令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/415807.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jetson系统烧录环境搭建

一 序言 Jetson 系列产品烧录系统的方法一般有两种,一种为使用 NVIDIA 官方提供 的 SDK manager 软件给 Jetson 设备烧录系统(请查看说明文档《Jetson 产品使用 SDKmanager 烧录系统》)。另一种即为当前文档所描述的,在安装 Ubun…

GZ036 区块链技术应用赛项赛题第10套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷(10卷) 任 务 书 参赛队编号: 背景描述 养老保险是对于老年人的最基本的生活保障。各种数据显示,当前的养老金市场规模庞大。2016年美国的养老金资…

403页面绕过

403页面绕过 文章目录 403页面绕过姿势一: 端口利用姿势二:修改HOST姿势三:覆盖请求URL姿势四:Referer标头绕过姿势五:代理IP姿势六:扩展名绕过 姿势一: 端口利用 拿到客户给的地址后,首先进行信息收集。端…

MySQL存储引擎及索引机制

MySQL技术——存储引擎和索引机制 一、存储引擎概述二、常见存储引擎的区别三、索引机制四、索引的底层实现原理五、InnoDB主键和二级索引六、聚集索引和非聚集索引七、哈希索引八、InnoDB的自适应哈希索引九、索引常见问题十、慢查询日志总结 一、存储引擎概述 插件式存储引擎…

【C++私房菜】序列式容器的迭代器失效问题

目录 一、list的迭代器失效 二、vector的迭代器失效 1、空间缩小操作 2、空间扩大操作 三、总结 在C中,当对容器进行插入或删除操作时,可能会导致迭代器失效的问题。所谓迭代器失效指的是,原先指向容器中某个元素的迭代器,在…

IDEA基础——Maven配置tomcat

配置方案 一、配置maven-tomcat plugin插件(只最高支持到tomcat 8)~~1.添加镜像源,获取tomcat 8插件配置~~~~1.1 在pom.xml里先添加镜像源~~~~1.2 添加tomcat插件配置~~ 2. 添加tomact官方发布的插件配置(无需添加镜像源&#xff…

回溯算法,你“回”了吗

目录 一、什么是回溯算法 二、应用场景 三、一般解题步骤 1、确定回溯方法以及参数 2、确定回溯的终止条件 3、确定搜索过程 四、力扣例题 1、题目描述 2、解题思路 3、代码示例 五、总结 一、什么是回溯算法 回溯算法,又称为试探法,是一种…

用友 NC 23处接口XML实体注入漏洞复现

0x01 产品简介 用友 NC 是用友网络科技股份有限公司开发的一款大型企业数字化平台。 0x02 漏洞概述 用友 NC 多处接口存在XML实体注入漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件(如数据库配置文件、系统配置文件)、数据库配置文件等等,导致网站处于极度不安全…

【Redis】深入理解 Redis 常用数据类型源码及底层实现(5.详解List数据结构)

本文是深入理解 Redis 常用数据类型源码及底层实现系列的第5篇~前4篇可移步( ̄∇ ̄)/ 【Redis】深入理解 Redis 常用数据类型源码及底层实现(1.结构与源码概述)-CSDN博客 【Redis】深入理解 Redis 常用数据类型源码及底…

Ubuntu22.04.3LTS源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 安装 libx264 开发库(一个开源的视频压缩库,用于编码视频流为 H.264/MPEG-4 AVC 视频格式)。这是编译 FFmpeg 时如果要支持 H.264 编码必须的。 sudo apt install l…

Liunx前后端项目部署(小白也可安装)

文章目录 一、CentOS服务器的安装二、jdk安装三、Tomcat安装四、MySQL安装、五、nginX安装六、多个项目负载均衡,部署后端项目七、前端项目部署 一、CentOS服务器的安装 选择liunx,下面选择CentOS 7 ![在这里插入图片描述](https://img-blog.csdnimg.cn…

预训练概念

预训练是指在特定任务之前,在大规模数据集上对神经网络进行训练以学习通用的表示形式或特征。这些通用表示可以捕捉数据中的统计结构和语义信息,使得神经网络能够更好地理解和处理输入数据。 在大规模预训练模型中,通常会使用无监督或弱监督的…

python脚本实现全景站点矩阵转欧拉角

效果 脚本 import re import numpy as np import math import csv from settings import * # 以下是一个示例代码,可以输入3*3旋转矩阵,然后输出旋转角度:# ,输入3*3旋转矩阵# 计算x,y,z旋转角def rotation_matrix_to_euler_angles(R):

JVM(2)

JVM类加载 指的是java进程运行时,需要把.class文件从硬盘加载到内存,并进行一系列校验解析的过程. 核心: .class文件>类对象; 硬盘>内存. 类加载过程 在整个JVM的执行流程中,和程序员关系最密切的就是类加载的过程了,所以我们来看一下类加载的执行流程. 对于一个类…

【清理mysql数据库服务器二进制日志文件】

清理前后比对 清理前占用 86% : 清理后占用 29% : 排查占用磁盘较大的文件 检测磁盘空间占用 TOP 10 # 检测磁盘空间占用 TOP 10 $ sudo du -S /var/log/ | > sort -rn | # -n选项允许按数字排序。-r选项会先列出最大数字(逆序&#x…

Tomcat架构分析

Tomcat的核心组件 Tomcat将请求器和处理器分离,使用多种请求器支持不同的网络协议,而处理器只有一个。从而网络协议和容器解耦。 Tomcat的容器 Host:Tomcat提供多个域名的服务,其将每个域名都视为一个虚拟的主机,在…

git忽略某些文件(夹)更改说明

概述 在项目中,常有需要忽略的文件、文件夹提交到代码仓库中,在此做个笔录。 一、在项目根目录内新建文本文件,并重命名为.gitignore,该文件语法如下 # 以#开始的行,被视为注释. # 忽略掉所有文件名是 a.txt的文件. a.txt # 忽略所有生成的 java文件, *.java # a.j…

java演唱会网上订票购票系统springboot+vue

随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的交换和信息流通显得特别重要。因此,开发合适的基于springboot的演唱会购票系统的设计与实现成为企业必然要走…

【MySQL】内置函数 -- 详解

一、日期函数 日期:年月日时间:时分秒 1、获得年月日 2、获得时分秒 3、获得时间戳 4、在日期的基础上加日期 5、在日期的基础上减去时间 6、计算两个日期之间相差多少天 7、获得当前时间 ⚪练习 (1)记录生日 (2&…

Qt中关于信号与槽函数的思考

信号与槽函数的思考 以pushbutton控件为例,在主界面上放置一个pushbutton控件,点击右键选择关联槽函数,关联一个click函数,如下图所示: 在该函数中,实现了一个点击pushbutton按钮后,弹出一个窗…