zl程序教程

您现在的位置是:首页 >  其它

当前栏目

汇编实验之查找字符串

字符串 查找 实验 汇编
2023-09-11 14:22:53 时间

实验内容
试编写一个有主程序和子程序结构的程序模块。
主程序:要求从键盘接收一串字符并存于字节数组TABLE中,显示字符CHAR出现的次数。
子程序:在以TABLE为首地址的字节数组中查找CHAR,统计出现的次数。

实验编程提示
1、 主程序通过循环程序接收键盘输入(AH=1,INT 21H),存入TABLE,并把字符个数存入变量N中。
2、 子程序实现在TABLE中查找CHAR,并把出现的次数存入BX中。设计查找程序时应先画出程序流程图。
3、 在主程序中显示BX的值(为简化程序,可以使CHAR出现的次数不超过9)。

DATA SEGMENT
	TABLE	DB	100,0,100 DUP('$')
	str1	DB	'enter string please:$'
	str2	DB	'times the char appear:$'
DATA	ENDS

STACK	SEGMENT	 PARA STACK 'STACK'
	DB 100 DUP('$')
STACK	ENDS

CODE	SEGMENT
	ASSUME CS:CODE,DS:DATA
START:	MOV	AX,DATA
	MOV	DS,AX
	LEA 	DX,str1
	MOV	AH,9
	INT	21H	;输出第一句输入提示语
	PUSH	DX
	MOV	SI,0

LOP1:	MOV	AH,1
	INT	21H
	CMP	AL,0DH
	JZ	EXIT
	MOV	TABLE[SI],AL
	INC	SI
	LOOP	LOP1          ;以字符为单位输入,通过循环输入组成字符串,输入回车后退出循环

EXIT:	MOV	TABLE[SI],'$'
	CALL	FUNC
	LEA 	DX,str2	;输出结果输出提示语
	MOV	AH,9
	INT 	21H
	MOV 	AL,BL
	ADD	AL,30H	;关键步骤!0-9的ASCII码值为30-39,这里+30H之后可以直接以字符形式输出数字。
	MOV	DL,AL
	MOV	AH,2
	INT 	21H
	MOV	AH,4CH
	INT 	21H

FUNC	PROC	NEAR
	PUSH	SI
	PUSH	CX
	PUSH	AX
	MOV	AX,SI
	MOV	CX,SI
	SUB	AX,3	;存储输入字符串长度和长度减三,因为搜索的char是四位的,所以只需要搜索到倒数第四位就可以了
	LEA	SI,TABLE
	XOR	BX,BX	;清零用来存储次数
LOP2:	CMP	BYTE	PTR	[SI],'c'
	JNZ	EXIT1
	INC	SI
	CMP	BYTE	PTR	[SI],'h'
	JNZ	EXIT2
	INC	SI
	CMP	BYTE	PTR	[SI],'a'
	JNZ	EXIT2
	INC	SI
	CMP	BYTE	PTR	[SI],'r'
	JNZ	EXIT2
	INC	BX	;统计最后出现次数结果
EXIT1:	INC	SI
EXIT2:	CMP	SI,CX	;判断遍历是否结束
	LOOPNZ	LOP2
	POP	AX
	POP	CX
	POP	SI	;释放堆栈
	RET
FUNC	ENDP

CODE	ENDS
END	START