DJ12-2-4 串操作指令

news2025/1/12 3:52:18

目录

1. REP 重复前缀

2. 串操作指令的基本概念

3. 串操作指令的指令类型

(1)串传送指令 MOVS

(2)串传送指令 CMPS

(3)串扫描指令 SCAS

(4)串装入指令 LODS

(5)串存储指令 STOS


 

1. REP 重复前缀

 (1)REP 无条件重复前缀

重复执行规定的操作,直至CX=0。

(2)REPE/REPZ 有条件重复前缀

相等或结果为 0 时重复,即 ZF = 1,并且 CX ≠ 0 。

(3)REPNE/REPNZ 有条件重复前缀

不相等或结果不为 0 时重复,即 ZF = 0,并且 CX ≠ 0 。

REP 重复前缀操作不影响标志位。

先执行串操作指令,串操作指令可能会影响标志位。然后 CX - 1,并判断条件。 

执行流程:

  • 执行串操作指令(会影响 FLAGS)
  • CX - 1(不会影响 FLAGS)
  • 判断 CX 和 ZF 是否仍满足条件

 

 

2. 串操作指令的基本概念

(1)定义

字符串:存储器中地址连续的若干单元的字符或数据称为字符串或数据串。

串操作指令:就是用来对串中每个字符或数据做同样操作的指令。

特点:每执行一次操作后自动修改指针,再执行下一次操作。

串操作指令是8086指令系统中唯一能直接处理源和目标操作数都在存储单元的指令。

(2)共同特点

① 源串默认为数据段,允许段重设,偏移地址用 SI 寄存器指定,即源串指针为 DS:SI。

② 目的串默认为附加段,不允许段重设,偏移地址用 DI 寄存器指定,即目的串指针为 ES:DI。

③ 串长度值放在 CX 寄存器中。

④ 在对每个字节或字操作后,SI 和 DI 寄存器的内容自动修改。修改方向与标志位 DF 有关:

  • 若 DF = 0,SI 和 DI 按地址增量方向修改;
  • 若 DF = 1,SI 和 DI 按地址减量方向修改。

对字节操作加/减 1,对字操作加/减 2 。

⑤ 可以在串操作指令前使用重复前缀,在每次串操作后 CX 的内容自动减 1,直至 CX = 0 或不满足指定的条件为止。

 

 

3. 串操作指令的指令类型

(1)串传送指令 MOVS

格式:MOVS  OPRD1,OPRD2

实际使用:

  • MOVSB  OPRD1,OPRD2:一次完成一个字节的传送
  • MOVSW  OPRD1,OPRD2:一次完成一个字的传送

执行:

  • DS:[SI] → ES:[DI]
  • SI + n → SI,DI + n → DI

MOVS 指令不影响标志位,常用无条件重复前缀 REP 联合使用。

加上 REP 后执行流程:

  • 执行串操作指令(会影响 FLAGS)
  • CX - 1(不会影响 FLAGS)
  • 判断 CX 是否仍满足条件

 

例题

将数据段 2000H:1200H 地址开始的 100 个字节传送到 6000H:0000H 开始的内存单元。 

 

 

(2)串传送指令 CMPS

格式:CMPS  OPRD1,OPRD2

实际使用:

  • CMPSB  OPRD1,OPRD2:按字节进行比较
  • CMPSW  OPRD1,OPRD2:按字进行比较

执行:

  • DS:[SI] - ES:[DI](不会改变操作数本身)
  • SI + n → SI,DI + n → DI

这里是源 - 目的,其实无所谓谁减谁。

CMPS 指令要影响标志位。

CMPS 指令常与重复前缀 REPE/REPZ 或 REPNE/REPNZ 联合使用,用来检查两个字符串是否相等或不相等:

  • REPE/REPZ,若 ZF = 1 且 CX ≠ 0,则重复比较。
  • REPNE/REPNZ,若 ZF = 0 且 CX ≠ 0,则重复比较。

ZF 位取决于串比较的结果。

例题

比较两个字符串是否相同,并找出其中第一个不相同字符的地址,将该地址送 BX,不相同的源字符送 AL。字符串长度均为 200 字节,M1 为源串起始偏移地址,M2 为目的串起始偏移地址。

 

 

 

(3)串扫描指令 SCAS

格式:SCAS  OPRD

实际使用:

  • SCASB  OPRD:按 AL 内容对目的串进行扫描
  • SCASW  OPRD:按 AX 内容对目的串进行扫描

执行:

  • AL/AX - ES:[DI](不会改变操作数本身)
  • DI + n → DI(不会改变 SI 寄存器)

累加器 AL/AX 作源操作数,ES:[DI] 作目的操作数。

SCAS 指令要影响标志位。

 

例题

在 ES 段中从 2000H 单元开始存放了 10 个字符,编程计数这串字符中有多少个 “A”,并将计数值存入寄存器 BX 中。 

(必考)双重循环

 

 

(4)串装入指令 LODS

格式:LODS  OPRD

实际使用:

  • LODSB  OPRD:将源串按字节装入 AL
  • LODSW  OPRD:将源串按字装入 AX

执行:

  • DS:[SI] → AL/AX
  • SI + n → SI(不会改变 DI 寄存器)

DS:[SI] 作源操作数,累加器 AL/AX 作目的操作数。

LODS 指令不影响标志位。

一般不带重复前缀指令,避免后面装入的数据覆盖前面装入的数据。

 

 

 

(5)串存储指令 STOS

格式:STOS  OPRD

实际使用:

  • STOSB  OPRD:将 AL 内容按字节存入目的串
  • STOSW  OPRD:将 AX 内容按字存入目的串

执行:

  • AL/AX → ES:[DI]
  • DI + n → DI(不会改变 SI 寄存器)

累加器 AL/AX 作源操作数,ES:[DI] 作目的操作数。

STOS 指令不影响标志位。

STOS 指令利用重复前缀 REP 可对连续存储单元存入相同的值。

 

例题

用串存储指令实现对 6000H:1200H 开始的 100 个字单元内容清零。

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

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

相关文章

如果把网络原理倒过来看,从无到有,一切如此清晰(下)

人生若只如初见。 前言 当我在台灯下,听着远隔17年前五月天的歌,而在数日后,我的文字也会纵使相隔万里远的来到你的屏幕前,就觉得这一切妙不可言。 OSI 网络七层模型 《如果把网络原理倒过来看,从无到有&#xff0c…

Metabase学习教程:仪表盘-5

如何进行时间段比较 我们通过不同的方法来比较一个指标在不同日期范围内的表现。 我们将研究不同的策略来比较两个不同时期的指标,比如将本周与上周、去年同期与上一周进行比较。我们将使用Metabase附带的示例数据库,这样您就可以继续学习了。这个示例…

