微机原理实验1:字符串匹配程序实验

一、实验目的

1.掌握分支程序的设计方法。
2.熟悉在PC机上建立、汇编、链接、调试和运行8086汇编程序的过程。

二、实验内容

1.比较两个字符串STRING1和STRING2所含的字符是否相同,若相同则显示‘Match’,否则显示‘No Match’。
2.修改程序,显示所比较字符的个数。

三、程序清单

DATAREA SEGMENT    ; 数据段
STRING1 DB      'Move the cursor backward.'
STRING2 DB      'Move the cursor backward.'MESS1   DB      'Match.',13,10,'$'
MESS2   DB      'No match.',13,10,'$'
DATAREA ENDS
PROGNAM SEGMENT    ; 代码段
MAIN    PROC    FARASSUME  CS:PROGNAM,DS:DATAREA,ES:DATAREA    
START:  PUSH    DSSUB     AX,AXPUSH    AXMOV     AX,DATAREAMOV     DS,AX    ; DS指向数据段MOV     ES,AX    ; ES指向数据段LEA     SI,STRING1    ; 源数据寄存器LEA     DI,STRING2    ; 目的数据寄存器CLD                   ; DF=0,向高地址增加MOV     CX,STRING2-STRING1    ; 字符串STRING1的长度REPZ    CMPSB                 ; 当CX!=0并且ZF=1时 重复执行后边的指令,每执行一次CX的值减1 ;CMPSB 指令比较 SI 指向的内存操作数与 DI 指向的内存操作数,按字节比较JZ MATCH                      ; 比较完ZF=1则 匹配,否则 不匹配LEA     DX,MESS2JMP DISP
MATCH:  LEA     DX,MESS1
DISP:   MOV     AH,09HINT     21HRET
MAIN    ENDP
PROGNAM ENDSEND     START

四、实验过程

1.用编辑器建立源文件D101-1.ASM
在这里插入图片描述
2.用汇编程序MASM.EXE对源文件进行汇编,产生目标文件,再用连接程序LINK产生可执行文件
在这里插入图片描述
3.使用调试工具DEBUG进行程序调试
先用U命令反汇编,以便了解指令地址。显示结果如下∶
在这里插入图片描述
将断点设置在程序的主要部分运行前。
在这里插入图片描述
用G命令将程序运行到寄存器初始化后暂停,查看当前数据段中的值,如下:
在这里插入图片描述
用R命令查看当前各个寄存器中的值如下:
在这里插入图片描述
用E命令将数据区的字符串backward,修改为forward.,如下:
在这里插入图片描述

五、实验结果分析

1.程序执行结果
在这里插入图片描述
通过E命令修改STRING2为“Move the cursor forward.”后再运行程序,得到结果为“No match.”,即两个字符串内容不相同,如下。但使用L命令重新加载程序,结果还是“Match.”,这正说明了DEBUG调试期间所修改的数据段或代码段的内容只是修改内存中的内容,而磁盘文件并未改变。
在这里插入图片描述在这里插入图片描述
重新进入编辑器,通过编辑代码修改字符串的内容,使它们互不相同,如下:
在这里插入图片描述
然后重新汇编、连接、执行。其运行结果应为: No match!
在这里插入图片描述
2.分析总结
首先,实验指导书上所给的程序缺少2行代码需要自己进行补齐,才可以实现本实验的目的和该程序的功能,这两行代码分别是JZ MATCH和JMP DISP。其中,第一句代码的功能是在CX寄存器递减到值为0时,如果此时源操作地址和目的操作地址中的字节相同,那么说明两个字符串是相同的,则跳转到匹配标号;否则不跳转,执行第二句JMP指令。

其次,该实验的核心所在是指令REPZ CMPSB,只要把该条指令的执行过程搞明白了,那么整个实验原理基本就没什么问题了,该条指令中REPZ其含义为:当CX!=0并且ZF=1时,则重复执行后面紧接着的指令即CMPSB,每执行一次CX的值减1;而CMPSB指令的含义为:按字节比较比较SI指向的内存操作数与DI指向的内存操作数,也就是对两个操作数进行相减的操作,显然该操作影响标志位,因此其后面一般跟随跳转指令,在该程序中为JZ MATCH。

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

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

