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

news2025/2/27 11:13:56

本节内容:逻辑运算指令。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指令

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UE5 UE4 不同关卡使用Sequence动画

参考自:关于Datasmith导入流程 | 虚幻引擎文档 (unrealengine.com) 关卡中的Sequence动画序列,包含特定关卡中的Actor的引用。 将同一个Sequcen动画资源放入其他关卡,Sequence无法在新关卡中找到相同的Actor,导致报错。 Sequen…

2024国际生物发酵展览会独家解读-力诺天晟科技

参展企业介绍 北京力诺天晟科技有限公司,专业致力于智能仪器仪表制造,工业自动控制系统用传感器、变送器的研发、设计、销售和服务。 公司坐落于首都北京行政副中心-通州区,下设生产子公司位于河北香河经济开发区,厂房面积 300…

Vue NextTick工作原理及使用场景

$nextTick的定义及理解: 定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。 所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操…

GitHub标星50k的Android全栈技术知识,成为一名合格Android架构师

JNI 简介 JNI (Java Native Interface英文缩写),译为Java本地接口。是Java众多开发技术中的一门技术,意在利用本地代码,为Java程序提供更高效、更灵活的拓展。尽管Java一贯以其良好的跨平台性而著称,但真正…

js 面试运行机制和存储(从以下几方面理解),栈和堆的理解

1 工作原理 每个浏览器都有自己的引擎,通过引擎把代码解析运行起来。 2 生命周期 3-1 内存分配 3-2 内存使用 3-3 内存回收 3 栈和堆的理解 timer也是个函数--所以也是引用类型。 4 如何运行 以下可忽略 首先声明变量,放在左侧栈中执行,在执行…

FPGA-时钟管理单元

时钟管理单元(Clock Management Tile, CMT) : 即时钟管理片,是FPGA器件中一个十分重要的时钟资源。能够对内部和外部的时钟去偏斜、去抖动,同时还支持频率合成、分倍频等功能。 举例,下面这个例子数据从FIFO输出时钟频率为125MHZ,这个时钟频率可以通过…

Redis冲冲冲——Redis的主从复制,哨兵模式以及SpringBoot的配置

目录 引出Redis的主从复制,哨兵模式以及SpringBoot的配置Redis的主从复制Redis的哨兵模式SpringBoot配置 缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Redis冲冲冲——Redis的主从复制,哨兵模式以及SpringBoot的配置…

Taro React ---- 在函数组件或类组件中访问上下文(Context)中的值

1. 解决问题的场景 项目是开发好几年了,当时采用的是类组件开发。现在新增需求,新增需求使用的函数组件,组件涉及的层级比较多,如果直接组件传值,比较麻烦。但是单独为这次的需求新增 redux 的引入又觉得没必要。然后在…

优化照片分辨率:如何将照片调整为150dpi,以适应不同场景?

在数字化时代,我们经常需要在不同场景中使用照片,如打印、网页发布、社交媒体分享等。然而,不同场景对于照片的分辨率要求各不相同。有时,我们需要将照片的分辨率调整为特定数值,例如150dpi(每英寸点数)。这样做可以确…

flutter面试题及答案,android面试题最新

前言 今天想停下代码,写点脑袋里不断浮现出来的一些看法。 也就是最近在微博和知乎上老看到“互联网寒冬”的说法。要么是看到啥公司薪水无法如期发放了,要么是看到别人说什么“裁员了,没有交接,签字然后电脑还了就走人&#xf…

【JavaEE进阶】 Spring AOP快速上手

文章目录 🍃什么是AOP🌳什么是Spring AOP🌴上手Spring AOP🚩引入依赖🚩编写AOP程序 ⭕总结 🍃什么是AOP AOP是Aspect Oriented Programming的简称(又称为面向切⾯编程) 什么是面向…

【k8s 访问控制--认证与鉴权】

1、身份认证与权限 前面我们在操作k8s的所有请求都是通过https的方式进行请求,通过REST协议操作我们的k8s接口,所以在k8s中有一套认证和鉴权的资源。 Kubenetes中提供了良好的多租户认证管理机制,如RBAC、ServiceAccount还有各种策路等。通…

练习 1 Web EasySQL极客大挑战

CTF Week 1 EasySQL极客大挑战 BUUCTF 典中典复习 Web SQL 先尝试输入,找一找交互页面 check.php 尝试万能语句 a’ or true SQL注入:#和–的作用 get传参只能是url编码,注意修改编码,输入的字符串要改成url格式。 POST请求和…

定制红酒:定制过程中的沟通与调整,确保满足您的需求

在云仓酒庄洒派的定制红酒服务中,沟通与调整是确保满足消费者需求的关键环节。为了提供上好的服务,云仓酒庄洒派非常重视与消费者的沟通,并根据他们的反馈进行调整,以确保产品符合他们的期望。 首先,在定制过程中&…

Fastjson2 <== 2.0.26反序列漏洞

根据Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章,文章中引入注目的是利用条件限制条件,不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题,其实如果单独去使用一些关键词去搜索&a…

linux系统---nginx基础

目录 一、Nginx的概念 二、Nginx常用功能 1、HTTP(正向)代理,反向代理 1.1正向代理 1.2 反向代理 2、负载均衡 2.1 轮询法(默认方法) 2.2 weight权重模式(加权轮询) 2.3 ip_hash 3、web缓存 三、基础特性 四…

【深度优先搜索】【图论】【推荐】332. 重新安排行程

作者推荐 动态规划的时间复杂度优化 本文涉及知识点 深度优先搜索 图论 LeetCode332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&a…

flutter通知栏,写得太好了

【1面 - 基础面】 你们 Android 开发的时候,对于 UI 稿的 px 是如何适配的? dpi:屏幕像素密度,指的是在系统软件上指定的单位尺寸的像素数量,它往往是写在系统出厂配置文件的一个固定值;ppi:也…

骨传导耳机什么牌子的好?揭秘成功法则与避坑策略

科技进步带来了骨传导耳机的兴起,这种耳机以其独特的优势而受到越来越多消费者的青睐。与传统的入耳式相比,骨传导耳机通过骨头传递声音,避免了对耳道的直接压迫,减少了对听力的潜在伤害。同时它们允许用户在享受音乐的同时&#…

Python并发编程:多线程与多进程的区别

一 谁的开启速度快 1. 在主进程下开启线程 1 2 3 4 5 6 7 8 9 from threading import Thread def work(): print("hello") if __name__ __main__: t Thread(targetwork) t.start() print("主线程/主进程") 执行结果如下&#xff1a…