📄 a.asm
字号:
data segment
msg1 db 'please input a String:','$'
msg2 db 'Sum:','$'
msg3 db 'Num:','$'
msg4 db 'Str:','$'
msg5 db 'Del:','$'
crlf db 10,13,'$'
countNum db 0
countStr db 0
countDel db 0
buffer db 21
db ?
db 21 dup(?)
new db 20 dup(?)
data ends
code segment
main proc far
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ah,9
lea dx,msg1
int 21h
lea dx,buffer
mov ah,10
int 21h
mov ah,9
lea dx,crlf
int 21h
mov cl,buffer+1
lea si,buffer+2
next:
cmp byte ptr [si],30h
jc next1
cmp byte ptr [si],39h
ja next2
inc countNum
jc next1
next2:
cmp byte ptr [si],41h
jc next1
cmp byte ptr [si],5ah
ja next3
inc countStr
jc next1
next3:
cmp byte ptr [si],61h
jc next1
cmp byte ptr [si],7ah
ja next1
inc countStr
next1:
inc si
dec cl
jnz next
mov al,buffer+1
sub al,countNum
sub al,countStr
mov countDel,al
lea dx,msg2
mov ah,09
int 21h
mov bl,buffer+1
call bin2dec
mov ah,9
lea dx,crlf
int 21h
lea dx,msg3
mov ah,09
int 21h
mov bl,countNum
call bin2dec
mov ah,9
lea dx,crlf
int 21h
lea dx,msg4
mov ah,09
int 21h
mov bl,countStr
call bin2dec
mov ah,9
lea dx,crlf
int 21h
lea dx,msg5
mov ah,09
int 21h
mov bl,countDel
call bin2dec
ret
main endp
bin2dec proc near
mov ch,0
mov cl,10d
call decdiv
mov cl,1d
call decdiv
ret
bin2dec endp
decdiv proc near
mov al,bl
mov ah,0
div cl
mov bl,ah
mov dl,al
add dl,30h
test ch,01h
jnz follow
cmp dl,30h
jz exit
mov ch,1
follow:
mov ah,2
int 21h
exit:
ret
decdiv endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -