汇编语言之字符串的比较和查找

2023-10-30

汇编语言之字符串的比较和查找

基础知识

  1. 串比较指令涉及两个串,目的串地址为ES:[DI],源串地址为DS:[SI]。操作如下:

    1)字节(CMPSB)操作:(ES:DI)-(DS:SI),DI±1,SI±1

    2)字(CMPSW)操作:(ES:DI)-(DS:SI),DI±2,SI±2。

    本条串操作指令把两个串的对应位置的字节或字相减,不保存结果,知识根据结果设置标志位。该指令与前缀REPE 联用时,可比较两个串是否相等。在每次比较过程中,一旦发现不相等,ZF=0,则终止重复执行,而不必等到整个串全部比较结束,此时CX≠0,ZF=0。该指令终止执行后.可根据标志ZF 判断两个串是否相等。其他指令格式与串传送指令相同。

  2. 串扫描指令只涉及一个目标串,指定串地址ES:[DI],默认源操作数为AL(字节)或AX(字)。

    1) 字节(SCASB)操作:AL-(ES:DI),DI±1

    2) 字(SCASW)操作:AX-(ES:DI),DI±2

    串扫描指令是把AL/AX 寄存器中的内容与附加段中的由目的变址寄存器DI 所指向的内存单元内容相比较,与CMPS 比较指令相似,并不保存结果,只是根据结果设置标志位。该指令与前级REPNE 联用时,可在目的串中查找有无和AL/AX 寄存器中的内容相同的字节或字。在每次执行串扫描指令过程中,一旦发现相等,即ZF=1,则终止执行,此时cX≠0,ZF=1,说明已找到相同的内容,而不必等到整个串全部扫描结束。该指令终止执行后,可根据标志位ZF 判断是否找到。指令相关格式要求同串传送指令。

实验内容

字符串的比较

  1. 字符串的比较程序中,一个字符串在数据段定义,另一个字符串在程序执行的时候从键盘输入,必须定义键盘缓冲区,并指出不相等的位置

    程序说明

    在数据段中定义的字符串为hellohowareyou

    输入的字符串为helloaa,程序指出第一个不同的字符为a

    输入的字符串为test,程序指出第一个不同的字符为t

    程序代码

    DATAS SEGMENT
        INP DB 64 DUP('?')
    DATAS ENDS
    EXT SEGMENT
    STRING DB 'hellohowareyou$'
    EXT ENDS
    CODES SEGMENT
       ASSUME CS:CODES,DS:DATAS,ES:EXT
    START:
       MOV AX,DATAS
       MOV DS,AX
       MOV AX,EXT
       MOV ES,AX
       ; READ A STRING
       LEA DX,INP
       MOV AH,0AH
       INT 21H 
       ; CMP
       ; NOTE : CMP ES:DI - DS:SI UNILL CX=0 OR ZF=0
       LEA DI,STRING
       LEA SI,INP+2
       MOV CX,14
       CLD
        REPE CMPSB
        ; OUTPUT DIFFERENCE
        MOV DL,0AH
        MOV AH,02H
        INT 21H
    DEC SI
        MOV DL,DS:[SI]
        MOV AH,02H
        INT 21H
       ; END
       MOV AH,4CH
       INT 21H
    CODES ENDS
       END START

