實驗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
輸出結果如圖: