用汇编语言实现字符的匹配

合集下载

汇编:汇编语言实现判断一个字符串是否是另一个字符串的字串

汇编:汇编语言实现判断一个字符串是否是另一个字符串的字串

汇编:汇编语⾔实现判断⼀个字符串是否是另⼀个字符串的字串 1;==========================================2;循环程序设计3;判断⼀个字符串是否出现在另⼀个字符串中4 DATAS SEGMENT5 string1 db "your finger can change the world",06 string2 db "finger",07 flag db ? ;存在为1 不存在为08 DATAS ends9 CODES SEGMENT10 ASSUME CS:CODES, DS:DATAS11START:12mov AX,DATAS13mov DS,AX14;正式的代码开始15mov BX,offset string216mov AX,offset string1 ;si存放⽬标字符串的偏移地址1718dec AX19while1:;while1判断string2的⾸字母与string1 的哪⼀个⾸字母相等20mov si,AX21mov di,BX ;di存放带判断字符串的偏移地址22inc si23inc AX24xor cx,cx25mov ch,[si] ;ch存放string1中的⼀个字符26mov cl,[di] ;cl存放string2中的⼀个字符27cmp ch,028jz flag0 ;判断是否已经为最后⼀个字符,如果是则跳转29cmp ch,cl30jnz while13132while2:;while2判断string2的其余字母与string1 的其余字母是否相等33inc di34inc si35inc dx ;si di⾃增判断其余字符36xor cx,cx37mov ch,[si] ;ch存放string1中的⼀个字符38mov cl,[di] ;cl存放string2中的⼀个字符39cmp cl,040jz flag1 ;string2已经到最后⼀个字符说明相等4142cmp ch,0;string1已经是最后⼀个字符43jz flag04445cmp ch,cl46jz while2 ;如果两个字符相等则继续循环判断⼀个字符47jnz while1 ;不等则进⾏循环14849flag0:50mov flag,051jmp exit52flag1:53mov flag,154jmp exit55exit:56xor cx,cx57mov cl,flag58add cl,30h59mov flag,cl60print:;向屏幕打印输出判断结果61lea si,flag62mov byte ptr[si+1],'$';加上结束符63mov dx,si64mov ah,09h65int 21H66mov ah,4ch67int 21H68 CODES ends69 end START。

汇编语言实验7实验报告

汇编语言实验7实验报告

汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。

二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。

三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。

为了方便起见,我们可以先规定字符串的最大长度为100。

接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。

然后,我们需要使用INT 21H中断来读取用户输入的字符串。

具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。

接着,我们需要将该字符串逆序输出到屏幕上。

为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。

具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

20个简单汇编语言程序

20个简单汇编语言程序

20个简单汇编语言程序汇编语言是一种底层编程语言,其语法简洁、速度快,被广泛应用于嵌入式系统和设备驱动程序的开发。

本文将介绍20个简单的汇编语言程序,帮助读者了解该语言的基本语法和用法,以便更好地进行编程。

1. 程序1:将两个数相加并显示结果。

这个程序演示了如何使用汇编语言进行简单的算术操作。

2. 程序2:计算并显示斐波那契数列。

这个程序展示了如何使用循环和条件语句来求解数学问题。

3. 程序3:判断一个数是否是素数。

这个程序演示了如何使用分支语句来进行逻辑判断。

4. 程序4:将一个字符串逆序输出。

这个程序展示了如何使用栈来实现字符串逆序。

5. 程序5:计算一个字符串的长度。

这个程序展示了如何使用循环和计数器来确定字符串的长度。

6. 程序6:将一个字符串转换为大写。

这个程序演示了如何使用位运算来进行字符转换。

7. 程序7:计算一个数的阶乘。

这个程序展示了如何使用循环和累加运算来求解阶乘。

8. 程序8:判断一个字符串是否是回文。

这个程序演示了如何使用循环和栈来进行字符串回文判断。

9. 程序9:实现快速排序算法。

这个程序展示了如何使用递归和分区操作来进行快速排序。

10. 程序10:实现冒泡排序算法。

这个程序演示了如何使用循环和比较操作来进行冒泡排序。

11. 程序11:计算一个数组的平均值。

这个程序展示了如何使用循环和累加运算来求解平均值。

12. 程序12:查找一个数组中的最大值。

这个程序演示了如何使用循环和比较操作来进行最大值查找。

13. 程序13:判断一个数是否是回文。

这个程序展示了如何使用循环和取余操作来进行数字回文判断。