字符串查找

  1. 在字符串中查找某个字符,字符串在数据段定义,要查找的字符串在程序执行时从键盘输入,并指出找到的位置。

    程序说明

    在数据段定义字符串abcdefg

    输入字符d,返回运行结果4,表示字符串中第四个位置是d

    输入字符o,返回运行结果NOT FOUND,表示在字符串中未找到相应字符

    程序代码

    DATAS SEGMENT
        STRING DB 'abcdefg$'
        TIP DB 'NOT FOUND$'
    DATAS ENDS
    CODES SEGMENT
       ASSUME CS:CODES,DS:DATAS
    START:
       MOV AX,DATAS
       MOV ES,AX
       MOV DS,AX
       ; READ A LETTER
       MOV AH,01H
       INT 21H 
       ; CMP
       ; NOTE : CMP ES:DI WITH AL
       LEA DI,STRING
       MOV CX,8
       CLD
        MOV BL,'0'
        FIND: INC BL
            SCASB
        LOOPNZ FIND
        JZ OUTPUT
    NOFIND:
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    LEA DX,TIP
    MOV AH,09H
    INT 21H
        JMP DDL
    OUTPUT: 
    MOV DL,0AH
    MOV AH,02H
    INT 21H
    MOV DL,BL
        MOV AH,2H
        INT 21H
        JMP DDL
    DDL:    
    MOV AH,4CH
       INT 21H
    CODES ENDS
    END START
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编语言之字符串的比较和查找 的相关文章

  • cpu.h-栈的宏定义-满减栈

    常常两两相对的东西 整一起后有点记不住 就写下来 cpu h中有宏定义使用哪种栈 define OS STK GROWTH 1 Stack grows from HIGH to LOW memory on ARM 栈的四种 满栈 满 字表示
  • 错误解决:Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255]

    今天又是快乐改错误的经历 在做k means进行图片压缩的实战项目中 我遇到了这样一个pyplot显示图像报错问题 Clipping input data to the valid range for imshow with RGB dat
  • Python中的字典用法

    文章目录 一 字典的定义 二 字典的创建 2 1 一个简单的字典 2 2 字典的嵌套 三 字典的特性 3 1 字典不支持切片 3 2 成员操作符 3 3 for循环遍历 四 字典元素的增加 五 字典元素的删除 六 字典元素的查看 七 字典的
  • 制作最简单的Git Server

    网上看到的Git Server部署方法一大堆 一会儿搞什么SSH 还要弄私钥公钥 复杂无比 其实有一个办法非常简单 如果是在公司内网环境下 需要将某台机器部署为Git Server 我们称该机器为服务器 假设IP为192 168 0 111
  • uni-app前端用户登录实现

    从0开始开发SpringBoot vue前后端分离项目 后端 Springboot简单实现用户登录操作 文章目录 从0开始开发SpringBoot vue前后端分离项目 后端 1 HBuildX uni app创建项目 一 项目目录结构 二
  • LinearLayer

    线性层的作用 类似于这边荧光绿的两层 就是fully connected layer 将1 1 4096的向量 变成1 1 1000的向量 代码示例 import torch import torchvision from torch im
  • dwr 使用 callback 多个参数(间接方法)

    dwrInvokeDataClaimAction findSupplierByName payee callback function returnData bringOutSupplierCallback returnData arg1
  • 【Redis】List类型和底层原理

    文章目录 List类型 1 List介绍 1 1常用命令 2 List底层实现 3 ziplist剖析 3 1ziplist结构 3 2创建一个空的ziplist 3 3ziplist的元素节点结构 3 4ziplisqt的连锁更新 3 5
  • Java 集合(List与LinkedList)接口详解

    List接口 List接口的定义 List interface List extends Collection 通过观察List接口的定义发现其继承得是Collection接口 List Set Queue接口继承的都是Collection
  • [持续开源中]用2000元左右做水下机器人

    1 水下机器人功能 1 平稳的运动控制 2 高清视频 3 定深悬停 巡航 2 相关技术 2 1 PC上位机 1 C Winform MVC 现有 2 C MAUI MVVM Socket 开发中 2 2 下位机 水下机器人 2 2 1 So
  • 最长连续子序列的起始位置

    用结构体保存结果 注意的是最长连续子序列需要的是连续 所以dp的状态方程别写错了 include
  • inotify_init使用

    用于监控文件 目录的修改创建删除等操作 也可以配合epoll使用 include
  • Upload-Labs-Windows Pass-01

    题目 解题 步骤1 上传文件 上传一句话木马 编辑文件a php 内容为 直接上传的话 会提示错误 题目要求选择图片格式上传 文件名改为a jpg 内容为 然后通过burp suite来修改上传文件名字 步骤2 改文件名 把a jpg改为a
  • 组件库技术选型总结

    Monorepo Multirepo 架构 Multirepo指的是将模块分为多个仓库 每个团队都拥有自己的仓库 他们可以使用自己的构建流程 代码规范等 但是同时也会存在很多问题 比如模块中间如果存在相互依赖 就必须到目标仓库里进行bug修
  • android动态权限的源码解析

    android 动态权限 android权限的类型 在android9 0中定义了很多权限 如下
  • LeetCode-七进制数、最小高度二叉搜索树

    只是为了记录每天的练习 要好好加油啊呜呜呜现在的我还太拉了 思路很直接啊 就是转进制 数字转字符串 class Solution public string convertToBase7 int num if num 0 特殊情况 retu
  • HelloSpring---第一个spring项目

    1 Spring概述 1 1 简介 Spring 春天 gt 给软件行业带来了春天 2002年 Rod Jahnson首次推出了Spring框架雏形interface21框架 2004年3月24日 Spring框架以interface21框
  • websocket php连接数,swoole websocket协程服务端 因为客户端连接数量过多崩溃

    问题描述 websocket 携程风格的服务端 同时300多个客户端连接的时候 PHP Fatal error Uncaught Error Maximum function nesting level of 256 reached abo
  • ARM汇编多寄存器寻址

    原文转自 http hi baidu com mugua item c43f37cc55a75d35ee4665e6 多寄存器和堆栈寻址的用法 多寄存器寻址 LDMIA LDMIB STMIA STMIB LDMDA LDMDB STMDA
  • 使用Python实现公司地址的(3-4级)标准化

    这个博客的目的是实现公司地址的模糊匹配与3 4级标准化 也可以迁移到房产信息 电话号码之类的字段上 本来的应用场景是反团伙欺诈以及失联客户的修复 大概的意思就是说多个相同公司的同事都在我公司借贷的欺诈可能性要高于其他客户 以及造假的房产信息

