汇编语言写:计算一段英文中单词的个数

本文介绍了一个使用汇编语言编写的程序,该程序能够读取一段英文文本,并通过判断字母和标点符号来计算其中单词的数量。程序首先将所有大写字母转换为小写,然后利用标志位判断单词的有效性,最终输出单词总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言写:计算一段英文中单词的个数

要求

  • 运用标志位i,首先判断其是否为一个正确的单词,若是这个“假单词”i=0,若正确则1=1;当读完该单词则总数sum+i(之前sum初始化为0);当整篇英文读完(读到回车)则输出sum.
MODEL SMALL
.DATA
STRING1 DB 'PLEASE ENTER ONE ESSEY:$';
STRING2 DB 'THE WORD QUANTITY:$';	
num db 200 dup(?)
i db ?				
.CODE
main proc far
	mov ax,@data    ;一定要有这个否则会输出乱码
	mov ds,ax
	call calculate;
	call output;
main endp
;--------------------
calculate proc near 
   	lea dx,STRING1
  	mov ah,09h
  	int 21h
  	mov bx,0
calculate1:
	mov ah,01h
	int 21h
	cmp al,61h ;判断是否为大写字母
	jl calculate5
	sub al,20h  ;若为大写字母则变为小写
calculate5: 
    mov num[bx],al  
    cmp al,0dh   ;若为换行则开始计算
    je calculate2 
    inc bx
    jmp calculate1;循环读入字符直至换行跳出
calculate2:
	mov bx,0
	mov cl,0
calculate3:
	mov al,num[bx]	
	mov i,1	
	cmp al,40H
	jl calculate4
	inc bx
	jmp calculate3 
calculate4:
    cmp al,21h  ;!
    je calculate6
    cmp al,2ch	;,
    je calculate6
    cmp al,2eh	;.
    je calculate6
    cmp al,3fh	;?
    je calculate6
    cmp al,20h	;空格
    je calculate6
    cmp al,0dh  ;换行
    je calculate8
 	mov i,0     ;错误单词
 	jmp calculate9
calculate6:
	add cl,i
	inc bx
	jmp calculate3
calculate8:
	jmp exit
calculate9:		    
	mov al,num[bx]
	inc bx	;单词错误开始读入单词直至该单词结束
	cmp al,21h	;若为, 。 ? !空格则跳出
	je calculate3
	cmp al,2ch
	je calculate3
	cmp al,2eh
	je calculate3
	cmp al,3fh
	je calculate3
	cmp al,20h
	je calculate3
	cmp al,0dh  ; 若为换行则直接结束此调用开始output函数
	je exit	
	jmp calculate9	
exit:
    ret
calculate endp
;----------------------
output proc near 
	lea dx,STRING2
	mov ah,09h
	int 21h
	mov al,cl
	cbw 
OUTPUT5:
  MOV DX,0;
  MOV BX,10
  DIV BX;				ax除以10余数放入dx中
  ADD DX,30H
  PUSH DX ;				将dx(个位、十位、百位、等)压入栈
  INC SI;				做出栈标记
  CWD;					扩展
  CMP AX,0 
  JZ OUTPUT4		
  JMP OUTPUT5  
OUTPUT4:
  POP AX;				逐个出栈(。。。。百位、十位、个位)
  DEC SI
  MOV DL,AL;			逐个输出数的。。。。百位、十位、个位
  MOV AH,02H
  INT 21H
  CMP SI,0
  JNZ OUTPUT4
output endp
ENDING:
  MOV AX,4C00H;		终止程序
  INT 21H
END  

输入 i am wuqiong dada1!
I am wuqiong 为真单词
dada1 为假
所以输出为3
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值