;This is made by wq
;編程從鍵盤讀入不超過256個(gè)字符的字符串;
;編程統(tǒng)計(jì)其中數(shù)字的個(gè)數(shù),并將結(jié)果在屏幕上輸出。
;經(jīng)進(jìn)一步完善(能輸出三位數(shù)啦)
DATAS SEGMENT
sum db 00h ;累加器
string db 256 dup(0dh);存放字符
tital db 'This program is made by wq.',0dh,0ah
db 'It is used to calculater the amout of the number in the string ',0dh,0ah,'$'
tital1 db 'PLease input the string: ','$'
overs db 'Amout of the nember is : ','$'
tital2 db 'Do you want to have a try again(if yes,input "y" else "n") : ',0dh,0ah, '$'
tital3 db 'Welcome to use this program again','$'
kongzi db 0dh,0ah,'$'
result db 256 dup(?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,offset tital;輸出抬頭
mov dx,ax
mov ah,09h
int 21h
main:
lea dx,kongzi
mov ah,09h
int 21h
lea dx,tital1 ;輸出抬頭1
mov ah,09h
int 21h
mov si,0
mov ax,offset string
mov dx,ax
again: ;輸入字符
mov ah,01h
int 21h
cmp al,0dh
jz then
mov string[si],al
inc si
jmp again ;輸入完畢
then: ;傳輸
mov di,0
mov si,0
mov bl,0
exchang: ;判斷字符的性質(zhì)
lea dx,string
cmp string[si],0dh
jz over
cmp string[si],30h
jnb next
inc si
dec cx
jmp exchang
next:
mov al,string[si]
cmp string[si],39h
jbe calculator
inc si
dec cx
jmp exchang
calculator:
lea dx,result
mov result[di],al
inc si
inc sum
inc di
dec cx
jmp exchang
over: ;處理并輸出數(shù)字個(gè)數(shù)
lea dx,overs
mov ah,09h
int 21h
mov ax,0000h
mov al,sum[0] ;判斷是否為三位數(shù)
cmp al,64h
jae san
mov bl,10
div bl
mov dx,ax
add dx,3030h
mov ah,02h
int 21h
mov dl,dh
mov ah,02h
int 21h
jmp a
san: mov bl,10 ;如果是三位數(shù)則多處理一位
div bl
mov cl,ah ;把第一位給cl
add cl,30h
mov ah,00h
div bl ;第二次除十
mov dx,ax
add dx,3030h
mov ah,02h
int 21h
mov dl,dh
mov ah,02h
int 21h
mov dl,cl
mov ah,02h
int 21h
a: lea dx,kongzi
mov ah,09h ;判斷是否循環(huán)操作
int 21h
lea dx,tital2
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'y'
je main
lea dx,tital3
mov ah,09h
int 21h
MOV AH,4CH
INT 21H
CODES ENDS
END START