14. 程序14:实现字符串拼接操作。

这个程序演示了如何使用循环和指针操作来进行字符串拼接。

15. 程序15:实现矩阵乘法运算。

这个程序展示了如何使用循环和累加运算来进行矩阵乘法。

16. 程序16:计算一个数的平方根。

这个程序演示了如何使用二分法和近似计算来求解平方根。

17. 程序17:实现字符串匹配操作。

汇编语言查找匹配字符串

汇编语言查找匹配字符串

汇编语言实验二查找匹配字符串一、目的查找匹配字符串SEARCH二、实验内容程序接收用户键入的一个关键字以及一个句子。

如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。

流程图三、设计和编码DATA SEGMENTmess1 DB 'Enter keyword:','$'mess2 DB 'Enter Sentence:','$'mess3 DB 'Match at location:','$'mess4 DB 'NOT MATCH.',13,10,'$'mess5 DB 'H if the sentence',13,10,'$' N YY Y输入关键字结束关键字长度=0输入句子句子长度<关键字长度Y保存关键字长度到cx ,cx 入栈,保存总循环次数(句子长度-关键字长度+1)到al ,将句子的首地址放进bx(作为基址寄存器) si=di=0(变址寄存器)开始比较[bx+di]与[si]是否相等si+1,di+1,cx-1(同时指向下一个字符)YN bx+1(句子指向下一个字符) cx 出栈,再入栈,si,di 清零,al-1 cx 是否为0N 匹配完成,调用子程序输出al 是否为0 不匹配,输出change DB 13,10,'$'stoknin1 label bytemax1 db 10act1 db?stokn1 db 10 dup(?)stoknin2 label bytemax2 db 50act2 db?stokn2 db 50 dup(?)DATA ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENT;*************************************代码段main proc farassume cs:code,ds:data,es:dataSTART:push dssub AX,AXsub BX,BXsub DI,DIsub SI,SIpush AX ;为返回dos并清空后面要用到的寄存器MOV AX,DATAMOV DS,AXLEA DX,mess1MOV ah,09INT 21h ;输出Enter keywordLEA DX,stoknin1MOV ah,0ah ;用21号中段的0ah号功能获取关键字INT 21hcmp act1,0je exit ;如果为空直接退出程序a10:;********************************输入Sentence并判断LEA DX,changeMOV ah,09INT 21h ;输出回程,换行LEA DX,mess2MOV ah,09INT 21h ;输出Enter Sentence:LEA DX,stoknin2MOV ah,0ahINT 21h ;用21号中段的0ah号功能获取句子MOV AL,act1CBWMOV CX,AX ;保存关键字长度到cxPUSH CX ;cx入栈MOV AL,act2cmp AL,0je a50 ;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1js a50 ;若句子长度小于关键字长度,则跳转显示not match INC ALCBWLEA BX,stokn2 ;将句子的首地址放进BXMOV DI,0MOV SI,0a20:;****************************************比较,内循环MOV AH,[BX+DI]CMP AH,stokn1[SI] ;遇见字符不相等就跳转到a30jne a30INC DIINC SIDEC CX ;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完CMP CX,0je a40jmp a20a30:;*****************************************外循环,BX+1,清空si,di继续内循环比较INC BXDEC ALcmp AL,0je a50MOV DI,0MOV SI,0POP CXpush CXjmp a20a40:;*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出SUB BX,offset stokn2INC BXLEA DX,changeMOV ah,09INT 21hLEA DX,mess3MOV ah,09INT 21hCALL btohLEA DX,mess5MOV ah,09INT 21hjmp a10;****************************************二进制转换十六进制btoh PROC NEARMOV CH,4rotate: MOV CL,4ROL BX,CLMOV AL,BLand AL,0fhadd AL,30hcmp al,3ahjl printitadd al,7hprintit:MOV dl,alMOV ah,2int 21hdec chjnz rotateretbtoh endpa50:;*****************************************显示not matchLEA DX,changeMOV ah,09INT 21hLEA DX,mess4MOV ah,09INT 21hjmp a10exit:retmain endpCODE ENDSEND START 四、运行结果及分析五、实验小结六、附录(选)。

汇编语言实现在指定字符串中搜索字符A的方法

汇编语言实现在指定字符串中搜索字符A的方法

汇编语⾔实现在指定字符串中搜索字符A的⽅法我也不知道我以前怎么会写这种东西的,留个纪念…;⽤串操作指令设计程序,实现在指定字符串中搜索字符‘A',;若该字条串中有字符'A',;则将第⼀个'A'字符在该字符串中的位置记录在BX寄存器中,;若不包含,则使BX=0FFFFH。

