汇编实验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.mzph.cn/news/174864.shtml

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

相关文章

【Linux系统编程】操作系统详解(什么是操作系统?为什么会存在操作系统?设计操作系统的目的是什么?)

目录 一、前言 二、 什么是操作系统 💦操作系统的引入 💦操作系统的概念理解 💦操作系统设计的目的与定位 💦总结 二、操作系统之上之下分别有什么 三、深度理解操作系统的“管理” 💦场景理解 💦操…

2023信息技术应用创新论坛|云轴科技ZStack分享云原生超融合在智慧交通的应用

11月25日,2023信息技术应用创新论坛在常州开幕。江苏省工业和信息化厅副厅长池宇、中国电子工业标准化技术协会理事长胡燕、常州市常务副市长李林等领导出席论坛并致辞。中国工程院院士郑纬民出席并作主题报告。来自产学研用金等各界的千余名代表参加本次论坛。 在“…

GitHub上8个强烈推荐的 Python 项目

文章目录 前言1. Manim2. DeepFaceLab3. Airflow4. GPT-25. XSStrike6. 谷歌图片下载7. Gensim8. SocialMapper总结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③…

【刷题笔记】加油站||符合思维方式

加油站 文章目录 加油站1 题目描述2 思路3 解题方法 1 题目描述 https://leetcode.cn/problems/gas-station/ 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消…

Element-UI Upload 手动上传文件的实现与优化

文章目录 引言第一部分&#xff1a;Element-UI Upload 基本用法1.1 安装 Element-UI1.2 使用 <el-upload> 组件 第二部分&#xff1a;手动上传文件2.1 手动触发上传2.2 手动上传时的文件处理 第三部分&#xff1a;性能优化3.1 并发上传3.2 文件上传限制 结语 &#x1f38…

Jmeter工具学习三——CSV文件、关联、断言

Jmeter学习三——CSV文件和关联 jmeter做功能测试和做性能测试的区别CSV数据文件设置&#xff08;读取外部文件&#xff0c;进行分数据驱动&#xff09;文件设置字段介绍&#xff1a;文件名文件编码如果出现编码问题导致的乱码&#xff0c;如何解决&#xff1f; 变量名忽略首行…

【MATLAB】LMD分解+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 LMDFFTHHT组合算法是一种基于局部均值分解&#xff08;LMD&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;HHT&#xff09;的组合算法。 LMD是…

day65

今日回顾内容 web应用 HTTP协议 web应用 一、什么是web应用程序 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件 对于传统的应用软件来说&#xff0c;…

【iOS-UIImagePickerController访问相机和相册】

【iOS-UIImagePickerController访问相机和相册】 一. UIImagePickerController的介绍1 . UIImagePickerController的作用2 . UIImagePickerController的功能 二 . UIImagePickerController的测试程序 一. UIImagePickerController的介绍 1 . UIImagePickerController的作用 U…

Java小游戏飞翔的小鸟

游戏界面 运行界面 开发准备 1、eclipse开发工具 二、创建游戏窗口 Mains类作为主类&#xff0c;在mian方法下定义一个m1()方法&#xff0c;设置窗口。 //定义一个初始化的游戏窗口方法 public static void m1() {//获取底层窗口界面的工具类JFrame jf new JFrame();//创建…

「Verilog学习笔记」非整数倍数据位宽转换24to128

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 要实现24bit数据至128bit数据的位宽转换&#xff0c;必须要用寄存器将先到达的数据进行缓存。24bit数据至128bit数据&#xff0c;相当于5个输入数据第6个输入数据的拼接成一…

Nacos 2.X核心架构源码剖析

概述 注册中心并发处理&#xff0c;1.4.x 写时复制&#xff0c;2.1.0 读写分离&#xff1b;nacos 一般使用 AP 架构&#xff0c;即临时实例&#xff0c;1.4.x 为 http 请求&#xff0c;2.1.0 优化为 gRPC 协议&#xff1b;源码中使用了大量的事件通知机制和异步定时线程池&…

SpringBootWeb案例_01

Web后端开发_04 SpringBootWeb案例_01 原型展示 成品展示 准备工作 需求&环境搭建 需求说明&#xff1a; 完成tlias智能学习辅助系统的部门管理&#xff0c;员工管理 环境搭建 准备数据库表&#xff08;dept、emp&#xff09;创建springboot工程&#xff0c;引入对应…

初识Spring (Spring 核心与设计思想)

文章目录 什么是 Spring什么是容器什么是 IoC理解 Spring IoCDI 概念 什么是 Spring Spring 官网 官方是这样说的: Spring 让每个人都能更快、更轻松、更安全地进行 Java 编程。春天的 专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。 我们通常所说的 Spring 指的…

C++类与对象(6)—初始化列表、explicit关键字、static成员

目录 一、初始化列表 1、定义 2、注意事项 3、尽量使用初始化列表初始化 4、初始化顺序 二、 explicit关键字 1、定义 2、特点 三、static成员 1、定义 2、特性 3、例题 一、初始化列表 下面这段代码可以正常编译&#xff1a; class A { private:int _a1;//成员…

CGAN原理讲解与源码

1.CGAN原理 生成器&#xff0c;输入的是c和z&#xff0c;z是随机噪声&#xff0c;c是条件&#xff0c;对应MNIST数据集&#xff0c;要求规定生成数字是几。 输出是生成的虚假图片。 判别器的输入是 1.生成器输出的虚假图片x; 2.对应图片的标签c 来自真实数据集&#xff0c;且…

【深度学习】概率图模型(一)概率图模型理论简介

文章目录 一、概率图模型1. 联合概率表2. 条件独立性假设3. 三个基本问题 二、模型表示1. 有向图模型&#xff08;贝叶斯网络&#xff09;2. 无向图模型&#xff08;马尔可夫网络&#xff09; 三、学习四、推断 概率图模型&#xff08;Probabilistic Graphical Model&#xff0…

ROS知识:卡尔曼滤波

https://en.wikipedia.org/wiki/Kalman_filter 一、提要 在卡尔曼滤波的相关技术文献中,其数学表达看起来都非常晦涩和不透明。这很糟糕,如果您以正确的方式看待卡尔曼滤波器,它实际上非常简单易懂。这里的叙述简单,先决条件也很简单;您所需要的只是对概率和矩阵的基本了解…

【C++】友元

1. 友元的概念 友元的目的就是让一个函数或者类 访问另一个类中私有成员。 友元的三种实现&#xff1a; 全局函数做友元类做友元成员函数做友元 2. 友元的实现方式 2.1 全局函数做友元 #include <iostream> using namespace std; class Building {// 告诉编译器 go…

【Android Gradle】之一小时 Gradle及 wrapper 入门

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…