随机推荐

  • linux安装百度云盘

    之前window下一直使用绿色 你懂的 的百度云 但时切换到Ubuntu 系统之后 要下载好几个G的百度云资源却没有Linux版的客户端 网上又说使用bcloud 但是在16 04环境安装后总是登录不上 索性直接找了个浏览器插件下载 用起来
  • 股票API下单接口是怎样传入交易数据的?

    股票API下单接口传入交易数据的方法有四种 但主要使用的还是csvdatasetconfig和函数 不过基于当前的线程组或者请求创建CSV数据文件配置组件 如果这份数据只有这一个请求会用 那么就基于请求创建即可 如果这份数据会被这个线程组里
  • IDEA 快捷键等小技巧积累

    快捷键 全局搜索 Ctrl N 利用类名查找类文件 查看类继承关系 Ctrl H 查询某个符号被使用的所有地方 Alt F7 其他 自动导包 代码模板 code template
  • 【node.js】 Windows 下更新 node.js

    文章目录 一 node js 更新 一 查询 node js 版本 二 查询 node js 安装位置 三 官网下载安装包 四 安装到原位置 覆盖旧版本 二 npm 更新 一 查看版本 二 更新版本 三 yarn 更新 一 查看版本 二 更
  • (六)Java操作elasticSearch(2)

    Java操作elasticSearch 2 一 DSL查询文档 0 DSL 1 DSL查询分类 2 全文检索查询 3 精准查询 4 地理坐标查询 5 组合查询 二 搜索结果的处理 0 搜索结果处理整体语法 1 排序 2 分页 3 高亮 三
  • VMware Fusion 挂载物理机硬盘(整盘)

    以下操作前提 系统为 Mac OS OSX 安装了 VMware Fusion 实现原理 类似ESXI中的RDM映射 将物理硬盘映射到一个VM虚拟磁盘 可供VM选择的虚拟磁盘文件 首先查询本机硬盘情况 diskutil list 采用SCS
  • S50非接触式IC卡性能简介(M1)

    主要指标 容量为8K位EEPROM 分为16个扇区 每个扇区为4块 每块16个字节 以块为存取单位 每个扇区有独立的一组密码及访问控制 每张卡有唯一序列号 为32位 具有防冲突机制 支持多卡操作 无电源 自带天线 内含加密控制逻辑和通讯逻辑
  • chatgpt赋能python:Python主动抛出异常详解:了解如何正确地处理异常

    Python主动抛出异常详解 了解如何正确地处理异常 在Python开发中 异常处理是非常重要的一部分 可以使我们的程序更加健壮和可靠 然而并不是所有的错误都是由Python解释器捕获的 我们有时需要手动抛出异常 在本文中 我们将介绍Pyt
  • MPU6050 获取角度理论推导(二)---6轴融合算法

    接着上篇文章 https mp csdn net postedit 101777018 姿态角解算 互补滤波算法及理论推导 一般在程序中 姿态解算的方式有两种 一种是欧拉角法 一种是四元数法 这里不介绍欧拉角法 只介绍四元数法 互补滤波算法
  • makefile中关于all和.PHONY .cpp.o

    转自 http blog 163 com benben long blog static 199458243201110230292490 http blog csdn net wangxmin2005 article details 80
  • C 标准库 - 《locale.h》

    原文链接 https www runoob com cprogramming c standard library locale h html 简介 locale h 头文件定义了特定地域的设置 比如日期格式和货币符号 接下来我们将介绍一些
  • Java的Integer类

    1 用途 包装一个对象中的原始类型int的值 封装基本数据类型 int 将字符串转成基本数据类型 int 2 特点 类型为Integer的对象包含一个单一字段 其类型为int 此外 该类还提供了一些将int转换为String和String转
  • Git - 生成 SSH 公钥

    生成 SSH 公钥 如前所述 许多 Git 服务器都使用 SSH 公钥进行认证 为了向 Git 服务器提供 SSH 公钥 如果某系统用户尚未拥有密钥 必须事先为其生成一份 这个过程在所有操作系统上都是相似的 首先 你需要确认自己是否已经拥有
  • centos安装ruby

    可以使用 sudo yum install ruby 直接安装 但安装的是旧版本 不建议使用 1 去ruby官网直接下载安装包 http www ruby lang org en downloads 燃鹅 下载不了 那就借助 某雷吧 把安装
  • 查看linux是否已经安装了apache

    查看linux是否已经安装了apache 解决方法 查看linux是否已经安装了apache服务 可以通过执行 http www yayihouse com yayishuwu chapter 1800
  • 网易云params和encSecKey的获取

    网易云params和encSecKey的获取 params和encSecKey有什么用 软件准备 1 python及其对应的编辑器 推荐pycharm 2 发条js调试工具 我使用的是1 9版本 js代码分析 定位生成位置 分析传入参数 代
  • 关于软件设计使用中一些的原则简述

    概述 向大家介绍过一些软件开发的原则 比如优质代码的十诫和Unix传奇 下篇 中所以说的UNIX的设计原则 相信大家从中能够从中学了解到一些设计原理方面的知识 正如我在 再谈 我是怎么招聘程序 中所说的 一个好的程序员通常由其操作技能 知识
  • 雅思口语 九月新题 答案

    目录 你大概多长时间练习一次编程 你为什么选择这个专业 What are your career goals in the field of software engineering What sparked your interest i
  • uniapp-h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)

    uniapp h5中的文件流下载和指定的url下载总结 解决下载后的pdf打开空白情况 一 uniapp h5文件流下载 场景 之所以会有文件流需求 前端给到一些水印内容 然后后台会给文件加上我们给到的水印并以文件流形式返回 这里以pdf格
  • 汇编语言之字符串的比较和查找

    汇编语言之字符串的比较和查找 基础知识 串比较指令涉及两个串 目的串地址为ES DI 源串地址为DS SI 操作如下 1 字节 CMPSB 操作 ES DI DS SI DI 1 SI 1 2 字 CMPSW 操作 ES DI DS SI