4.2 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”

方法一:在程序内部设置两个字符串内容,终端返回是否匹配

运行效果:

思路:

1、先比较两个字符串的长度,如果长度不一样,则两组字符串肯定不匹配;如果长度一样,再进行内容的匹配

2、如果两组字符串长度一样,使用“REPE   CMPSB”指令比较两个字符串的内容是否相等。如果相等,打印MATCH;如果不相等,打印NO MATCH。

代码如下:

DATA SEGMENT
    STRING1 DB 'abcDEF'
    LEN1    DW $ - STRING1
    STRING2 DB 'abcDEF'
    LEN2    DW $ - STRING2
    STRING3 DB 'MATCH$'
    STRING4 DB 'NO MATCH$'
DATA ENDS
STACK SEGMENT stack
          DW  5 DUP(?)
          TOP LABEL WORD
STACK ENDS
CODE SEGMENT
          ASSUME CS:CODE,DS:DATA,SS:STACK
    START:
          MOV    AX,STACK
          MOV    SS,AX
          LEA    SP,TOP
          MOV    AX,DATA
          MOV    DS,AX
          MOV    ES,AX

          MOV    CX,LEN1
          CMP    CX,LEN2
          JNE    L1                          ;先比较两个字符串的长度,如果不相等,则肯定不匹配,打印no match
          LEA    SI,STRING1                  ;加载第一个字符串的地址
          LEA    DI,STRING2                  ;加载第二个字符串的地址
          CLD                                ;方向为正
          REPE   CMPSB                       ;比较两个字符串的字符,直到不相等或到达字符串末尾
          JNZ    L1                          ;如果不相等,则打印no match
          LEA    DX,STRING3                  ;如果相等,则打印match
          JMP    L2
    L1:   LEA    DX,STRING4
    L2:   MOV    AH,9                        ;显示字符串
          INT    21H
          MOV    AH,4CH
          INT    21H

CODE ENDS
      END START

方法二:在终端用户输入两组字符串,并在终端返回两组字符串是否相等

运行效果:

思路:

1、显示提示用户输入字符串1(STRING1)和字符串2(STRING2)的消息

2、接受用户输入的字符串1和字符串2

3、使用 repz cmpsb 指令比较字符串1和字符串2是否相同,如果相同则显示'MATCH',如果不相同则显示'NO MATCH'。

代码如下:

DATA SEGMENT
      MES1    DB  'STRING1:',0AH,0DH,'$'      ;带有换行和回车的字符串
      MES2    DB  'STRING2:',0AH,0DH,'$'
      MES3    DB  'MATCH$'
      MES4    DB  'NO MATCH$'
      STRING1 DB  512 dup('$')
      LEN     EQU $-STRING1                   ;计算字符串1的长度
      STRING2 DB  512 dup('$')
DATA ENDS

CODE SEGMENT
            ASSUME CS:CODE,DS:DATA
      START:
            MOV    AX,DATA
            MOV    DS,AX
            MOV    ES,AX
            MOV    CX,LEN
            MOV    DX,OFFSET MES1         ;显示字符串1,提示用户输入字符串1
            MOV    AH,9
            INT    21H

            MOV    DX,OFFSET STRING1
            MOV    AH,10                  ;输入字符串1
            INT    21H
            MOV    ah,02h                 ;显示字符串1
            MOV    dl,0dh                 ;回车
            INT    21h
            MOV    dl,0ah                 ;换行
            INT    21h

            MOV    DX,OFFSET MES2         ;显示字符串2,提示用户输入字符串2
            MOV    AH,9
            INT    21H

            MOV    DX,OFFSET STRING2
            MOV    AH,10                  ;输入字符串2
            INT    21H
            MOV    AH,02h                 ;显示字符串2
            MOV    DL,0Dh                 ;回车
            INT    21H
            MOV    DL,0Ah                 ;换行
            INT    21H
            MOV    DI,OFFSET STRING1
            MOV    SI,OFFSET STRING2
            REPZ   CMPSB                  ;比较字符串1和字符串2是否相同
            JZ     A2                     ;字符串相等
            JNZ    A3                     ;字符串不相等
      A3:   
            MOV    DX,OFFSET MES4         ;显示'NO MATCH'
            MOV    AH,9
            INT    21H
            JMP    A4
      A2:   
            MOV    DX,OFFSET MES3         ;显示'MATCH'
            MOV    AH,9
            INT    21H
      A4:   
            MOV    AH,4CH                 ;退出程序
            INT    21H
CODE ENDS
END START

方法一、方法二 总结:

1、通过上述代码,我们可以总结出打印一条字符串的通用方法

DATA SEGMENT

      MES1    DB  'STRING1:',0AH,0DH,'$'      ;带有换行和回车的字符串

DATA ENDS

CODE SEGMENT

            ASSUME CS:CODE,DS:DATA

START:

            MOV    DX,OFFSET MES1         ;显示字符串1,提示用户输入字符串1

            ;或者使用  LEA    DX,MES1

            MOV    AH,9

            INT    21H

CODE ENDS

END START

2、上述两种方法都使用了REPZ   CMPSB指令来比较两组字符串之间的内容是否相等

repe是一个串操作前缀,它重复串操作指令,每重复一次ECX的值就减1直到CX为0或ZF为0时停止。

cmpsb是字符串比较指令,把ESI指向的数据与EDI指向的数一个一个的进行比较。

所以repe cmpsb配合使用就是字符串的比较。当相同时继续比较,不同时不比较。

repe cmpsb指令解析-CSDN博客

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

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

相关文章

CSS学习笔记之中级教程(一)

1、CSS 布局 - display 属性 1.1 display 属性 display 属性是用于控制布局的最重要的 CSS 属性。 display 属性规定是否/如何显示元素。 每个 HTML 元素都有一个默认的 display 值,具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline。 …

R语言数据分析案例-巴西固体燃料排放量预测与分析

1 背景 自18世纪中叶以来,由于快速城市化、人口增长和技术发展,导致一氧化二氮(N2O)、 甲烷(CH4)和二氧化碳(CO 2)等温室气体浓度急剧上升,引发了全球变暖、海平面上 升…

计算机毕业设计hadoop+spark+hive知识图谱bilibili视频数据分析可视化大屏 视频推荐系统 预测系统 实时计算 离线计算 数据仓库

研究意义 随着互联网的快速发展,人们面临着海量的视频内容,如何从这些繁杂的视频中找到自己感兴趣的内容成为一个重要的问题[1]。推荐系统作为一种解决信息过载问题的重要工具,能够根据用户的历史行为和偏好,预测用户可能感兴趣的…

基于FPGA的数字信号处理(12)--定点数的舍入模式(3)收敛取整convergent

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式:收敛取整convergent。 10进制数的convergent convergent: 收敛取整。它的舍入方式和四舍五入非常类似,都是舍入到最近的整数&#x…

通过金山和微软虚拟打印机转换PDF文件,流程方法及优劣对比

文章目录 一、WPS/金山 PDF虚拟打印机1、常规流程2、PDF文件位置3、严重缺陷二、微软虚拟打印机Microsoft Print to Pdf1、安装流程2、微软虚拟打印机的优势一、WPS/金山 PDF虚拟打印机 1、常规流程 安装过WPS办公组件或金山PDF独立版的电脑,会有一个或两个WPS/金山 PDF虚拟…

leetcode-151 翻转字符串里的单词

一、题目描述 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 输入:s "the sky is blue" 输出:"blue is sky the"输入&#…

数据结构-查找-哈希表

一、哈希表的映射方法 1、直接定址法(值的分布范围集中) 比如统计字符串中字符出现的次数,字符范围集中。 2、除留余数法(值的分布范围分散) hashi key % n 但是这种方法会导致,哈希冲突:不同的值映射…

【Python探索之旅】初识Python

目录 发展史: 环境安装: 入门案例: 变量类型 标准数据类型 数字类型: 字符串: 全篇总结: 前言: Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设…

CSS 之 圆形波浪进度条效果

一、简介 ​ 本篇博客讲述了如何实现一个圆形波浪进度条的样式效果,具体效果参考下方GIF图。该样式的加载进度条可以用在页面跳转或数据处理等情况下的加载动画,比起普通的横条进度条来说,样式效果更生动美观。 实现思路: ​ 这…

Wikimedia To Opensearch

概览 Wikimedia ⇒ Kafka ⇒ OpensearchJava Library:OKhttp3和OkHttp EventSource;生产者:Wikimedia:WikimediaChangeHandler和WikimediaChangeProducer;消费者:Opensearch:OpenSearchConsume…

代码随想录-算法训练营day38【动态规划01:理论基础、斐波那契数、爬楼梯、使用最小花费爬楼梯】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part01● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯 详细布置 今天正式开始动态规划!理论基础 无论大家之前对动态规划学到什么程度,一定要先看…

【Linux】了解信号产生的五种方式

文章目录 正文前的知识准备kill 命令查看信号man手册查看信号信号的处理方法 认识信号产生的5种方式1. 工具2. 键盘3. 系统调用kill 向任意进程发送任意信号raise 给调用方发送任意信号abort 给调用方发送SIGABRT信号 4. 软件条件5. 异常 正文前的知识准备 kill 命令查看信号 …

项目8-头像的上传

js实现头像上传并且预览图片功能以及提交 - 掘金 (juejin.cn) 我们简单建立一个表 1.前端知识储备 1.1 addClass的使用 1.基本语法 addClass() 方法向被选元素添加一个或多个类。 该方法不会移除已存在的 class 属性,仅仅添加一个或多个 class 属性。 提示&…

CentOS使用Docker搭建Nacos结合内网穿透实现无公网IP远程登录本地管理平台

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Nacos Nacos是阿里开放的一款中间件,也是一款服务注册中心,它主要提供三种功能:持久化…

LeetCode题练习与总结:不同的二叉搜索树Ⅱ--95

一、题目描述 给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1: 输入:n 3 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,nul…

CNN/TCN/LSTM/BiGRU-Attention到底哪个模型效果最好?注意力机制全家桶来啦!

​ 声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 数据介绍 效果展示 原理简介 代…

Python---NumPy万字总结【此篇文章内容难度较大,线性代数模块】(3)

NumPy的应用(3) 向量 向量(vector)也叫矢量,是一个同时具有大小和方向,且满足平行四边形法则的几何对象。与向量相对的概念叫标量或数量,标量只有大小,绝大多数情况下没有方向。我们…

Ubuntu 超级终端Terminator常用使用技巧

Ubuntu 超级终端Terminator常用使用技巧 Terminator 是一款功能强大的终端模拟器,它特别适合于需要同时管理多个终端会话的用户。以下是如何在 Ubuntu 上使用 Terminator 的详细指南: 安装 Terminator 如果你的系统尚未安装 Terminator,你…

Prompt Engineering ,Fine-tuning , RAG ?

Prompt Engineering ,Fine-tuning , RAG 总结:1 prompt engineering2 RAG (Retrieval Augmented Generation)**RAG特点****RAG优势****RAG劣势** 3 微调(Fine-tuning)**微调特点****微调优势****微调劣势** 4 三者共性和区别5 RAG和微调的适应…

港中深「户外自重构蜗牛机器人集群」登Nature子刊!

在科幻电影《超能陆战队》中,我们见证了一种由成千上万个微小磁性单元组成的机器人通过磁力相互连接,形成各种复杂的三维结构。香港中文大学(深圳)林天麟教授团队致力于将这一科幻转化为现实,近年来开发了一系列自由形…