当前位置: 首页 > news >正文

实验一 字符串匹配实验

一、实验目的               

1.熟悉汇编语言编程环境和DEBUG调试程序的使用。

2.掌握键盘输入字符串的方法和分支程序的设计。

二、实验内容

编程实现:从键盘分别输入两个字符串,然后进行比较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。

三、实验程序(必须加注释)和结果

程序代码:

; 定义一个名为crlf的宏,用于输出回车(0DH)和换行(0AH)

crlf    macro

        ; 功能:输出回车符

        mov ah,2

        mov dl,0dh

        int 21h

        ; 功能:输出换行符

        mov ah,2

        mov dl,0ah

        int 21h

        endm

; 定义数据段

DATAS SEGMENT

    ; 定义一个字符串常量,表示匹配成功的消息

    MESS1 DB 'MATCH',0DH,0AH,'$'

    ; 定义一个字符串常量,表示匹配失败的消息

    MESS2 DB 'NO MATCH',0DH,0AH,'$'

    ; 定义一个字符串常量,用于提示输入第一个字符串

    MESS3 DB 'INPUT STRING1:',0DH,0AH,'$'

    ; 定义一个字符串常量,用于提示输入第二个字符串

    MESS4 DB 'INPUT STRING2:',0DH,0AH,'$'

    ; 定义一个包含个人信息的字符串常量

    MESS5 DB 'GUOZHIHONG  Kruanjian221 2022900624',0DH,0AH,'$'

    ; 定义一个字符串常量,用于提示按任意键继续或按ESC键退出

    MESS6 DB 'Press any key to continue or press ESC exit',0DH,0AH,'$'

    ; 定义一个缓冲区用于存储输入的第一个字符串,最多21个字符

    STR1  DB 21,?,21 DUP(0)

    ; 定义一个缓冲区用于存储输入的第二个字符串,最多21个字符

    STR2  DB 21,?,21 DUP(0)

    ; 此处可添加更多数据段相关代码,如果有的话

DATAS ENDS

; 定义代码段

CODES SEGMENT

    ASSUME CS:CODES,DS:DATAS,es:datas

START:

again: ; 循环开始的标签,用于实现多次执行字符串比较操作

    MOV AX,DATAS

    MOV DS,AX

    ; 输出包含个人信息的字符串

    mov ah,9

    mov dx,offset mess5

    int 21h

    ; 输出提示输入第一个字符串的消息

    mov ah,9

    mov dx,offset mess3

    int 21h

    ; 输入第一个字符串到STR1缓冲区

    mov ah,0ah

    mov dx,offset str1

    int 21h

    crlf ; 调用crlf宏,输出回车换行

    ; 输出提示输入第二个字符串的消息

    mov ah,9

    mov dx,offset mess4

    int 21h

    ; 输入第二个字符串到STR2缓冲区

    mov ah,0ah

    mov dx,offset str2

    int 21h

    crlf ; 调用crlf宏,输出回车换行

    ; 比较两个输入字符串的长度(第一个字符为实际长度)

    mov cl,str1 + 1

    cmp cl,str2 + 1

    jnz noequ ; 如果长度不相等,跳转到noequ标签

    mov ch,0

    mov si,offset str1+2

    mov di,offset str2 + 2

next:

    mov al,[si]

    cmp al,[di]

    jnz noequ ; 如果对应字符不相等,跳转到noequ标签

    inc si

    inc di

    loop next

    ; 如果字符串完全匹配,输出匹配成功的消息

    mov ah,9

    mov dx,offset mess1

    int 21h

    jmp post_judgment

noequ:

    ; 如果字符串不匹配,输出不匹配的消息

    mov ah,9

    mov dx,offset mess2

    int 21h

    jmp post_judgment

post_judgment:

    ; 输出按任意键继续或按ESC键退出的提示消息

    mov ah,9

    mov dx,offset mess6

    int 21h

    mov ah, 0

    int 16h ; 读取键盘输入

    cmp al, 1BH ; 比较输入是否为ESC键(ASCII码为1BH)

    je exit ; 如果是ESC键,跳转到exit标签退出程序

    jmp again ; 如果不是ESC键,跳转到again标签开始下一轮循环

exit:

    MOV AH,4CH

    INT 21H

CODES ENDS

END START

相关文章:

  • HDMI与DVI接口热插拔检测
  • STM32单片机入门学习——第37节: [11-2] W25Q64简介
  • GPT4O画图玩法案例,不降智,非dalle
  • 13-scala模式匹配
  • QML与C++:基于ListView调用外部模型进行增删改查(附自定义组件)
  • Golang|Channel 相关用法理解
  • 大模型SAM辅助labelme分割数据集(纯小白教程)
  • Java栈与队列深度解析:结构、实现与应用指南
  • 用密钥方式让通过JumpServer代理的服务器可以在我本地电脑直接访问
  • Java 设计模式:外观模式详解
  • 5.6 GitHub PR分析爆款方案:分层提示工程+LangChain实战,准确率飙升22%
  • 什么是RAG
  • Nodejs Express框架
  • 【ai回答记录】在sql中使用DATE_SUB 跟 用python或者java的Date计算时间差,哪个速度更加快?
  • 214、【数组】下一个排列(Python)
  • 目标追踪数据标注
  • WITRAN_2DPSGMU_Encoder 类
  • Lombok库
  • 电子电器架构 --- 智能座舱的定义
  • [Linux]umask及其设置
  • 呈现“民族脊梁型爱国学府”曲折辉煌的办学历程,这个展览开幕
  • 快评|对华关税或“大幅下降”,市场压力之下特朗普“急于与中国达成协议”
  • 海南陵水一酒店保洁员调包住客港币,被判刑一年六个月
  • 外媒:特朗普称或将“大幅降低”对中国的关税
  • 国际货币基金组织报告:将今年全球经济增长预期由此前的3.3%下调至2.8%
  • 开发国内首个泌尿专科智能体,医生们将临床经验转变为知识图谱