;在程序开始查找指定字符前要求在屏幕上输出提⽰信息:;The program is running!查找结束后输出信息:the program is over!DATAS SEGMENTSTRING DB 'CDAFX246hk'NO DW 10FALSE DW 0FFFFHSTR1 DB 'The program is running!$'STR2 DB 0DH,0AH,'The program is over!$'DATAS ENDSSTACKS SEGMENTDW 20 DUP(?)STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXMOV ES,AXLEA DX,STR1MOV AH,09HINT 21HMOV BX,FALSELEA DI,STRINGMOV AL,'A'MOV CX,NOREPNE SCASBCMP CX,0JE COUNTDEC DIMOV BX,DICOUNT:LEA DX,STR2MOV AH,09HINT 21HMOV AH,4CHINT 21HCODES ENDSEND START以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

汇编语言典型例子详解汇编语言例子

汇编语言典型例子详解汇编语言例子汇编语言典型例子详解汇编语言是一种底层的编程语言,用于与计算机硬件进行交互和控制。

在计算机科学领域,学习汇编语言例子可以帮助我们深入了解计算机的工作原理和底层运行机制。

本文将详细解析几个典型的汇编语言例子,帮助读者更好地理解和掌握汇编语言编程。

1.加法运算的例子假设我们需要编写一个汇编语言程序来实现两个数字的加法运算。

以下是一个典型的汇编语言例子:```assemblysection .datanum1 db 5num2 db 3result db 0section .textglobal _start_start:mov al, [num1] ; 将num1的值加载到寄存器al中add al, [num2] ; 将num2的值与al中的值相加mov [result], al ; 将结果保存到result中; 输出结果到屏幕mov ah, 0x0E ; 设置打印字符的功能码mov al, [result] ; 将结果加载到al寄存器中add al, 30h ; 将结果加上字符'0'的ASCII码,使其变为可打印字符 int 10h ; 调用BIOS中断打印结果; 退出程序mov eax, 1 ; 设置退出系统调用号int 0x80 ; 调用系统调用中断退出程序```上述例子使用了汇编语言的指令和寄存器来完成加法运算,并将结果保存到result变量中。

最后,通过BIOS中断调用将结果打印到屏幕上,并使用系统调用中断退出程序。

2.循环控制的例子下面是一个使用汇编语言编写的简单循环控制的例子:```assemblysection .datacount db 10 ; 循环次数sum db 0 ; 计数器section .textglobal _start_start:xor rcx, rcx ; 清零计数寄存器rcxloop_start:cmp cl, [count] ; 比较计数寄存器和循环次数je loop_end ; 若相等,跳转到循环结束add cl, 1 ; 计数器自增1add [sum], cl ; 将计数器的值加到sum中jmp loop_start ; 无条件跳转到循环开始loop_end:; 输出结果到屏幕mov ah, 0x0E ; 设置打印字符的功能码mov al, [sum] ; 将sum加载到al寄存器中add al, 30h ; 将结果加上字符'0'的ASCII码,使其变为可打印字符 int 10h ; 调用BIOS中断打印结果; 退出程序mov eax, 1 ; 设置退出系统调用号int 0x80 ; 调用系统调用中断退出程序```上述例子使用了循环控制指令来实现对计数器和循环次数的操作。

汇编语言实验二查找匹配字符串

汇编语言实验二查找匹配字符串一、目的查找匹配字符串SEARCH二、实验内容程序接收用户键入的一个关键字以及一个句子。

如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。

流程图N YY Y输入关键字结束关键字长度=0输入句子句子长度<关键字长度Y保存关键字长度到cx ,cx 入栈,保存总循环次数(句子长度-关键字长度+1)到al ,将句子的首地址放进bx(作为基址寄存器) si=di=0(变址寄存器)开始比较[bx+di]与[si]是否相等si+1,di+1,cx-1(同时指向下一个字符)YN bx+1(句子指向下一个字符) cx 出栈,再入栈,si,di 清零,al-1 cx 是否为0N 匹配完成,调用子程序输出al 是否为0 不匹配,输出三、设计和编码DATA SEGMENTmess1 DB'Enter keyword:','$'mess2 DB'Enter Sentence:','$'mess3 DB'Match at location:','$' mess4 DB'NOT MATCH.',13,10,'$' mess5 DB'H if the sentence',13,10,'$'change DB 13,10,'$'stoknin1 label bytemax1 db 10act1 db?stokn1 db 10 dup(?)stoknin2 label bytemax2 db 50act2 db?stokn2 db 50 dup(?)DATA ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODE SEGMENT;*************************************代码段main proc farassume cs:code,ds:data,es:dataSTART:push dssub AX,AXsub BX,BXsub DI,DIsub SI,SIpush AX ;为返回dos并清空后面要用到的寄存器MOV AX,DATAMOV DS,AXLEA DX,mess1MOV ah,09INT 21h ;输出Enter keywordLEA DX,stoknin1MOV ah,0ah ;用21号中段的0ah号功能获取关键字INT 21hcmp act1,0je exit ;如果为空直接退出程序a10:;********************************输入Sentence并判断LEA DX,changeMOV ah,09INT 21h ;输出回程,换行LEA DX,mess2MOV ah,09INT 21h ;输出Enter Sentence:LEA DX,stoknin2MOV ah,0ahINT 21h ;用21号中段的0ah号功能获取句子MOV AL,act1CBWMOV CX,AX ;保存关键字长度到cxPUSH CX ;cx入栈MOV AL,act2cmp AL,0je a50 ;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1js a50 ;若句子长度小于关键字长度,则跳转显示not match INC ALCBWLEA BX,stokn2 ;将句子的首地址放进BXMOV DI,0MOV SI,0a20:;****************************************比较,内循环MOV AH,[BX+DI]CMP AH,stokn1[SI] ;遇见字符不相等就跳转到a30jne a30INC DIINC SIDEC CX ;没遇到一个相等的字符,cx-1,cx不为0则比较下一个字符,当cx为0是说明关键字比较完CMP CX,0je a40jmp a20a30:;*****************************************外循环,BX+1,清空si,di继续内循环比较INC BXDEC ALcmp AL,0je a50MOV DI,0MOV SI,0POP CXpush CXjmp a20a40:;*****************************************match,将bx减去句子的首地址加一得到关键字所在位置,调用二进制转十六进制子函数将位置输出SUB BX,offset stokn2INC BXLEA DX,changeMOV ah,09INT 21hLEA DX,mess3MOV ah,09INT 21hCALL btohLEA DX,mess5MOV ah,09INT 21hjmp a10;****************************************二进制转换十六进制btoh PROC NEARMOV CH,4rotate: MOV CL,4ROL BX,CLMOV AL,BLand AL,0fhadd AL,30hcmp al,3ahjl printitadd al,7hprintit:MOV dl,alMOV ah,2int 21hdec chjnz rotateretbtoh endpa50:;*****************************************显示not matchLEA DX,changeMOV ah,09INT 21hLEA DX,mess4MOV ah,09INT 21hjmp a10exit:retmain endpCODE ENDSEND START 四、运行结果及分析五、实验小结六、附录(选)。

汇编语言二字符表示

汇编语言二字符表示汇编语言是一种低级程序语言,其中最基本的数据单元是一个字节。

在计算机中,一个字节通常由8个二进制位组成,可表示256个不同的字符。

汇编语言二字符表示就是使用一个字节来表示一个字符或符号。

在汇编语言中,每一个字符或符号都对应着一个特定的二进制值。

计算机使用 ASCII(American Standard Code for Information Interchange)编码来将字符和二进制值进行映射。

ASCII编码是一个标准的字符编码系统,在计算机领域被广泛应用。

在ASCII编码中,每个字符都有一个对应的唯一的七位或八位二进制值。

例如,ASCII编码中,字母"A"对应的二进制值是01000001,字母"a"对应的二进制值是01100001。

除了ASCII编码之外,还存在其他的字符编码系统,如Unicode和UTF-8等。

这些编码系统提供了更多的字符表示能力,支持更多的字符集和语言。

然而,在汇编语言中,通常使用ASCII编码来表示字符。

在汇编语言中,我们可以使用数据定义语句来将字符赋值给变量。

例如,如果我们想要将字符"A"赋值给一个变量,我们可以使用以下语句:```assemblymyChar db 'A'```在这个例子中,使用`db`关键字定义了一个字节大小的变量`myChar`,并将字符"A"赋给了这个变量。

在汇编语言中,我们还可以使用字符转义序列来表示一些特殊字符,如换行符或制表符。

例如,要表示换行符,我们可以使用`\n`字符转义序列。

另外,汇编语言还提供了一些操作码来处理字符。

例如,我们可以使用ASCII码进行比较操作、移动操作以及其他操作。