相关文章

终于让Web前端和Tomcat(Java服务器)和MySQL(数据库)连在一起了

文章目录一、先在Web前端来个表单二、添加Tomcat依赖三、引入jdbc和dbutils四、编写Servlet类五、关联模块《踩坑排雷新版IDEA2021.1创建配置Javaweb项目并部署在Tomcat容器》 一、先在Web前端来个表单 如图在web项目目录下创建一个html文件。 文件内容可以参考如下。 <!D…

微机原理实验2:多字节BCD加法实验

一、实验目的 掌握数据传送、算术指令和循环指令的用法。 二、实验内容 将两个多位十进制数相加。要求加数,被加数均以ASCII码形式存放在以DATA1和DATA2为首的5个内存单元中( 低位在前)&#xff0c;结果存在DATA1处。 三、程序清单 CRLF MACRO …

微机原理实验3:键盘输入与显示实验

一、实验目的 了解移位指令的使用方法。 掌握子程序的调用方法&#xff0c;了解子程序的入口参数和出口参数。 二、实验内容 将键盘接收的四位十六进制数转换为二进制数&#xff0c;并显示在屏幕上。 三、程序清单 CRLF MACRO ;建立宏命令&a…

【JavaWeb】HTTP协议请求响应全解

文章目录一、HTTP简介二、请求报文三、请求方式四、媒体类型五、响应报文一、HTTP简介 HTTP&#xff1a;Hyper Text Transfer Protocol 超文本传输协议。HTTP最大的作用就是确定了请求和响应数据的格式。浏览器发送给服务器的数据&#xff1a;请求报文&#xff1b;服务器返回给…

【JavaWeb】一文Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

文章目录一、Servlet 概述二、Servlet HelloWorld三、Servlet 继承关系四、Servlet 生命周期五、ServletConfig 和 ServletContext六、请求转发与重定向七、获取请求参数一、Servlet 概述 1、Servlet名字 Servlet Server applet Server&#xff1a;服务器 applet&#xff1a;…

微机原理实验4:统计学生成绩

一、实验目的 掌握比较综合性的汇编程序设计流程&#xff0c;以及多分支情况下程序的设计技巧。 二、实验内容 设计程序统计学生数学成绩。分别归类90-99分、80-89分、70-79分、60-69分及60分以下&#xff0c;并将各段的人数及成绩存入对应的内存单元中&#xff0c;并在屏幕…

Spring Boot的Spring Data JPA示例

1.简介 在本文中&#xff0c;我们将演示如何利用功能强大的Spring Data JPA API与本课程中的数据库&#xff08;内存中的H2数据库&#xff09;进行交互。 Spring Data JPA提供了一组非常强大且高度抽象的接口&#xff0c;用于与任何基础数据库进行交互。 数据库可以是MySQL&am…

为什么写路径这事有点复杂?动态Web工程内编写路径【JavaWeb】

文章目录一、为什么要写路径&#xff1f;二、为什么写路径这事有点复杂&#xff1f;三、准则四、写路径的步骤五、动态获取上下文路径一、为什么要写路径&#xff1f; 整个系统要根据功能拆分成许许多多独立的资源资源之间既要完成自身的功能又要和其他资源配合写路径就是为了从…

Windows编程初步(一)

第一节&#xff1a;安装帮助文档 使用C语言进行Windows开发&#xff0c;必然使用到WindowsSDK。Windows SDK指Windows开发人员工具包&#xff0c;是为使用C语言开发Windows程序所提供的工具集。里面提供的工具异常全面丰富&#xff0c;很少有人能全部了解&#xff0c;在开发Wi…

2022大学生免费(24元)申请个人软著专利(微信小程序)

文章目录一、发放的软著证书二、申请流程概览三、官网提交申请四、纸质材料打印五、纸质材料邮寄六、模板及代码统计工具点击查看《再易江南》微信小程序 一、发放的软著证书 挂号信封 软著证书 点击查看《再易江南》微信小程序 二、申请流程概览 一般情况下&#xff0c;按照文…

Windows编程初步(二)

