📄 hream.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 + -