汇编 字符串比较实验

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

实验3. 字符串比较实验

1.实验内容与要求

程序员在屏幕上分别输入两行字符串,比较两个字符串,输出其中相同的字符,并统计个数。要求相同的字符大于10(即统计数要两位)。并且每行都要有提示信息。

2.源代码

DA TAS SEGMENT

STR1 DB 100,?,100 DUP(?) ;定义字符串

STR2 DB 100,?,100 DUP(?)

STR3 DB 100 DUP(?) ;存放含相同字符的新字符串

INS1 DB 'Input the first str: $' ;提示信息

INS2 DB 'Input the second str: $'

OUTCNT DB 'Num of the same elem: $'

OUTELM DB 'The same elems are: $'

CRLF DB 0DH,0AH,'$' ;回车换行

COUNT DB 0 ;未过滤字符串的长度

NUM DB 0 ;过滤后字符串的长度

DA TAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DA TAS

START:

MOV AX,DA TAS

MOV DS,AX

MOV AH,9

LEA DX,INS1

INT 21H ;显示输入提示信息

MOV AH,0AH

LEA DX,STR1

INT 21H ;输入原字符串

MOV AH,9

LEA DX,CRLF ;回车换行

INT 21H

MOV AH,9

LEA DX,INS2

INT 21H

MOV AH,0AH

LEA DX,STR2

INT 21H

MOV AH,9

LEA DX,CRLF

INT 21H

MOV CL,STR1+1 ;把字符串长度送到CL,BL

XOR CH,CH

MOV BL,STR2+1

XOR BH,BH

LEA SI,STR1+2 ;把字符串首地址送到SI,DI

LEA DI,STR2+2

LEA BP,STR3 ;把目标字符串首地址送BP

CMP2: ;外部循环

CMP1: ;内部循环

MOV AL,[SI] ;逐一比较两字符串的每个字符

CMP AL,[DI]

JNE NEXT

MOV AH,[SI]

MOV [BP],AH

INC BP

INC COUNT ;统计STR3的长度

NEXT:INC DI

DEC BL

JZ OVER1

JMP CMP1

OVER1: ;重新设置内部循环次数,并重新定位DI指针INC SI

MOV BL,STR2+1

LEA DI,STR2+2

LOOP CMP2

MOV AH,9 ;输出结果提示信息

LEA DX,OUTELM

INT 21H

call clear ;调用过滤字符串子程序,并输出

MOV AH,9 ;输出相同字符个数

LEA DX,OUTCNT

INT 21H

XOR AH,AH

MOV AL,NUM

CALL DISPLAY;处理输出结果,使输出两位数字

MOV AH,4CH

INT 21H

DISPLAY PROC NEAR ;输出两位数子程序

MOV BL,10

DIV BL

MOV BX,AX

MOV DL,BL

ADD DL,30H

MOV AH,2

INT 21H

MOV DL,BH

ADD DL,30H

MOV AH,2

INT 21H

RET

DISPLAY ENDP

clear proc near ;过滤字符串子程序

lea bx,str3

lea si,str3+1

lea di,str3+1

xor ch,ch

mov cl,count

dec cx

inc num

s2: push cx

mov cx,di

sub cx,bx

s1: mov al,[si]

cmp al,[bx]

je nextchar ;若相等则直接进行下一个字符的循环比较

inc bx

loop s1

inc num ;过滤后字符串的实际长度

mov [di],al

inc di

nextchar: lea bx,str3 ;将bx重定位至字符串首地址

inc si ;以使下一个字符比较时又从头开始比较

pop cx

loop s2

mov [di],'$' ;为显示处理后的字符串调用中断做准备

lea dx,str3

mov ah,9

int 21h ;显示处理后的字符串str3

mov ah,9

lea dx,crlf

int 21h

ret

clear endp

CODES ENDS

END START

3.运行结果截图:

相关文档
最新文档