第二节&#xff1a;简单的Windows程序&#xff08;二&#xff09; 下面为这个程序增加一个菜单项&#xff1a; 首先设计用户菜单。在工作区里找到资源视图。点击Menu左边的号&#xff0c;双击出现的IDC_WIN_STEP1菜单。 图7 资源视图中的菜单 将help右边的虚框拖入左侧File菜…

Java数字分类给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1 = 能被5整除的数字中所有偶数的和;A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2+n3

题目描述&#xff1a; 给定一系列正整数&#xff0c;请按要求对数字进行分类&#xff0c;并输出以下5个数字&#xff1a; A1 能被5整除的数字中所有偶数的和&#xff1b; A2 将被5除后余1的数字按给出顺序进行交错求和&#xff0c;即计算n1-n2n3-n4…&#xff1b; A3 被5除后…

Windows编程之互动与动画

第五节&#xff1a; 考虑屏幕左侧一台坦克&#xff0c;向水平方向发射一枚炮弹,穿越屏幕。 很自然地&#xff0c;这场景中有坦克和炮弹两个对象&#xff0c;各自有各自坐标&#xff0c;坦克坐标是固定的&#xff0c;而炮弹坐标是变化的。因此有两个结构体类型&#xff1a;Tank…

Java福尔摩斯的约会大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧 3485djDkxh4hhGE 2984akDfkkkkggEdsb shgsfdk dHyscvnm”。大侦探很快就明白了

题目描述&#xff1a; 大侦探福尔摩斯接到一张奇怪的字条&#xff1a;“我们约会吧&#xff01; 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了&#xff0c;字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”&#xff0c;因为前面…

Windows编程之网络之邮件槽通讯

第6节 使用邮件槽传输数据 网络通讯的理论很复杂&#xff0c;可是初学者不考虑性能的话&#xff0c;可以使用很简单的模式。一般而言网络通讯有两种模式&#xff0c;点对点模式或者广播模式。点对点模式就像一对一辅导&#xff0c;双方都能听清楚对方说什么&#xff0c;并作出…

java 批量处理 示例_Java异常处理教程(包含示例和最佳实践)

java 批量处理 示例异常是可能在程序执行期间发生的错误事件&#xff0c;它会破坏其正常流程。 Java提供了一种健壮且面向对象的方式来处理异常情况&#xff0c;称为Java异常处理 。 我们将在本教程中研究以下主题。 Java异常处理概述 异常处理关键字 异常层次 有用的异常方…

Windows编程之多媒体

一、语音接口的使用: 第一步&#xff0c;安装MSSpeech SDK。 MSSpeech SDK可从网络课堂安装&#xff0c;也可在微软公司直接下载&#xff0c;安装完毕后具有了语音处理能力。 安装过程全选默认即可。 安装完毕后&#xff0c;在开始菜单中会增加MS Speech SDK 5.1&#xff0…

Windows编程之调用Matlab

一、选择matlab&#xff1a; 注意。Matlab的安装需要较长时间&#xff0c;建议本拓展在同学们自己的电脑上运行。 Matlab是大多数工科学生必修的科目&#xff0c;是一个口碑极佳的数学计算工具&#xff0c;可以支持立即运算和程序设计两种形式。Matlab较新的版本均提供32位版本…

Windows编程之使用外部动态链接库——纸牌

C语言功能强大的一个重要原因是因为具有丰富的库函数&#xff0c;例如字符串处理有string库&#xff0c;数学处理有math库。微软公司对程序库的支持又更进一步&#xff0c;提供了丰富的动态链接库。下面以微软操作系统内嵌的纸牌链接库为例写一个简单的小程序。 由于我们已经较…

netbeans7.4_使用NetBeans 7.4 beta提示进行更好的基于JUnit的单元测试

netbeans7.4在上一篇文章中 &#xff0c;我写了NetBeans 7.4 beta中提供的提示 &#xff0c;这些提示提高了开发人员避免Java异常处理带来的讨厌的运行时问题的能力。 在本文中&#xff0c;我将探讨如何使用NetBeans 7.4 beta提供的另外两个提示使单元测试在执行单元测试期间更…