📄 t4-4.asm
字号:
MLENGTH=128 ;缓冲区常长度
DSEG SEGMENT
BUFF DB MLENGTH ;按0A号功能设置
DB ? ;实际键入的字符数
DB MLENGTH DUP (0)
MESS0 DB 'Please input:$'
MESS1 DB 'Length = $'
MESS2 DB 'X = $'
MESS3 DB 'Y = $'
DSEG ENDS
;
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET MESS0
CALL DISPMESS ;显示Please input:
MOV DX,OFFSET BUFF
MOV AH,10
INT 21H
CALL NEWLINE
MOV BH,0 ;清数字符计数器
MOV BL,0 ;清字母符计数器
MOV CL,BUFF+1 ;取字符串长度
MOV CH,0
JCXZ COK ;字符串长度=0,退出。
MOV SI,OFFSET BUFF+2 ;指向字符串首地址
AGAIN:
MOV AL,[SI] ;取一个字符
INC SI
CMP AL,'0'
JB NEXT
CMP AL,'9'
JA NODEC
INC BH ;数字符计数器+1
JMP SHORT NEXT
NODEC:
OR AL,20H ;大转小,统一带大小写。
CMP AL,'a'
JB NEXT
CMP AL,'z'
JA NEXT
INC BL ;字母符计数器+1
NEXT:
LOOP AGAIN
;
COK:
MOV DX,OFFSET MESS1
CALL DISPMESS ;显示"Length="
MOV AL,BUFF+1 ;取字符串长度
XOR AH,AH
CALL DISPAL ;显示字符串长度
CALL NEWLINE ;显示回车换行
;
MOV DX,OFFSET MESS2
CALL DISPMESS ;显示"X="
MOV AL,BH
XOR AH,AH
CALL DISPAL ;显示数字符个数
CALL NEWLINE
;
MOV DX,OFFSET MESS3
CALL DISPMESS ;显示"Y="
MOV AL,BL
XOR AH,AH
CALL DISPAL ;显示字母符个数
CALL NEWLINE
;
MOV AX,4C00H
INT 21H
;
;显示AL寄存器中的数字
DISPAL PROC
MOV CX,3
MOV DL,10
DISP1:
DIV DL
XCHG AH,AL
ADD AL,'0'
PUSH AX
XCHG AH,AL
MOV AH,0
LOOP DISP1
MOV CX,3
DISP2:
POP DX
CALL ECHOCH
LOOP DISP2
RET
DISPAL ENDP
;
;显示DS:DX处的字符串
DISPMESS PROC
MOV AH,9
INT 21H
RET
DISPMESS ENDP
;
;显示AL中的ASCII码
ECHOCH PROC
MOV AH,2
INT 21H
RET
ECHOCH ENDP
;
;输出回车换行符
newline proc
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
CSEG ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -