实验内容
试编写一个有主程序和子程序结构的程序模块。
主程序:要求从键盘接收一串字符并存于字节数组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