汇编语言中的字符表示具有很高的灵活性和可定制性。

通过使用适当的指令和操作码,我们可以实现各种字符处理功能,如字符串操作、输入输出等。

总结一下,汇编语言通过使用一个字节来表示一个字符或符号,使用ASCII编码系统将字符映射到二进制值。

汇编语言cmp指令用法

汇编语言cmp指令用法1. 什么是汇编语言?汇编语言是一种低级机器语言的抽象,它使用助记符(mnemonic)来代替二进制代码,使得程序员能够更容易地理解和编写机器指令。

汇编语言是计算机硬件和操作系统的接口语言,可以直接访问底层硬件资源。

2. cmp指令概述cmp指令是汇编语言中的一个重要指令,用于比较两个操作数的大小关系。

它通过比较两个操作数的值来设置标志位(flags),以供程序后续的条件跳转或条件执行。

3. cmp指令的语法格式cmp指令通常有两个操作数,分别为源操作数(source operand)和目标操作数(destination operand)。

其基本语法格式如下:cmp destination, source其中,destination为目标操作数,可以是寄存器或内存地址;source为源操作数,可以是寄存器、内存地址或立即数。

4. cmp指令的功能cmp指令执行时会将目标操作数与源操作数进行比较,并根据比较结果设置相应的标志位。

常见的标志位有零标志位(ZF)、进位标志位(CF)、符号标志位(SF)等。

•如果目标操作数等于源操作数,则设置ZF为1;否则,设置ZF为0。

•如果源操作数大于目标操作数,则设置CF为1;否则,设置CF为0。

•如果结果为负数,则设置SF为1;否则,设置SF为0。

5. cmp指令的应用场景cmp指令常用于条件跳转和条件执行的判断条件中。

通过比较两个操作数的大小关系,可以根据标志位来进行不同的控制流程。

5.1 条件跳转cmp指令与条件跳转指令(如je、jne、jl、jg等)结合使用,可以实现根据比较结果进行跳转的功能。

例如,以下代码片段中,如果eax寄存器的值等于ebx寄存器的值,则跳转到label处执行;否则,继续执行下一条指令。

cmp eax, ebxje label5.2 条件执行cmp指令与条件执行指令(如cmovl、cmovg等)结合使用,可以实现根据比较结果选择性地执行某一条指令。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上海电力学院实验报告计算机硬件实验课程
题目:字符的匹配
班级:
姓名:
学号:
一.实验目的
1)掌握MASM工具调试汇编程序
2)熟悉DOS功能调用
3)学会用汇编语言编写程序,并掌握各功能号的作用
二.实验目的:
能够进行简单的功能程序的编辑操作
三.实验内容:
四.实验程序:
data segment 定义数据段
string db '12345' 定义要比较的字符
buffer db 40,0,40 dup(?) 定义一个数据缓冲区
string1 db 'yes!',0dh,0ah, '$' 定义匹配时显示yes
string2 db 'not match!',0dh,0ah, '$' 定义不匹配是显示not match
data ends 数据段定义结束
code segment 定义代码段
assume cs:code,ds:data
start: mov ax,0 初始化ds
mov ax,data
mov ds,ax
lea dx,buffer 在缓冲区的地址输入字符
mov ah,0ah
int 21h
mov si,dx 把缓冲区的地址给源串指针si add si,2 si加2是指针指向第一个字符 lea di,string 把目标串指针给 di
mov cx,5 设循环次数为5
CLD 指针按地址增量变化
repe cmpsb 执行串比较指令
jz right 完全相等则转right
lea dx,string2 否则显示not match
mov ah,09h
int 21h
jmp over 结束
right: lea dx,string1 显示yes
mov ah,09h
int 21h
jmp over 结束
over: mov ah,4ch
int 21h
code ends
end start
五.流程图:
开始(数据段、代码段定义)
Table=123456;string1=’no match ’;string2=’yes ’
定义string 10缓冲格
从键盘上输入要查询的数据段
Si=dx;di=table;cld
Repe cmpsb 重复比较
ZF=1

Right 跳转输出
Wrong 跳转输

回到DOS
结束
六.实验结果:
七.实验心得:
这次实验是前几次理论编写实验程序中最复杂的一个,刚开始我一个人做时并没有将它完整的做出来,而且感觉遇到问题颇多,后来通过与其他同学的合作谈论,这才得到实验结果,满足要求,只是到现在还留有一个问题,就是得到结果后会将前一句话覆盖,始终没解决掉。

相关文档
最新文档