汇编实验2-2 查找匹配字符串笔记

 一、数据段

        1.字符串结尾:13,10,'$'

        2.设置格式控制字符串(这样就不用再写clrf函数了)

        3.设置存关键字和句子的地址标签,以关键字为例

二、代码段

         1.输入字符串

         2.字符串比较

              2.1  每次的比较长度,KLEN->CL

              2.2  设置目标串起始位置

              2.3  比较         

              2.4  偏移地址++,并与目标串长度比较,判断是否出界

        3. 二进制转16进制

三、完整代码及注释 


 

 

一、数据段

        1.字符串结尾:13,10,'$'

        2.设置格式控制字符串(这样就不用再写clrf函数了)

    FORMAT  DB  13,10,'$'   ;格式

        3.设置存关键字和句子的地址标签,以关键字为例

  •  max1——最大长度限制
  •  KLEN——字符串的实际长度
  •  keywd——输入的内容
    KEYWORD Label byte      ;存关键字max1    DB  10KLEN    DB  ?keywd   DB  10  dup(?)

 二、代码段

  1.输入字符串

  • 将关键字缓冲区的地址加载到 DX 寄存器
  • 将中断 21H 的功能号设置为 0AH(缓冲输入)
  • 调用中断 21H 来执行缓冲输入操作

dfb294ca250a44f9aa8b35ccae183130.png

        LEA DX, KEYWORD  ;输入keywordMOV AH, 0AH      INT 21H

 2.字符串比较

      2.1  每次的比较长度,KLEN->CL

        MOV CL, KLEN   ;cl存keyword的长度

      2.2  设置目标串起始位置

        LEA BX, sentc   ;BX存sentence的基址ADD BL, AL      ;al是偏移地址MOV DI, BX      ;DI通常用来存目标字符串的地址

      2.3  比较 

  •  REPE CMPSB —— 以字节为单位进行比较
  • ZF = 0——匹配
            REPE CMPSB   ;以字节为单位进行比较,直到cx=0或不相等退出JZ MATCH     ;CMP是两数相减进行比较,jz=0表示相等

    2.4  偏移地址++,并与目标串长度比较,判断是否出界

            INC  ALCMP  AL, SLENJAE  NOT_MATCH

3. 二进制转16进制

BTOH PROC FARMOV CH, 4    ; 16/4, 处理四次ROTATE:MOV CL, 4    ; 一次处理四位ROL BX, CL   ; 循环左移四位,从最高四位开始处理(移到最低四位)MOV AL, BL   ; 取低8位AND AL, 0fh  ; 取低4位ADD AL, 30h  ; 转为数字字符CMP AL, 3AH  ; 9后面的数JB printADD AL, 7h   ; 转为字母print:MOV DL, ALMOV AH, 02INT 21HDEC CH JNZ ROTATE RET 
BTOH endp

三、完整代码及注释 

DATAS SEGMENTSTRING1 DB 'Enter keyword:$'STRING2 DB 'Enter sentence:$'STRING3 DB 'Match at location:$'STRING4 DB 'H of the sentence.',13,10,'$'   ;句号结尾,换行回车 STRING5 DB 'No match.',13,10,'$'FORMAT  DB  13,10,'$'   ;格式KEYWORD Label byte      ;存关键字max1    DB  10KLEN    DB  ?keywd   DB  10  dup(?)SENTENCE Label byte     ;存句子max2    DB  50SLEN    DB  ?sentc   DB  50 dup(?)DATAS ENDSSTACKS SEGMENTSTACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKSmain PROC farSTART:PUSH  DSXOR   AX, AXPUSH  AXMOV   AX, DATASMOV   DS, AXMOV   ES, AXLEA DX, STRING1MOV AH, 09INT 21HLEA DX, KEYWORD  ;输入keywordMOV AH, 0AH      INT 21HLEA DX, FORMAT  ;格式控制MOV AH, 09INT 21HINPUTSENTC:LEA DX, STRING2MOV AH, 09INT 21HLEA DX, SENTENCE   ;输入sentenceMOV AH, 0AHINT 21hLEA DX, FORMAT  ;格式控制MOV AH, 09INT 21HMOV AX, 0       ;清空AXLOOP_CMP:MOV CL, KLEN   ;cl存keyword的长度LEA SI, keywd  ;SI通常用来存源字符串的地址LEA BX, sentc  ;BX存sentence的基址ADD BL, AL      ;al是偏移地址MOV DI, BX      ;DI通常用来存目标字符串的地址REPE CMPSB   ;以字节为单位进行比较,直到cx=0或不相等退出JZ MATCH     ;CMP是两数相减进行比较,jz=0表示相等INC AL          ;偏移量++CMP AL, SLEN    ;判断是否到sentence末尾JAE NOT_MATCH   ;NOT MATCHJMP LOOP_CMP    ;继续比较MATCH:MOV BX, 0   ;为什么给bx,不直接用ax?1)MOV BL, AL  ;BL中存偏移量ADD BX, 1   ;从下标为1开始LEA DX, STRING3  MOV AH, 09  ;1) AX用处比较多INT 21H CALL BTOH   ;二进制转十六进制子程序LEA DX, STRING4MOV AH, 09INT 21HJMP INPUTSENTC  ;BTOH PROC FARMOV CH, 4    ; 16/4, 处理四次ROTATE:MOV CL, 4    ; 一次处理四位ROL BX, CL   ; 循环左移四位,从最高四位开始处理(移到最低四位)MOV AL, BL   ; 取低8位AND AL, 0fh  ; 取低4位ADD AL, 30h  ; 转为数字字符CMP AL, 3AH  ; 9后面的数JB printADD AL, 7h   ; 转为字母print:MOV DL, ALMOV AH, 02INT 21HDEC CH JNZ ROTATE RET 
BTOH endpNOT_MATCH:LEA DX, STRING5MOV AH, 09INT 21HJMP INPUTSENTCEXIT:RET
main endp
CODES ENDS
END START

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法效率的度量

算法效率的度量通常是通过时间复杂度和空间复杂度来描述的。 一、时间复杂度 算法中所有语句的执行次数之和为T(n),它是算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。 分类 1. 最好时间复杂度:最好情况下,算法的时间…

线程池在Java中的应用实践

摘要:在实际业务场景中,线程池发挥着重要作用。本文将详细解答在高并发、任务执行时间短、并发不高、任务执行时间长以及并发高、业务执行时间长的业务场景下,如何使用线程池进行优化。 一、高并发、任务执行时间短的业务场景 在高并发、任务…

华为鸿蒙开发(HarmonyOs开发):超详细的:DevEco Studio 的安装和配置 、华为第三方包依赖:SDK软件包的安装、Nodejs的导入配置

2023年11月28日20:00:00 ⚠️⚠️HarmonyOs 开发工具 ⚠️⚠️ ⚠️⚠️DevEco Studio 的安装和配置⚠️⚠️ 文章目录 一、打开鸿蒙开发工具官网二、下载 DevEco Studio三、配置 DevEco Studio四、错误处理 ⚠️⚠️⚠️❤️❤️ 关注了解更多 一、打开鸿蒙开发工具官网 下面…

Vatee万腾的数字探险之旅:vatee科技创新的新纪元

在数字时代的潮流中,Vatee万腾以其独特的数字探险之旅引领着科技创新的新纪元。这不仅是一次技术的进步,更是一场数字领域的探险,让我们一同探索Vatee在科技创新中的前沿地带。 Vatee万腾的数字探险起源于对未知的渴望和对创新的不懈追求。在…

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

文章目录 14.5 2012 Federal Election Commission Database(2012联邦选举委员会数据库)1 Donation Statistics by Occupation and Employer(按职业与雇主划分的捐赠数据)2 Bucketing Donation Amounts(桶捐赠额&#x…

Go 编程语言详解:用途、特性、与 Python 和 C++ 的比较

什么是Go? Go是一个跨平台、开源的编程语言Go可用于创建高性能应用程序Go是一种快速、静态类型、编译型语言,感觉上像动态类型、解释型语言Go由Robert Griesemer、Rob Pike和Ken Thompson于2007年在Google开发Go的语法类似于C Go用于什么? Web开发&…

ELK高级搜索,深度详解ElasticStack技术栈-上篇

前言 1、黑马视频地址:java中级教程-ELK高级搜索,深度详解ElasticStack技术栈 2、本内容仅用于个人学习笔记,如有侵扰,联系删除 1. 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch(简称es)、Lo…

【测试工具推荐】提高测试效率的必备工具分享!

说在前头 大家🐒啊,我是小🍬,小伙伴们一般都叫我苏苏。我在软件 测试 行业有5年的经验,目前是一家小公司技术部门的测试主管。 在社会上,特别是技术圈,大家会有刻板印象:测试工作的…

移植NXP官方uboot到IMX6ULL开发板--以及过程中遇到的疑问和错误记录

目录 1 下载uboot源码 2在uboot中添加自己的开发板 2.1 添加开发板默认配置文件 疑问:defconfig文件里面为什么没有CONFIG_SYS_EXTRA_OPTIONS"IMX_CONFIGboard/freescale/mx6ullevk/imximage.cfg,MX6ULL_EVK_EMMC_REWORK" 2.2 添加开发板对应的头文…

【MVP矩阵】裁剪空间、NDC空间、屏幕空间

裁剪空间概述 裁剪空间是一个顶点乘以MVP矩阵之后所在的空间,Vertex Shader的输出就是在裁剪空间上(划重点) NDC空间概述 接上面,由GPU自己做透视除法将顶点转到NDC空间 两者的转换 透视除法将Clip Space顶点的4个分量都除以…

抽象类-Java

抽象类 一、父类方法的不确定性二、抽象类介绍三、抽象类细节四、练习题 一、父类方法的不确定性 引入:对于一个动物,不知道它吃什么,比如猫吃鱼,兔子吃萝卜。动物类中的 eat 方法往往由它的子类去具体实现。 class Animal {pub…

百度人工智能培训第一天笔记

参加了百度人工智能初步培训,主要是了解一下现在人工智能的基本情况,以便后续看可以参与一些啥? 下面就有关培训做一些记录,以便后续可以继续学习。 一、理论基础部分 二、实际操作部分 主要学习的百度人工智能平台如下&#xf…