题目要求
设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一段程序,查单词SUN在该文中出现的次数,并输出显示出现的次数。
运行截图
编程平台
Masm for Windows 集成实验环境 2012.5
代码实现
DATAS SEGMENT
ENG DB 'SSUNABCSQOSUNSUNIUM$'
count DW $-ENG
hint DB 'There is a paragraph in English: $'
result DB 'The number of times the word SUN appears in the text: $'
break DB 13,10,'$'
DATAS ENDS
STACKS SEGMENT STACK
DB 200H DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC
MOV AX,DATAS
MOV DS,AX
LEA DX,hint;输出原始数据前提示
MOV AH,9H
INT 21H
LEA DX,ENG;输出原始数据
MOV AH,9H
INT 21H
LEA DX,break;换行
MOV AH,9H
INT 21H
LEA DX,result;输出结果前提示
MOV AH,9H
INT 21H
CALL COUNTSUM;计数SUN
CALL OUTPUTDATA;输出统计结果
MOV AH,4CH
INT 21H
MAIN ENDP
;子程序
;功能:统计单词SUN在该文中出现的次数。
;入口参数:变量ENG存放一段英文字符。
COUNTSUM PROC
MOV AX,0;记录SUN出现的个数
LEA BX,ENG
MOV CX,count;遍历次数
lop:
MOV DL,[BX]
CMP DL,'S';是否为S
JE nextU
INC BX
LOOP lop
JMP finish
nextU:
DEC CX
CMP CX,0;是否遍历结束
JE finish
INC BX
MOV DL,[BX]
CMP DL,'U';是否为U
JE nextN
LOOP lop;重新开始寻找S
JMP finish
nextN:
DEC CX
CMP CX,0;是否遍历结束
JE finish
INC BX
MOV DL,[BX]
CMP DL,'N';是否为N
JE addSUN
LOOP lop;重新开始寻找S
JMP finish
addSUN:
INC AX;SUN数量加1
INC BX
LOOP lop
finish:
RET
COUNTSUM ENDP
;子程序
;功能:以十进制形式输出0和正整数。
;入口参数:AX存放要输出的数据。
OUTPUTDATA PROC
MOV SI,10;除数
MOV DI,0;统计要输出的位数
lop1:
MOV DX,0
DIV SI
PUSH DX;余数入栈
INC DI
CMP AX,0
JNE lop1
lop2:
POP DX
ADD DL,30H;转换成ASCII码
MOV AH,2H
INT 21H
DEC DI
CMP DI,0
JNE lop2
RET
OUTPUTDATA ENDP
CODES ENDS
END MAIN
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!