⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hream.asm

📁 用汇编实现统计输入的字符串中有多少个字母
💻 ASM
字号:
DATA    SEGMENT
NN      DB 0;用来统计数字个数
LN      DB 0;统计字母个数
SPAC	DB 0;统计空格个数
ON      DB 0;统计其它字符的个数
MESSG0  DB "Please enter a string:",'$'
MESSG1  DB "The number of letter is ",'$'
MESSG2  DB "The number of number is ",'$'
MESSG3  DB "The number of space is ",'$'
MESSG4  DB "The number of other char  is ",'$'
MESSG5  DB "reverse order:" ,'$'
MESSG6  DB 'We are the second team!'
LEN6    EQU $-MESSG6
MESSG7  DB 'Header :Hou po'
LEN7    EQU $-MESSG7
MESSG8  DB 'Team Member:'
LEN8    EQU $-MESSG8
MESSG9  DB '   Wang Hui'
LEN9    EQU $-MESSG9
MESSGA  DB '   Liang Yongjian'
LENA    EQU $-MESSGA
MESSGB  DB '   Guo Lei'
LENB    EQU $-MESSGB
SENTENCE DB 100,?,100 DUP(?);待输入的字符串
NEXTLINE DB 13,10,'$' ;回车换行
DATA    ENDS
STACK SEGMENT PARA STACK
	DW 50 DUP(?)
STACK ENDS

HCHH MACRO
MOV DX,OFFSET nextline	;宏定义,用来显示回车换行
	MOV AH,09H
	INT 21H
	ENDM		;宏定义结束
	
SHOWS MACRO K	 ;宏定义,用来显示一个字符串
MOV DX,OFFSET MESSG&K
	MOV AH,09H
	INT 21H	
	ENDM		;宏定义结束
	
SHOWZ MACRO K,NUM ;宏定义,显示统计的结果
	HCHH
	SHOWS K
	MOV AL,NUM
	CALL TWO_TEN
	ENDM		;宏定义结束
SHOWWIN  MACRO K,LINE,att
MOV   AH,13H      
      LEA   BP,MESSG&K  
      MOV   CX,LEN&K  
      MOV   DH,LINE      
      MOV   DL,23
      MOV   BH,0        
      MOV   AL,1
      MOV   BL,att        
      INT   10H
      ENDM	
	
CODE    SEGMENT 'CODE'
        ASSUME CS:CODE,DS:DATA,SS:STACK
START:
        MOV AX,DATA
        MOV DS,AX
        MOV ES,AX
        SHOWS 0
        HCHH
        MOV DX,OFFSET SENTENCE;输入一个句子, 该语句的功能是输入一个字符串
    	MOV AH,0AH				;输入字符的个数放在了sentence中的第二个空间
    	INT 21H
		CMP SENTENCE+1,0; 判断有没有输入,如果没有,为Cx赋值1
		ja  aa 
		dec on
		mov SENTENCE+1,1
		
aa:		MOV DI,2  ;数组下标赋初值
		XOR CH,CH         ;CH清0
		MOV CL,SENTENCE+1	;循环次数
		PUSH CX
;以下统计各种字符的个数
COMPARE:
        MOV AL,SENTENCE[DI]
        CMP AL,20H
        JE SPACE
        CMP AL,30H
	JB OTHER
        CMP AL,39H
	JBE NUMBER

        CMP AL,41H
	JB OTHER
        CMP AL,5AH
	JBE LETTER

        CMP AL,61H
	JB OTHER
        CMP AL,7AH
	JBE LETTER
SPACE:  INC SPAC      
        JMP SHORT INCADDR
OTHER:
        INC ON
        JMP SHORT INCADDR
NUMBER: INC NN
        JMP SHORT INCADDR
LETTER: INC LN
INCADDR:
        INC DI
        LOOP COMPARE		
;统计结束 
;以下显示统计的结果  
	SHOWZ 1,LN  ;宏调用
	SHOWZ 2,NN
	SHOWZ 3,SPAC
	SHOWZ 4,ON
	HCHH
	HCHH
	SHOWS 5
	HCHH
	
	POP CX  ;恢复循环次数
;以下倒序输出字符串
REVERSE:
	DEC DI
	MOV AL,SENTENCE[DI]
	MOV DL,AL
	MOV AH,2
	INT 21H
	LOOP REVERSE

	;建个小窗口
	MOV   AH,6        
	MOV   AL,0
	MOV   CH,12        
	MOV   CL,23
	MOV   DH,17       
	MOV   DL,56
	MOV   BH,70H      
	INT   10H
	
	  
      SHOWWIN 6,12 ,72h
      SHOWWIN 7,13 ,73h
      SHOWWIN 8,14 ,72h
      SHOWWIN 9,15,73h
      SHOWWIN A,16,72h
      SHOWWIN B,17  ,73h 
     
		MOV AH,1            ;暂停
		INT 21H
		      	
		MOV AH,4CH			;返回Dos
    	INT 21H

;函数TWO_TEN实现输出al中存的二进制数
TWO_TEN PROC
	CMP AL,0AH
	JAE TWOBIT
	ADD AL,30h
	MOV DL,AL
	MOV AH,2
	INT 21H
	JMP QUIT
TWOBIT:;显示两位的十进制数
	MOV BL,10
	MOV AH,0
    DIV BL
    push ax
	MOV DL,AL
	ADD DL,30H
	MOV AH,2
	INT 21H
	pop ax
	MOV DL,AH
	ADD DL,30H
	MOV AH,2
	INT 21H
QUIT:	RET
TWO_TEN ENDP;函数结束

CODE    ENDS
        END START






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -