問題
從鍵盤輸入一個字符串(長度不超過30),統計字符串中非數字的個數,並將統計的結果顯示在屏幕上,用EXE格式實現。
源程序
data segment
hintinput db "please input a string:$";輸入提示語
hintoutput db "non-number:$";輸出提示語
str db 30,?,30 dup(?);將輸入的字符串保存在str中
crlf db 0ah,0dh,'$';回車換行符
data ends
code segment
assume cs:code,ds:data
main proc far
start:
mov ax,data
mov ds,ax
lea dx,hintinput;輸出提示語
mov ah,09h
int 21h
lea dx,crlf ;回車換行
mov ah,09h
int 21h
lea dx,str
mov ah,0ah
int 21h
lea dx,crlf ;回車換行
mov ah,09h
int 21h
lea si,str+2;si保存str首地址
mov cl,str+1;cl保存str長度
mov al,0 ;用al非數字計數
mov ch,0
L1:
mov dl,[si] ;把str中的數依次送入dl中
cmp dl,'0' ;如果dl<0,al加1
jb L2
cmp dl,'9';如果dl>9,al加1
ja L2
cmp dl,'9'
jbe L3
L2:
inc al
L3:
inc si
loop L1
lea dx,hintoutput;輸出提示語
mov ah,09h
int 21h
mov dl,al
cmp dl,9h
jbe L ;如果非字母個數小於10,則直接加30輸出
mov dh,0 ;否則把dx存入ax中
mov ax,dx
mov bl,10 ;ax除以10後,ah作爲商
div bl ;al作爲餘數
mov dl,al
add dl,30h ;先輸出商,再輸出餘數,就是10進制了
mov ah,02h
int 21h
mov dl,ah
L:
add dl,30h
mov ah,02h
int 21h
lea dx,crlf ;回車換行
mov ah,09h
int 21h
mov ax,4c00h
int 21h
main endp
code ends
end start