汇编语言:统计某个单词在英文句子中的出现次数

汇编语言:统计某个单词在英文句子中的出现次数

  • 题目要求
      • 运行截图
  • 编程平台
  • 代码实现

题目要求

设有一段英文,其字符变量名为ENG,并以$字符结束。试编写一段程序,查单词SUN在该文中出现的次数,并输出显示出现的次数。

运行截图

汇编语言:统计某个单词在英文句子中的出现次数_第1张图片

编程平台

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

如果文章内容出错或者您有更好的解决方法,欢迎到评论区指正和讨论!

你可能感兴趣的:(汇编语言,汇编)