【Android App】Vulkan实现宇宙中旋转雷达动画效果(附源码和原始视频 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、Vulkan简介 Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码早已封装起来,由于开发者修改不了底层代码&#xf…

社区系统项目复盘-5

文章目录Kafka消息队列实现系统通知功能什么是Kafka?Spring是怎么整合Kafka的?发送系统通知显示系统通知Kafka消息队列实现系统通知功能 阻塞队列 可以用阻塞队列来实现消息队列,阻塞队列是一个接口:BlockingQueue,可以…

易云维医院后勤综合管理平台为医院智慧后勤的建设与发展做出贡献

近年来,随着国家医疗卫生改革进程的不断推进,越来越多的医院开始关注运营成本控制问题,医院后勤管理服务模式的创新和优化变得越来越重要。利用医院后勤综合管理平台将医院后勤管理信息化将极大地提高医院智慧后勤建设与发展。在这种形势下&a…

Mac下安装Hadoop

1、引言 如果想在Mac下安装Hadoop而且让Hadoop能正常运行,那安装之前需要先安装java,在Mac环境下安装Hadoop。 2、配置ssh环境 在Mac下如果想使用Hadoop,必须要配置ssh环境, 如果不执行这一步,后面启动hadoop时会出现…

Spring MVC应该怎么学?这份教程带你快速入门,深入剖析源码!

前言: 什么是MVC? MVC(Model-View-Controller):它是一种软件架构设计模式,分为三个部分: Model(模型):业务的数据模型; View(视图)&…

xss-labs/level5

输入 <script>alert(xss)</script> 查看回显 如下所示 能够发现script被恶意替换为scr_ipt 查看源代码 第一个输出点被转义了 所以没有利用价值了 第二个输出点如同刚才所言被进行了关键字的恶意替换操作 那没办法 我们只能继续尝试一下在标签内部构造一个新…

91183-98-1,UDP-N-acetylglucosamine,5′-二磷酸尿嘧啶核苷-N-乙酰半乳糖胺二钠盐

5′-二磷酸尿嘧啶核苷-N-乙酰半乳糖胺二钠盐 英文名称&#xff1a;UDPAG&#xff1b;UDP-GlcNAc&#xff1b;UDP-N-acetylglucosamine&#xff1b;Uridine 5′-diphospho-N-acetylglucosamine sodium salt 其他名称&#xff1a;尿苷-5′-二磷酸-N-乙酰基-葡糖胺钠盐 CAS号&am…

Linux进阶-进程

目录 终端查询进程参数 进程状态 进程状态转换 子进程被Linux内核调入CPU执行的过程 子进程进入睡眠状态 子进程结束 进程控制 pid_t fork(void)&#xff1a;创建子进程 exec()函数族&#xff1a;运行一个可执行文件。 void exit(int status)&#xff1a;结束进程 w…

Illuminate/22圆桌回顾:Web3互操作性的未来现已到来

Illuminate/22 由Moonbeam主办的Illuminate/22于2022年11月10-11日成功举办。为期2天的线上会议聚集了60演讲嘉宾超过40个话题讨论。通过本次会议&#xff0c;来自行业领先的项目及负责人分享了通过互操作性和跨互连合约实现的最新进展。 本次以“Web3互操作性的未来现已到来”…

AI是如何影响全球的安防监控产业

全球AI安防市场现状 人工智能安防监控技术正在以更快的速度传播到更广泛的国家。全球176个国家中&#xff0c;至少有75个国家正在积极将AI技术用于监视目的。其中包括&#xff1a;智慧城市/安全城市平台&#xff08;56个国家&#xff09;&#xff0c;面部识别系统&#xff08;6…

【torch】如何把给定mask按比例选取再次划分mask?

背景 在以torch为基础的很多框架下有一些集成的数据集&#xff0c;数据集往往自带已经划分好的mask。但是如何能够把框架给出的mask再次划分&#xff1f;比如按比例划分出来80%的train mask。 解决 新生成一个每个元素都是0-1分布的与mask2的true位置相同的矩阵&#xff0c;…

xss-labs/level4

首先还是输入我们最熟悉的payload <script>alert(xss)</script> 查看界面回显 发现表单中的尖括号都消失了 说明后台服务器将尖括号删除了 再去查看源代码 通过源代码我们可以知道存在两个有意义的输出点 第一个输出点被转义了 没办法利用了script标签去执行js代…

亲戚小孩月薪17k,而我只有4k+,好慌......

我们总是在悲观与乐观中反复折磨自己&#xff0c;感觉自己一事无成。总是眼高手低&#xff0c;总以为大运会砸到自己&#xff0c;遇到挫折就会感到很沮丧。 大学四年没考到英语六级证书&#xff0c;小学教资考了两次。现在想要考研&#xff0c;但总是觉得来不及&#xff0c;或…

SpringBoot概念、创建和运行

文章目录什么是Spring Boot &#xff1f;为什么要学Spring Boot &#xff1f;Spring Boot 优点Spring Boot 项目创建项目目录介绍和运行约定大于配置什么是Spring Boot &#xff1f;为什么要学Spring Boot &#xff1f; Spring 的诞生是为了简化 Java 程序的开发的&#xff0c…

外汇天眼:外汇市场为何在周末休市?为什么周末行情有波动?

虽然从理论上而言&#xff0c;货币市场从不休市&#xff0c;但您很难见到有人在周日交易。新手甚至会认为&#xff0c;交易活动的停止是因为外汇经纪商周末休息。但如下文所述&#xff0c;实际情况并非如此。 外汇市场中的主要参与者 货币交易主要是为了促进贸易和旅游业。而且…

助推专精特新企业数字化的低代码

近两年&#xff0c;“专精特新”成为行业的热门词。根据工信部的定义&#xff0c;“专精特新”中小企业&#xff0c;是指具有专业化、精细化、特色化、新颖化等特点的企业。它们多专注于产业链上某个环节&#xff0c;主营业务聚焦&#xff0c;同时具有较强大的创新能力、创新活…

PG::Potato

nmap -Pn -p- -T4 --min-rate1000 192.168.171.101 nmap -Pn -p 22,80,2112 -sCV 192.168.171.101 打开80端口未发现可利用的服务 尝试对路径爆破&#xff0c;同时FTP可匿名访问&#xff0c;查看FTP内是否有可用信息 dirb http://192.168.171.101 在FTP中得到了网站源码的…

跑通Intellij Platform Plugin项目

目录需求描述尝试方向1. 用2022.1版本运行2. 用2019.2版本运行结论需求描述 在研究DDD逆向建模支持工具的过程中&#xff0c;需要复现期刊作者的cargo项目&#xff0c;实现C2MD&#xff0c;即代码转UML的功能。虽然按照文章的要求安装DddTool插件&#xff0c;但是不能成功使用…