汇编语言-实验四 字符串的匹配与替换程序设计
微机原理实验2程序字符串匹配实验
8086汇编语言程序实验:实验二、字符串匹配实验题目:1、(必做题)编程实现:从键盘分别输入两个字符串(不必等长),然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MATCH”。
2、(选做题)编程实现:从键盘分别输入两个字符串,然后进行比较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。
对应程序如下所示:;第1题;====================================HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。
MOV DL,0DH ;用2号功能“显示”回车。
MOV AH,02HINT 21HMOV DL,0AH ;用2号功能“显示”换行。
MOV AH,02HINT 21HENDMDA TA SEGMENTMESSAGE1 DB 'MATCH','$' ;定义“MATCH”提示信息,“$”作为调用9号功能的结束符。
MESSAGE2 DB 'NO MATCH','$' ;定义“NO MA TCH”提示信息。
TISHI1 DB 'Please input the first string:','$' ;提示输入第1个字符串的提示信息。
TISHI2 DB 'Please input the second string:','$' ;提示输入第1个字符串的提示信息。
STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。
DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。
DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。
STRING2 DB 100DB ?DB 100 DUP(?)DA TA ENDSSTACK SEGMENT ;定义一个50字节大小的堆栈段空间。
字符串匹配汇编语言程序设计
学号:课程设计题目字符串匹配汇编语言程序设计学院自动化学院班级电气1003班姓名申廷进指导教师徐腊梅2013 年01 月17 日课程设计任务书学生姓名:申廷进专业班级:电气1003班指导教师:徐腊梅工作单位:自动化学院题目: 字符串匹配汇编语言程序设计要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1)根据提示信息,从字符输入两个字符串,实现两个字符串的比较,如果两个字符串的字符只要有一个相同则显示“MATCH”,否则显示“NOMATCH”。
2)可连续输入字符进行比较,直至单击“Q”或“q”键退出程序。
时间安排:1.9 课设题目,设计内容;1.9—1.10 查资料,算法、方案设计。
1.10—1.13 (硬)软件设计1.14—1.15 调试程序1.16—1.17 写课设报告1.18 答辩指导教师签名:年月日系主任(或责任教师)签名:年月日1 设计总体方案 (2)1.1 设计目的 (2)1.2 设计要求及其条件 (2)1.3 设计方案 (2)2 程序流程图分析 (3)2.1 转移流程图的分析 (3)2.2 流程图总体分析 (3)3 程序段落的说明 (5)3.1 换行回车键的定义 (5)3.2 提示信息和字符串的定义 (5)3.3 DOS功能和部分指令的说明 (6)4 程序调试说明、结果记录与分析 (7)4.1 程序调试说明 (7)4.2 调试结果说明 (7)4.3 分析结果 (9)5心得体会 (9)参考文献 (11)附件 (12)微型计算机简称微机,由于其具备人脑的某些功能,所以也称其为微电脑。
是由大规模集成电路组成的、体积较小的电子计算机。
它是以微处理器为基础,配以内存储器及输入输出接口电路和相应的辅助电路而构成的裸机。
把微型计算机集成在一个芯片上即构成单片微型计算机。
学习微机课程,主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言、设计以及微型计算机各个组成部分,而汇编语言是其中一大板块。
VBA中常用的字符串匹配和替换方法
VBA中常用的字符串匹配和替换方法在VBA中,字符串匹配和替换是常见的操作,可以帮助我们实现对文本的处理和转换。
本文将介绍VBA中常用的字符串匹配和替换方法,帮助读者更好地应用这些技巧。
在VBA中,实现字符串匹配和替换有多种方式,取决于我们的需求和具体的情况。
下面将介绍一些常用的方法。
1. 使用InStr函数进行字符串匹配InStr函数用于在一个字符串中查找子字符串的位置。
它返回子字符串在主字符串中第一次出现的位置。
我们可以利用这个函数来判断一个字符串是否包含某个特定的子字符串。
例如,我们可以使用以下代码来判断一个字符串变量str1是否包含子字符串"abc":```If InStr(str1, "abc") > 0 Then' 字符串包含子字符串"abc"Else' 字符串不包含子字符串"abc"End If```2. 使用Replace函数进行字符串替换Replace函数用于将一个字符串中的某个子字符串替换为另一个字符串。
它接受三个参数:原始字符串、被替换的子字符串和替换的字符串。
以下是一个简单的示例:```Dim str2 As Stringstr2 = "Hello, World!"str2 = Replace(str2, "Hello", "Hi")' 将"Hello"替换为"Hi"```在替换过程中,VBA会从左到右依次匹配并替换每一个子字符串。
如果替换的子字符串在原始字符串中出现多次,那么所有的匹配都会被替换。
需要注意的是,Replace函数是区分大小写的。
如果需要进行不区分大小写的替换,可以使用StrComp函数进行比较。
3. 使用Regular Expressions对象进行正则表达式匹配VBA中的正则表达式匹配可以使用Regular Expressions对象实现。
查找匹配字符串程序设计
中北大学汇编语言程序设计课程设计说明书学生姓名:学号:学院:信息与通信工程学院专业:自动化题目:查找匹配字符串程序设计指导教师:沈小林安道新职称:副教授助教2011年6月25日中北大学汇编语言程序设计实验课程设计任务书10/11 学年第二学期学院:信息与通信工程学院专业:自动化学生姓名:学号:课程设计题目:查找匹配字符串程序设计起迄日期:06月20日~06月25日课程设计地点:中北大学指导教师:沈小林安道新系主任:王忠庆下达任务书日期: 2011年06月20日课程设计任务书课程设计任务书一、绪论汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。
高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。
在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。
现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。
汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。
二、程序设计目的及程序设计要求通过对任意字符串中是否有匹配字符串的检索,掌握分支及循环程序设计及调试过程。
本次课程设计的任务是设计一个查找匹配字符串的程序,程序的具体功能是接收用户由键盘输入一个长度不大于80个字符的字符串,回车键结束;由键盘输入匹配任意字符串,以回车键结束;如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。
该程序实现的功能是查找匹配的字符串。
在程序中用“Enter Sentence:”表示输入一个长度不大于80个字符的字符串的提示符,即句子;“Enter keyword:”表示输入匹配字符串的提示符,即关键字。
leetcode字符串中的查找与替换c语言
一、介绍字符串的查找与替换是编程中常见的操作,对于C语言来说,如何高效地实现字符串的查找与替换是一项基础且重要的技能。
在解决实际问题中,经常会遇到需要对字符串进行查找与替换的情况,因此掌握相关的技术非常重要。
二、字符串的查找在C语言中,可以使用标准库中的字符串处理函数来实现字符串的查找操作。
其中常用的函数包括strstr()、strchr()和strcmp()等。
以下是这些函数的使用方法和示例:1. strstr()函数strstr()函数用于在一个字符串中查找另一个子串,返回第一次出现该子串的位置。
示例如下:```c#include <stdio.h>#include <string.h>int m本人n() {char str[] = "Hello, world!";char *substr = "world";char *ptr = strstr(str, substr);printf("找到子串:s\n", ptr);} else {printf("未找到子串\n");}return 0;}```2. strchr()函数strchr()函数用于在一个字符串中查找指定字符,返回第一次出现该字符的位置。
示例如下:```c#include <stdio.h>#include <string.h>int m本人n() {char str[] = "Hello, world!";char ch = 'o';char *ptr = strchr(str, ch);if(ptr) {printf("找到字符:s\n", ptr);printf("未找到字符\n");}return 0;}```3. strcmp()函数strcmp()函数用于比较两个字符串的大小关系,返回值为0表示两个字符串相等。
汇编课程设计-字符串查找与替换-何荣贤
《汇编语言程序设计》课程设计题目:字符串查找与替换专业:计算机科学与技术学号:**********姓名:***2011-2012学年第一学期一.设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。
根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。
课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。
通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。
二.设计内容3.功能描述:1.对已有的文件(预先建立)内容进行扫描统计。
(字符数,行数)2.字符串查找操作3.字符串替换操作,替换后的文件内容另存入一结果文件,原文件内容不变4.显示结果文件内容编程要点:1.目标文件及结果文件必须和程序文件在同一目录下(当前目录)2.原文件内容必须50行以上3.字符串查找、替换过程要显示当前行及前几行、后几行的内容,以便按键选择继续查找或是否替换代码4.字符串查找或者替换操作结束后,要显示查找到的字符串个数、已经替换的字符串个数。
三.程序设计原理1.主程序程序开始打开原文件,将文件内容读到内存缓冲区TEXT后,关闭原文件。
接着显示主菜单,接收用户输入一个字符,实现不同的功能:a.输入‘1’,则调用子程序STATISTICS,对TEXT中的文件内容进行扫面统计(字符数、行数);b.输入‘2’,则调用子程序SEARCH,进行字符串的查找操作;c.输入‘3’,则调用子程序REPLACE,进行字符串的替换操作;d.输入‘4’,则调用子程序DISPLAY,将TEXT的内容显示出来;e.输入‘5’,则退出程序;f.输入其他字符,则显示提示信息,重新输入。
2.子程序STATISTICS由于显示屏为25*80,每行至多显示80个字符,所以要依次对TEXT中的每个字节进行扫描,使用CMP指令判断该字节是否为空格符、回车符、换行符:a.若为空格符则BX加1,再比较BX是否小于80,小于则继续判断下一个字节,等于则将BX清零,统计的行数LINE_COUNT加1,再继续判断下一个字节;b.若为回车符则直接判断下一个字节;c.若为换行符则将BX清零,统计的行数LINE_COUNT加1,再继续判断下一个字节;d.若为字符,则统计的字符数CHAR_COUNT加1,BX加1,再比较BX是否小于80,小于则继续判断下一个字节,等于则将BX清零,统计的行数LINE_COUNT加1,再继续判断下一个字节;统计完成后调用子程序BINIDEC用十进制显示统计结果。
【字符串匹配】BM(Boyer-Moore)字符串匹配算法详解总结(附C++实现代码)
【字符串匹配】BM(Boyer-Moore)字符串匹配算法详解总结(附C++实现代码)BM算法思想的本质上就是在进⾏模式匹配的过程中,当模式串与主串的某个字符不匹配的时候,能够跳过⼀些肯定不会匹配的情况,将模式串往后多滑动⼏位。
BM算法寻找是否能多滑动⼏位的原则有两种,分别是坏字符规则和好后缀规则。
坏字符规则:我们从模式串的末尾往前倒着匹配,当我们发现某个字符⽆法匹配时,我们把这个⽆法匹配的字符叫做坏字符(主串中的字符)。
此时记录下坏字符在模式串中的位置si,然后拿坏字符在模式串中查找,如果模式串中并不存在这个字符,那么可以将模式串直接向后滑动m位,如果坏字符在模式串中存在,则记录下其位置xi,那么模式串向后移动的位数就是si-xi,(可以在确保si>xi,执⾏减法,不会出现向前移动的情况)。
如果坏字符在模式串中多次出现,那我们在计算xi的时候,选择最靠后的那个,这样不会因为让模式串滑动过多,导致本来可能匹配的情况被略过。
好后缀规则:在我们反向匹配模式串时,遇到不匹配时,记录下当前位置j位坏字符位置。
把已经匹配的字符串叫做好后缀,记作{u}。
我们拿它在模式串中查找,如果找到了另⼀个跟{u}相匹配的字串{u*},那么我们就将模式串滑动到字串{u*}与主串{u}对齐的位置。
如下图所⽰:如果在模式串中找不到另⼀个等于{u}的⼦串,我们就直接将模式串滑动到主串中{u}的后⾯,因为之前的任何⼀次往后滑动,都没有匹配主串中{u}的情况。
但是这种滑动做法有点太过头了,可以看下⾯的例⼦,如果直接滑动到好后缀的后⾯,可能会错过模式串与主串可以匹配的情况。
如下图:当模式串滑动到前缀与主串中{u}的后缀有部分重合的时候,并且重回部分相等的时候,就可能会存在完全匹配的情况。
所以针对这种情况我们不仅要看好后缀在模式串中,是否有另⼀个匹配的字串,我们还要考察好后缀的后缀字串是否存在跟模式串的前缀字串匹配的情况。
如下图所⽰:最后总结如何确定模式串向后滑动的位数,我们可以分别计算好后缀和坏字符往后滑动的位数,然后取两个数中最⼤的。
微机原理__字符匹配程序实验报告
太原理工大学现代科技学院课程实验报告专业班级学号姓名指导教师一、实验目的掌握提示信息的使用方法及键盘输入信息的用法。
二、实验内容1、编写程序,实现两个字符串比较。
如果两个字符串中有一个字符相同,显示“MATCH”,否则,显示“NO MATCH”。
2、程序框图三、所用仪器与软件仪器:电脑一台软件:Masm for Windows 集成实验环境 2009、7四、实验方法、步骤1、编写程序代码2、运行程序,修改错误代码3、再次运行代码直至运行出正确结果五、源码程序编制及分析注释CRLF MACRO 宏定义MOV AH,02H AH=02HMOV DL,0DH DL=0DHINT 21H 系统功能调用,输出回车字符MOV AH,02H AH=02HMOV DL,0AH DL=0AINT 21H 系统功能调用,输出换行符ENDM 宏定义结束DATA SEGMENT 定义数据段MESS1 DB 'MATCH',0DH,0AH,'$' 定义8个数据储存单元MESS2 DB 'NO MATCH',0DH,0AH,'$' 定义11个数据储存单元MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' 定义17个数据储存单元MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' 定义17个数据储存单元MAXLEN1 DB 81 定义最大长度为81个字节ACTLEN1 DB ?STRING1 DB 81 DUP (?) 定义STRING1长度为81 MAXLEN2 DB 81 定义最大长度为81ACTLEN2 DB ?STRING2 DB 81 DUP (?) 定义STRING2长度为81DATA ENDS 数据段结束STACK SEGMENT STACK 定义堆栈段STA DB 50 DUP (?) 定义50个数据储存单元TOP EQU LENGTH STA 给TOP赋值50STACK ENDS 堆栈段结束CODE SEGMENT 定义代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK 定义段基址START: MOV AX,DATAMOV DS,AX 把DATA的首地址赋给DSMOV ES,AX 把DATA的首地址赋给ESMOV AX,STACKMOV SS,AX 把STACK的首地址赋给SSMOV SP,TOP 给SP赋值50MOV AH,09H AH=09HMOV DX,OFFSET MESS3 把MESS3的偏移地址赋给DXINT 21H 系统功能调用MOV AH,0AH AH=0AHMOV DX,OFFSET MAXLEN1 把MAXLEN1的偏移地址赋给DXINT 21H 系统功能调用CRLFMOV AH,09H AH=09HMOV DX,OFFSET MESS4 把MESS4的偏移地址赋给DXINT 21H 系统功能调用MOV AH,0AH AH=0AHMOV DX,OFFSET MAXLEN2 把MAXLEN2的偏移地址赋给DXINT 21H 系统功能调用CRLFCLDMOV SI,OFFSET STRING1 把STRING1的偏移地址赋给SIMOV CL,[SI-1] 把SI-1内的内容赋给CLMOV CH,00H CH=00HKKK: MOV DI,OFFSET STRING2 把STRING2的偏移地址赋给DI PUSH CX 将CX压入堆栈MOV CL,[DI-1] 将DI-1内的的内容赋给CLMOV CH,00H CH=00HMOV AL,[SI] 将SI内的内容赋给ALMOV DX,DI 将DI赋给DXREPNZ SCASB 寻找第一个相同字符JZ GGG ZF=0执行GGG否则顺序执行INC SI SI自加1POP CX 弹出CXLOOP KKK 跳转到KKK循环MOV AH,09HMOV DX,OFFSET MESS2INT 21H 系统功能调用JMP PPP 跳转到PPPGGG: MOV AH,09HMOV DX,OFFSET MESS1INT 21H 输出MESS1PPP: MOV AX,4C00HINT 21H 带返回码结束CODE ENDS 代码段结束END START 整个程序结束六、实验结果与分析实验结果如下:(1)两个字符串中没有字符相同:(2)两个字符串中有两个字符相同:。
详解Ruby中正则表达式对字符串的匹配和替换操作
详解Ruby中正则表达式对字符串的匹配和替换操作正则匹配说起Ruby当然要提起它的正则表达式机制,正则表达式作为⼀个强⼤的匹配语⾔已经越来越多的使⽤到不同的领域当中,从字符串验证,匹配,到⽹页抽取等。
虽然有些⼈诟病与正则表达式的匹配效率,但是考虑到正则的强⼤匹配能⼒也就⽆所谓了。
说起Ruby正则表达式不就不能不说起Ruby的=~和match两种匹配⽅式,我们还是⽤实例来说明⼀下这两种匹配⽅式的区别吧。
先来说⼀说=~的⽤法吧:message="afhadhffkdf414j"regex=/[a-z](\d{3})[a-z]/puts regex=~messagemessage="afhadhffkdf414j"regex=/[a-z](\d{3})[a-z]/puts regex=~message在Ruby当中是⽤//来表⽰正则表达式匹配语句的。
⼤家可以运⾏⼀下,上⾯的语句是匹配三个数字两边都是⼩写字母的⼀个字符串。
我们运⾏上⾯代码,将会出现结果10.你⼀定很奇怪,为什么会出现10这个结果,这就是=~的魅⼒,他是将匹配结果的⾸次出现位置打印出来。
那下⾯我们来看看match吧:message="afhadhffkdf414j"regex=/[a-z](\d{3})[a-z]/puts regex.match(message)message="afhadhffkdf414j"regex=/[a-z](\d{3})[a-z]/puts regex.match(message)我们来看看输出结果吧:f414j。
该字符串表⽰的正则语句匹配的所有符合规则的结果集。
不知道⼤家注意到没,我们在正则表达式⾥⾯⽤到了括号,我们希望抽取出三个数字就可以了。
当然这也很简单,我们只需要在上⾯的代码当中稍作修改即可:message="afhadhffkdf414j"regex=/[a-z](\d{3})[a-z]/regex.match(message)puts $1message="afhadhffkdf414j"regex=/[a-z](\d{3})[a-z]/regex.match(message)puts $1结果⾃然是414.为什么要使⽤$1⽽不是$0呢,我们看看$0的结果吧。
字符串匹配算法的原理和实现
字符串匹配算法的原理和实现随着互联网应用的广泛普及,各种搜索引擎、数据挖掘等技术越来越受到人们的关注。
在很多应用中,我们需要对文本进行匹配,即在一段文本中查找某个字符串是否出现过,或者查找多个字符串在文本中的位置。
这就需要用到字符串匹配算法,本文将介绍字符串匹配算法的原理和实现。
一、暴力匹配算法暴力匹配算法是最朴素的字符串匹配算法,也称为朴素算法或者蛮力算法。
它的原理非常简单,就是从文本的第一个字符开始依次比较,如果匹配失败,则将文本的指针后移一位,开始下一次比较。
具体实现可以用以下代码表示:```int search(string pattern, string text) {int n = text.length();int m = pattern.length();for(int i = 0; i < n - m + 1; i++) {int j;for(j = 0; j < m; j++) {if(pattern[j] != text[i+j]) {break;}}if(j == m) {return i;}}return -1;}```该算法的时间复杂度为O(nm),其中n和m分别是文本和模式串的长度。
当模式串非常短时,该算法的效率还可以接受,但是当模式串很长时,算法效率就会变得很低,甚至比较文本中的每个字符都慢。
因此,我们需要更加快速和高效的算法来实现字符串匹配。
二、KMP算法KMP算法全称为Knuth-Morris-Pratt算法,它是一种比暴力匹配算法更加高效的字符串匹配算法,可以在O(n+m)的时间复杂度内完成字符串匹配。
KMP算法的基本思想是利用匹配失败后的信息来避免无谓的比较,具体过程如下:1.计算模式串的前缀函数(Prefix Function)。
前缀函数的定义是:对于模式串P的每个位置i(0 <= i < m),对应的前缀函数(Pi)表示模式串的第0个位置到第i个位置的最长的,既是最前面的,也是最后面的,与整个模式串P的某个前缀相等的后缀的长度。
(完整word版)串的查找和替换
#include <stdio.h>
#include <stdlib.h>
#define SIZE 20 /*查找单词字符和输入替换单词少于20 */
#define MAXLEN 10000 /*文章字符不大于10000 */
void main(void)
{
int i, j;
int flag; /*用于标记匹配单词*/
{
printf("文件打开失败!\n");
exit(1);
}
while (!feof(fp))/*读文件*/
{
strOne[countOne++] = fgetc(fp);
}
countOne--;/*减去最后一个文件结束字符*/
for (i=0; i<countOne; i++)
{
if (keyWords[0] == strOne[i])/*判断查找单词第一个字符是否匹配*/
}
}
else/*另外*/
{
strTwo[countTwo++] = strOne[i];
}
}
fclose(fp);
if (NULL == (fp = fopen("c:\\abc.txt", "w")))/*写入文件*/
{
printf("文件打开失败!\n");
exit(1);
}
for (i=0Βιβλιοθήκη i<countTwo; i++)/*写入文件*/
#define MAXLEN 10000 /*文章字符不大于10000 */
串的查找与替换程序设计报告
中北大学数据结构课程设计说明书2011年12月20日1.设计任务概述(包括系统总体框图及功能描述)总体框图:功能描述:1:输出原内容;2:输入要查找的字符串,系统会给出所匹配字符串的个数;3:替换字符串,输入目的字符串,再输入所要替换的内容,系统会将替换后的文件输出,并保存修改后的文件。
2.本设计所采用的数据结构(如:链表、栈、树、图等)数组str[500]保存从文件中读取的字符chazhao[15]保存被替换的单词tihuan[15]保存要替换的单词3.功能模块详细设计initstr()从文件初始化数组inputchatihuan()从键盘输入要替换的单词charu(char source[],int index,char dest[])把要替换的单词插入到被替换单词的位置tihuans()调用函数是实现替换3.1 详细设计思想先建立一个文件,然后从文件中读取字符串保存到数组中。
从键盘输入被替换的单词,然后删除这个单词。
从键盘中输入替换的单词,把它插入到被删除的单词的位置。
然后把该字符串再写入到文件中3.2 核心代码#include<stdio.h>#include<stdlib.h>#include<string.h>FILE* fp;char str[500];char chazhao[15];char tihuan[15];/*从文件初始化数组*/void initstr(){int i=0;fp=fopen("string.txt","r");/*重新打开文件*/while(!feof(fp)){str[i]=fgetc(fp);i++;}str[--i]='\0';fclose(fp);}/*输入要替换的字符串*/void inputchatihuan(){ printf("Please input chaozhao sting:\n");scanf("%s",chazhao);printf("Please input tihuan string:\n");scanf("%s",tihuan);getchar();}/*查找第一个出现要查找字符的下标*/int chazhaostring(){int i,j,k;for(i=0;i<strlen(str);i++){ j=i;k=0;while((str[j]==chazhao[k])&&(chazhao[k]!='\0')&&(str[j]!='\0')) { j++;k++;}if(chazhao[k]=='\0') return i;}return -1;}/*查看文章中共有多少个要查找的字符*/void chazhaos(){int i,j,k,all=0;printf("Please input chaozhao sting:\n");scanf("%s",chazhao);for(i=0;i<strlen(str);i++){ j=i;k=0;while((str[j]==chazhao[k])&&(chazhao[k]!='\0')&&(str[j]!='\0')){ j++;k++;}if(chazhao[k]=='\0') all++;}printf("chazhao successed!\n");printf("gong zhao dao le %d ge %s",all,chazhao);printf("\nPress anykey return.....");getchar();getchar();}/*从指定的下标开始插入dest数组中的元素*/void charu(char source[],int index,char dest[]){int i,j,k,m;/*第一步,计算串dest的长度,存入j*/j=strlen(dest);/*第二步,计算串source的长度,存入k*/k=strlen(source);source[j+k]='\0';i=j+k-1;m=k-1;while(m>=index){source[i]=source[m];i--;m--;}i=index; m=0;while(m<j){source[i]=dest[m];i++;m++;}}/*将str中要替换的内容替换掉*/void tihuans(){int a,b=0;inputchatihuan();do{ a=chazhaostring();b=a;if(b==-1){printf("the word doesn't exit!\n"); return;}else{ while(str[b+strlen(chazhao)]!='\0') {str[b]=str[b+strlen(chazhao)];b++;}str[b]='\0';charu(str,a,tihuan);}a=chazhaostring();}while(a!=-1);printf("tian huan succeed\n");printf("\nPress anykey return.....");getchar();/*保存修改后的文章信息*/void save(){ int i=0;FILE *fp;fp=fopen("string.txt","w");while(i<strlen(str)){fputc(str[i],fp);i++;}}void welform(){clrscr();printf(" SYSTEM MAIN MENU \n"); printf("*****************************************\n");printf("* 1: shuchuneirong *\n");printf("*---------------------------------------*\n");printf("* 2: chazhao *\n");printf("*---------------------------------------*\n");printf("* 3: tianhuan *\n");printf("*---------------------------------------*\n");printf("* 0: quit *\n");printf("*****************************************\n");printf("\n\nPlease input order:\n");}void main(){char ch;initstr();while(1){welform();scanf("%d",&ch);switch(ch){case 1:clrscr();printf("%s\n",str);getchar();getchar();break; case 2:clrscr();chazhaos();break;case 3:clrscr();tihuans();break;case 0:save(); exit(0);default: printf("\nYou hava input the wrong order!\n");printf("Press anykey return.....");getchar();getchar();}}}3.3 程序运行结果(拷屏)4.课程设计心得、存在问题及解决方法经过两个星期的课程设计,过程曲折可谓一语难尽。
汇编语言-实验四字符串的匹配与替换程序设计
汇编语言-实验四字符串的匹配与替换程序设计实验四字符串的匹配与替换程序设计一、实验目的1)掌握串操作指令的使用方法。
2)掌握串处理程序的设计方法。
3)熟练使用各种程序结构。
二、实验内容1)编制两个字符串比较子程序。
2)编制在一个字符串中查找给定字符串的程序。
3)编写程序把从键盘输入的以回车为结束符的字符串中的空格去掉并按相反的顺序输出。
4)编写程序在字符串STRING1中指定位置插入字符串STRING2。
5)编写程序在字符串STRING1中指定位置删除子串。
三、源程序EXAM4-1DATA SEGMENTSTR1 DB 'MES'STR2 DB 'MESS'STR3 DB 'MATCH$'STR4 DB 'NOT MATCH$'DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,4MOV DI,OFFSET STR1MOV SI,OFFSET STR2REPZ CMPSBJZ LAB1JNZ LAB2LAB1:MOV DX,OFFSET STR3MOV AH,09HINT 21HMOV AH,4CHINT 21HLAB2:MOV DX,OFFSET STR4MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND STARTEXAM4-2DATA SEGMENTMESS1 DB 'ENTER KEYWORD:','$'MESS2 DB 'ENTER SENTENCE:','$'MESS3 DB 'NO MATCH!',13,10,'$'MESS4 DB 'MATCH AT LOCATION:','$'MESS5 DB 'H OF THE SENTENCE、',13,10,'$' CHANGE DB 13,10,'$'SEN1 LABEL BYTEMAX1 DB 14ACT1 DB ?STOKN1 DB 14 DUP(?)SEN2 LABEL BYTEMAX2 DB 100ACT2 DB ?STOKN2 DB 100 DUP(?)DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATAMOV DS,AXLEA DX,MESS1MOV AH,09HINT 21HLEA DX,SEN1MOV AH,0AHINT 21HLEA DX,CHANGEMOV AH,09HINT 21HSUB CX,CXA10:LEA DX,MESS2MOV AH,09HINT 21HLEA DX,SEN2MOV AH,0AHINT 21HLEA DX,CHANGEMOV AH,09HINT 21HCMP ACT2,0 JE EXITMOV BX,0A20:MOV CL,[ACT1] LEA SI,STOKN1 LEA AX,STOKN2 ADD AL,BL MOV DI,AX CLDREP CMPSBJZ A30INC BLCMP BL,ACT2 JE A40JMP A20A30:LEA DX,MESS4 MOV AH,09H INT 21HMOV AH,02H ADD BL,1 MOV CL,4 ROL AL,CL MOV CL,2 JMP A50A1:LEA DX,MESS5 MOV AH,09H INT 21HJMP A10A40:LEA DX,MESS3MOV AH,09HINT 21HJMP A10A50:DEC CLAND AL,0FHCMP AL,10JNB A60ADD AL,'0'A2:MOV DL,ALMOV AH,02HINT 21HCMP CL,0JE A1MOV AL,BLJMP A50A60:SUB AL,10ADD AL,'A'JMP A2 EXIT:RETMAIN ENDP CODE ENDS END START。
字符串匹配实验
8086汇编语言程序实验:实验二、字符串匹配实验题目:1、(必做题)编程实现:从键盘分别输入两个字符串(不必等长),然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MATCH”。
2、(选做题)编程实现:从键盘分别输入两个字符串,然后进行比较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。
对应程序如下所示:;第1题;====================================HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。
MOV DL,0DH ;用2号功能“显示”回车。
MOV AH,02HINT 21HMOV DL,0AH ;用2号功能“显示”换行。
MOV AH,02HINT 21HENDMDA TA SEGMENTMESSAGE1 DB 'MATCH','$' ;定义“MATCH”提示信息,“$”作为调用9号功能的结束符。
MESSAGE2 DB 'NO MATCH','$' ;定义“NO MATCH”提示信息。
TISHI1 DB 'Please input the first string:','$' ;提示输入第1个字符串的提示信息。
TISHI2 DB 'Please input the second string:','$' ;提示输入第1个字符串的提示信息。
STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。
DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。
DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。
STRING2 DB 100DB ?DB 100 DUP(?)DA TA ENDSSTACK SEGMENT ;定义一个50字节大小的堆栈段空间。
实验三 字符串操作实验(设计性实验)
实验三字符串操作实验(设计性实验)一、实验要求和目的1.了解汇编语言字符串处理基本流程;2.熟悉汇编语言字符串处理基本指令的使用方法;3.掌握利用汇编语言实现字符串处理的程序设计方法。
二、软硬件环境1、硬件环境:计算机系统 windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。
三、实验涉及的主要知识1、字符串处理基本操作流程(1)利用SI 寄存器保存源串首地址;(2)利用DI 寄存器保存目的串首地址;(3)利用CX 寄存器保存字符串长度;(4)利用CLD 或STD 指令设置字符串处理方向;(5)利用字符串处理指令实现相关处理。
其中,CLD 指令使DF=0,在执行串处理指令时可使地址自动增量;STD 使DF=1,在执行串处理指令时可使地址自动减量。
字符串处理一般都涉及到源串和目的串,汇编语言规定源串在数据段中定义,目的串在附加段中定义。
2、重复前缀指令,重复次数由计数寄存器CX 中存放的值决定,指令每重复执行一次,计数器CX 中值减1,当CX 中值减至0 时,停止重复执行,继续执行下一条指令REP 无条件重复前缀,重复串操作直到计数寄存器的内容CX 为0 为止。
经常与REP配合工作的字符串处理指令有MOVS、STOS 和LODS。
REPE/REPZ 判断计数寄存器的内容CX 是否为0 或ZF=0(即比较的两个操作数不等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS 和SCAS。
REPNE/REPNZ 判断计数寄存器的内容是否为0 或ZF=1(即比较的两个操作数相等),只要满足一个则重复执行结束,否则继续执行。
可以与REPE/REPZ 配合工作的串指令有CMPS 和SCAS。
3、字符串处理基本指令(1)MOVS 传送指令格式:MOVS DST,SRC 或MOVSB(传送字节)或MOVSW(传送字)。
后面两种形式需要与REP 指令结合使用。
汇编语言程序设计实验报告
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
汇编语言中的字符串、代码转换
一个字符串中包含的字符个数,称为这个字符串的长度。长度为 零的字符串称为空串,它不包含任何字符。字符串通常用单引号或 双引号括起来,例如:
Hale Waihona Puke 3.LODS取串指令格式:可有三种 LODS SRC;源串元素由DS:SI指定的存储单元,目的串元素隐 含在由DS:AL或DS:AX指定的存储单元 LODSB; 8位字符串操作,省略源串和目的串不写 LODSW; 16位字符串操作,省略源串和目的串不写 功能:该指令把由SI指定的数据段中某单元[SI]的内容送到AL或 AX中,并根据方向标志及数据类型修改SI的内容。 说明: 1)如果是字节操作则先将由SI指定的单元内容送入AL中,然后 SI再自加/减1;如果是字操作则将[SI]送入AX,然后SI再自加/减 2。 2)该指令不影响标志位。
(1) ” X1 ” (2) ’ABC’
返回本节
字符串所能包含的字符,依赖于具体机器的字符集。目前世 界上应用最广的字符集是ASCII码字符集。 存储字符串的方法也就是存储列表的一般方法。最简单最普遍的 方法是顺序存储,还有链接存储等,这里仅讨论顺序存储的字符 串。 字符串的表示在8086/8088宏汇编语言中,可以借助数据定义语 句DB(因一个ASCII码是7位)来定义,字符串的特征表示一般有 两种,一种是在字符串的尾部用00H作标记,另一种是在字符串的 前面空出一个单元,放置字符串的长度。例: STRI DB ’ I am a student’,0 STR2 DB 4,’ABCD’
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四字符串的匹配与替换程序设计
一、实验目的
1)掌握串操作指令的使用方法。
2)掌握串处理程序的设计方法。
3)熟练使用各种程序结构。
二、实验内容
1)编制两个字符串比较子程序。
2)编制在一个字符串中查找给定字符串的程序。
3)编写程序把从键盘输入的以回车为结束符的字符串中的空格去掉并按相反的顺序输出。
4)编写程序在字符串STRING1中指定位置插入字符串STRING2。
5)编写程序在字符串STRING1中指定位置删除子串。
三、源程序
EXAM4-1
DATA SEGMENT
STR1 DB 'MES'
STR2 DB 'MESS'
STR3 DB 'MATCH$'
STR4 DB 'NOT MATCH$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE ,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV CX,4
MOV DI,OFFSET STR1
MOV SI,OFFSET STR2
REPZ CMPSB
JZ LAB1
JNZ LAB2
LAB1:
MOV DX,OFFSET STR3
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
LAB2:
MOV DX,OFFSET STR4
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
EXAM4-2
DATA SEGMENT
MESS1 DB 'ENTER KEYWORD:','$'
MESS2 DB 'ENTER SENTENCE:','$'
MESS3 DB 'NO MATCH!',13,10,'$'
MESS4 DB 'MATCH AT LOCATION:','$'
MESS5 DB 'H OF THE SENTENCE.',13,10,'$' CHANGE DB 13,10,'$'
SEN1 LABEL BYTE
MAX1 DB 14
ACT1 DB ?
STOKN1 DB 14 DUP(?)
SEN2 LABEL BYTE
MAX2 DB 100
ACT2 DB ?
STOKN2 DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,ES:DATA START:
MOV AX,DATA
MOV DS,AX
LEA DX,MESS1
MOV AH,09H
INT 21H
LEA DX,SEN1
MOV AH,0AH
INT 21H
LEA DX,CHANGE
MOV AH,09H
INT 21H
SUB CX,CX
A10:
LEA DX,MESS2
MOV AH,09H
INT 21H
LEA DX,SEN2
MOV AH,0AH
INT 21H
LEA DX,CHANGE
MOV AH,09H
INT 21H
CMP ACT2,0
JE EXIT
MOV BX,0
A20:
MOV CL,[ACT1]
LEA SI,STOKN1
LEA AX,STOKN2
ADD AL,BL
MOV DI,AX
CLD
REP CMPSB
JZ A30
INC BL
CMP BL,ACT2
JE A40
JMP A20
A30:
LEA DX,MESS4
MOV AH,09H
INT 21H
MOV AH,02H
ADD BL,1
MOV CL,4
ROL AL,CL
MOV CL,2
JMP A50
A1:
LEA DX,MESS5
MOV AH,09H
INT 21H
JMP A10
A40:
LEA DX,MESS3
MOV AH,09H
INT 21H
JMP A10
A50:
DEC CL
AND AL,0FH
CMP AL,10
JNB A60
ADD AL,'0'
A2:
MOV DL,AL
MOV AH,02H
INT 21H
CMP CL,0
JE A1
MOV AL,BL
JMP A50
A60:
SUB AL,10
ADD AL,'A'
JMP A2 EXIT:
RET
MAIN ENDP CODE ENDS
END START。