键盘上输入一系列以$为结束符的字符串,分别对其中的字母、数字和其他字符进行计数,并显示计数结果。

DATAS SEGMENT
    letter dw 0
    num dw 0
    other dw 0
    count dw 0
    string db  'enter a string:$'
    str1 db 'letter:$'
    str2 db 'number:$'
    str3 db 'other:$'
    crlf db 0ah,0dh,'$' 
    n db  10
DATAS ENDS


STACKS SEGMENT stack
    dw 100 dup(?)
STACKS ENDS


CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
lop:
mov letter,0
mov num,0
mov other,0
mov count,0
lea dx,string
mov ah,9
int 21h
lop1:
inc count
mov ah,1
int 21h
cmp al,'$'
jz  lop4
cmp al,30h
jl  lop1
cmp al,39h
jg  lop2
inc num
lop2:
cmp al,41h
jl  lop1
cmp al,5Ah
jg  lop3
inc letter
lop3:
cmp al,61h
jl  lop1
cmp al,7Ah
jg  lop1
inc letter
jmp lop1
lop4:
lea dx,crlf
mov ah,9
int 21h
lea dx,str1;输出字母数
mov ah,9h
int 21h
mov ax,0
mov ax,letter
div n;al ah
push ax 
cmp al,0
jz lop5
add al,30h
mov dl,al
mov ah,2
int 21h
lop5:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h

lea dx,str2;输出数字个数
mov ah,9h
int 21h
mov ax,0
mov ax,num
div n;al ah
push ax 
cmp al,0
jz lop6
add al,30h
mov dl,al
mov ah,2
int 21h
lop6:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h

mov ax,num
mov bx,letter
sub count,ax
sub count,bx
mov ax,count
mov other,ax
sub other,1
lea dx,str3;输出其他数个数
mov ah,9h
int 21h
mov ax,0
mov ax,other
div n;al ah
push ax 
cmp al,0
jz lop7
add al,30h
mov dl,al
mov ah,2
int 21h
lop7:
pop ax
mov al,0
add ah,30h
mov dl,ah
mov ah,2
int 21h
lea dx,crlf
mov ah,9
int 21h

jmp lop
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START



































猜你喜欢

转载自blog.csdn.net/littlefickle/article/details/80056075