统计字符串STRING中某个单词的个数,字符串以’$'作为结束符,要统计的单词放在C_WORD中,统计结果存放在COUNT中。统计结果要求实现屏幕输出。
DISP_STRING MACRO Y
LEA DL, Y
MOV AH, 02H
INT 21H ;显示字符串统计结果
ENDM
DATA SEGMENT
STRING DB 'YOU ARE HAPPY I AM HAPPY EVERYONE IS HAPPY $', 13, 10, '$'
C_WORD DB 'HAPPY'
LEN_WORD EQU $-C_WORD
COUNT DB 0
DATA ENDS
ASTACK SEGMENT STACK
DW 256 DUP(0)
TOP LABEL WORD
ASTACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:ASTACK,ES:DATA
START: MOV AX, DATA
MOV DS, AX ;设置DS
MOV ES, AX ;设置ES
MOV AX, ASTACK
MOV SS, AX ;设置SS
LEA SP, TOP ;设置SP
CLD ;方向标志位DF清零
LEA SI, STRING ;SI指向STRING
L3: MOV CX, LEN_WORD
LEA DI, C_WORD ;DI指向C_WORD的第一个字符的偏移地址
MOV AX, SI
REPE CMPSB ;字符串比较
JZ L1 ;相等即匹配则跳转到L1
JNZ L2 ;不相等则跳转到L2
L1:
INC COUNT
CMP [SI], ‘$ ;判断句子是否结束 **注意此处的 $ 要单引号,因为CSDN博客加单引号之后效果不一样,因此少一个单引号**
JZ EXIT ;是则跳到EXIT
JMP L3 ;不是则跳到L3继续查词
L2:
CMP [SI], '$'
JE EXIT
JMP L3
EXIT:
MOV DL, COUNT
ADD DL, 30H ;加30H即转为十进制
MOV AH, 02H
INT 21H ;以十进制显示单词个数
MOV AH, 4CH
INT 21H ;返回操作系统
CODE ENDS
END START