实验3: (类型统计,统计字母,数字,其他字符在一个句子中出现的次数)
算法设计:用三个变量分别记录用户输入数字类型,字母类型和其他类型的个数。根据ACSII码判断类型,遍历完整个句子后调用十进制数输出子程序dispdec输出统计数字
程序实现:定义缓冲区:存放用户输入的句子,用digit,letter,other分别代表统计出的数字,字母,其他字符的个数,都初始化为0。用bx指向用户输入句子的首地址,然后判断是30h~39h则digit自增,还是41h~5Ah或61h~7Ah则letter自增,否则other自增,然后bx自增,不断循环判断,循环次数为句子长度,即之前cx=用户输入句子的长度。最后输出结果
DATAS SEGMENT
msg1 db 'enter sentence:$'
keepcin db 80
db 0
db 80 dup(0)
letter db 0
digit db 0
other db 0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov dx,offset msg1
call print ;"entersentence"
mov dx,offset keepcin
call cin
mov bx,offset keepcin+1
;call printresult
mov cl,[bx] ;输入句子的长度
again1:
inc bx
mov al,[bx]
cmp al,30h
jb otherresult
cmp al,40h
jb digitresult
cmp al,41h
jb otherresult
cmp al,5BH
jb letterresult
cmp al,61H
jb otherresult
cmp al,7bH
jb letterresult
jmp otherresult
letterresult:
inc letter
jmp loopnext
digitresult:
inc digit
jmp loopnext
otherresult:
inc other
loopnext:
loop again1
;输出结果
mov dh,0
mov dl,letter
call dispdec
call printnewline
mov dl,digit
call dispdec
call printnewline
mov dl,other
call dispdec
MOV AH,4CH
INT 21H
;打印固定字符串
print proc
push ax
mov ah,09h
int 21h
pop ax
ret
print endp
;用户输入
cin proc
push ax
mov ah,0AH
int 21h
pop ax
call printnewline
ret
cin endp
;输出换行
printnewline proc
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
printnewline endp
;十进制输出,入口参数dx
dispdec proc
push ax
push bx
push cx
push dx
mov ax,dx
xor dx,dx
mov bx,10
mov cx,0
a:
cmp ax,10
jb ok
div bx
add dl,30h
push dx
xor dx,dx
inc cx
jmp a
ok:
add al,30h
push ax
inc cx
b:
pop dx
mov ah,2
int 21h
loop b
pop dx
pop cx
pop bx
pop ax
ret
dispdec endp
CODES ENDS
END START
输出结果如图: