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

本文主要是介绍4.2 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

运行效果:

思路:

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

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

代码如下:

DATA SEGMENTSTRING1 DB 'abcDEF'LEN1    DW $ - STRING1STRING2 DB 'abcDEF'LEN2    DW $ - STRING2STRING3 DB 'MATCH$'STRING4 DB 'NO MATCH$'
DATA ENDS
STACK SEGMENT stackDW  5 DUP(?)TOP LABEL WORD
STACK ENDS
CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV    AX,STACKMOV    SS,AXLEA    SP,TOPMOV    AX,DATAMOV    DS,AXMOV    ES,AXMOV    CX,LEN1CMP    CX,LEN2JNE    L1                          ;先比较两个字符串的长度,如果不相等,则肯定不匹配,打印no matchLEA    SI,STRING1                  ;加载第一个字符串的地址LEA    DI,STRING2                  ;加载第二个字符串的地址CLD                                ;方向为正REPE   CMPSB                       ;比较两个字符串的字符,直到不相等或到达字符串末尾JNZ    L1                          ;如果不相等,则打印no matchLEA    DX,STRING3                  ;如果相等,则打印matchJMP    L2L1:   LEA    DX,STRING4L2:   MOV    AH,9                        ;显示字符串INT    21HMOV    AH,4CHINT    21HCODE ENDSEND START

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

运行效果:

思路:

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

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

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

代码如下:

DATA SEGMENTMES1    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 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV    AX,DATAMOV    DS,AXMOV    ES,AXMOV    CX,LENMOV    DX,OFFSET MES1         ;显示字符串1,提示用户输入字符串1MOV    AH,9INT    21HMOV    DX,OFFSET STRING1MOV    AH,10                  ;输入字符串1INT    21HMOV    ah,02h                 ;显示字符串1MOV    dl,0dh                 ;回车INT    21hMOV    dl,0ah                 ;换行INT    21hMOV    DX,OFFSET MES2         ;显示字符串2,提示用户输入字符串2MOV    AH,9INT    21HMOV    DX,OFFSET STRING2MOV    AH,10                  ;输入字符串2INT    21HMOV    AH,02h                 ;显示字符串2MOV    DL,0Dh                 ;回车INT    21HMOV    DL,0Ah                 ;换行INT    21HMOV    DI,OFFSET STRING1MOV    SI,OFFSET STRING2REPZ   CMPSB                  ;比较字符串1和字符串2是否相同JZ     A2                     ;字符串相等JNZ    A3                     ;字符串不相等A3:   MOV    DX,OFFSET MES4         ;显示'NO MATCH'MOV    AH,9INT    21HJMP    A4A2:   MOV    DX,OFFSET MES3         ;显示'MATCH'MOV    AH,9INT    21HA4:   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博客

这篇关于4.2 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/988272

相关文章

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创