📄 522.asm
字号:
data segment
buffer db 27 dup(?)
h db 13,10,'$'
result db ?,?,?,13,10,'$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea bx,buffer
mov cl,0
next:
mov ah,1
int 21h
inc cl
cmp al,0dh
jz number
mov [bx],al
inc bx
jmp next
number:
mov ch,0 ;cx循环次数
mov dh,cl
mov dl,0 ;dl为计数器
lea bx,buffer
loop1:
mov al,[bx]
cmp al,30h
jb t0 ;(AL)<‘0’结束
cmp al,39h
ja t0 ;(AL)>’9’转移
inc dl ;(AL)在‘0’~‘9’之间
t0:
inc bx
loop loop1
add dl,30h
mov result+1,dl
letter:
mov cl,dh ;cx循环次数
mov dh,cl
mov ch,0
mov dl,0 ;dl为计数器
lea bx,buffer
loop2:
mov al,[bx]
cmp al,41h
jb exit ;(AL)<‘A’结束
cmp al,5ah
ja t2 ;(AL)>’Z’转移
inc dl
jmp exit
t2:
cmp al,61h
jb exit ;(AL)<‘a’结束
cmp al,7ah
ja exit ;(AL)>’z’结束
inc dl
exit:
inc bx
loop loop2
add dl,30h
mov result,dl
mov al,result ;计算非字母和数字的个数
mov bl,result+1
add dh,90h ;因为AL,BL已经加过30H
sub dh,al
sub dh,bl
mov result+2,dh
mov ah,9 ;输出
mov dx,seg h
mov ds,dx
mov dx,offset h
int 21h
mov ah,9 ;输出
mov dx,seg result
mov ds,dx
mov dx,offset result
int 21h
mov ah,4ch
int 21h
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -