汇编语言:统计某个单词在英文句子中的出现次数
题目要求运行截图
编程平台代码实现
题目要求
设有一段英文,其字符变量名为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
如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!