题目:
从键盘输入一个长度为n的字符串(0<n<32),要求:
(1) 在进行输入和输出之前必须先显示相应的提示信息;提示信息必须独占一行;输入必须用回车符结束;
(2) 将字符中的大写字母转化为小写字母并将转化后的字符串在屏幕上显示;
(3) 统计字符串中的非数字字符(‘0'——‘9'以外的字符)个数,以十进制输出;
(4) 输出字符串中包含的小写英文字符里面ASCII值最小的一个;
代码:
data segment
inpinfo db 'please input:',10,13,'$'
str db 512 dup(?)
BTL db 10,13,'after convert big to small they are:',10,13,'$'
numinfo db 10,13,'the number not num is :',10,13,'$'
wordinfo db 10,13,'the smallest word is :',10,13,'$'
worderror db 10,13,'no small word exist!',10,13,'$'
count db 0
little dw 122 ;'z'+1
data ends
assume cs:code,ds:data
code segment
start:
mov ax,data
mov ds,ax
mov si,0
;******input
MOV DX,OFFSET INPINFO
MOV AH,09H
INT 21H
INPUT_T1:
mov ah,01h
int 21h
mov str[si],al
inc si
cmp al ,13
je FIND
jne INPUT_T1
;*****找出其中ASII码最小的一个字符
FIND:
DEC SI
MOV BX,SI
mov si,0
mov dh,123
find_0:
mov cl,str[si]
cmp cl,'a'
jb find_1
cmp cl,'z'
ja find_1
cmp cl,dh
jb give
inc si
cmp si,bx
je print_it
jne find_0
give:
mov dh,cl
inc si
cmp si,bx
je print_it
jne find_0
find_1:
inc si
cmp si,bx
je print_it
jne find_0
print_it:
cmp dh,123
je fail
push dx
lea dx,wordinfo
mov ah,09h
int 21h
pop dx
mov dl,dh
mov ah,02h
int 21h
jmp CONVERT
fail:
lea dx,worderror
mov ah,09h
int 21h
jmp CONVERT
; *******FIND OK
;*******将其中的大写转小写
CONVERT:
mov si,0
mov ah,09
lea DX,BTL
INT 21H
CONVT_1:
mov dl,str[si]
CMP DL,'A'
JB CONVT_2
CMP DL,'Z'
JA CONVT_2
ADD DL,20H
MOV STR[SI],DL
inc si
cmp si,bx
jne CONVT_1
je OUTPUT
CONVT_2:
INC SI
cmp si,bx
jne CONVT_1
je OUTPUT
OUTPUT:
MOV SI,0
OUT_1:
MOV DL,STR[SI]
MOV AH,02H
INT 21H
INC SI
CMP BX,SI
JNE OUT_1
JE count_no
;**********大写转小写完成
;**********计算非数字的个数
count_no:
MOV CL,0
mov si,0
COUNT_0:
mov al,str[si]
cmp al ,'0'
jb count_1
cmp al ,'9'
ja count_1
inc si
cmp si,bx
jne COUNT_0
je output_num
count_1:
ADD COUNT,1
inc si
cmp si,bx
jne count_0
je output_num
output_num:
lea dx,numinfo
mov ah,09h
int 21h
MOV AX,0
mov AL ,count
MOV CL,10
DIV CL
PUSH AX
MOV DL, AL
mov ah,02h
or dl,30h
int 21h
POP AX
MOV DL,AH
OR DL,30H
MOV AH,02H
INT 21H
jmp EXIT00
;**************统计OVER
exit00:
mov ax, 4c 00h
int 21h
code ends
end start