1629. 按鍵持續(xù)時(shí)間最長的鍵
800
2025-04-03
(1)從鍵盤輸入一個(gè)字符串(串長不大于80)。
(2)以十進(jìn)制輸出字符串中非字母字符的個(gè)數(shù)(不是a to z或 A to Z)。
(3)輸出原字符串且令非字母字符閃爍顯示。
(4)找出字符串中ASCII碼值最大的字符,在字符串中用紅色顯示。
(5)字符串的輸入和結(jié)果的輸出都要有必要的提示,且提示獨(dú)占一行。
(6)要使用到子程序。
data segment hintinput db "please input a string:$" hintoutput1 db "The number of non-alphabetic characters:$";輸出非字母字符的個(gè)數(shù) hintoutput2 db "flashes non-alphabetic characters:$";輸出原字符串并閃爍 hintoutput3 db "The character with the largest ASCII value in a string:$";ascill最大字符 buf db 200 db ? db 200 dup(?) count db 0 crlf db 0ah,0dh,'$' data ends stack segment stack string db 500 dup(?) stack ends extra segment ;定義附加段 extra ends codes segment assume cs:codes,ds:data,ss:stack,es:extra main proc far start: mov ax,data ;分別將數(shù)據(jù)段,堆棧段,附加段送入代碼段 mov ds,ax mov ax,stack mov ss,ax mov ax,extra mov es,ax ;---------------------------輸入字符串提示語并進(jìn)行回車換行 lea dx,hintinput ;輸入提示語 mov ah,9;輸出功能入口在dx int 21h lea dx,crlf;輸入提示語后,回車換行 mov ah,09 int 21h ;---------------------------通過a號功能進(jìn)行字符串輸入操作并回車換行 mov ah,0ah;輸入功能入口在dx lea dx,buf int 21h lea dx,crlf ;輸入后回車換行 mov ah,9 int 21h ;------------------------------------首先用cl儲存字符串長度,si源變址寄存器指向串真正開始的地方 mov cl,buf+1;cl中放置實(shí)際字符串長度 lea si,buf+2;si放置字符串首地址 ;------------------------------------首先輸出提示語回車換行,以十進(jìn)制輸出字符串中非字母字符的個(gè)數(shù)(不是a to z或 A to Z)。 call print1 ;-------------------------------------- call print2 ;---------=---------------------------- call print3 ;-------------------------------------- mov ah,4ch int 21h main endp print1 proc near ;-----------------子程序一入口 push cx push si lea dx,hintoutput1 ;輸出提示語 mov ah,09h;輸出功能入口在dx int 21h lea dx,crlf;輸入提示語后,回車換行 mov ah,09 int 21h mov dl,0 ;用dl來計(jì)數(shù),統(tǒng)計(jì)符串中非字母字符的個(gè)數(shù) L0: mov al,[si] cmp al,'A' jb L1 ;如果字符<'A',跳轉(zhuǎn)到L1 cmp al,'Z' jbe L2 ;如果字符<='Z',跳轉(zhuǎn)到L2 cmp al,'a' jb L1 ;如果字符<'a',跳轉(zhuǎn)到L1 cmp al,'z' jbe L2 ;如果字符<='Z',跳轉(zhuǎn)到L2 L1: inc dl ;計(jì)數(shù)器加1 L2: inc si dec cl jnz L0 ;----------------------------------輸出非字母字符的個(gè)數(shù)dl cmp dl,9h jbe L ;如果非字母個(gè)數(shù)小于10,則直接加30輸出 mov dh,0 ;否則把dx存入ax中 mov ax,dx mov bl,10 ;ax除以10后,ah作為商 div bl ;al作為余數(shù) mov dl,al mov ch,al ;防止ah中的商被02h沖掉,先把商轉(zhuǎn)移到ch中 add dl,30h ;先輸出商,再輸出余數(shù),就是10進(jìn)制了 mov ah,02h int 21h mov dl,ch L: add dl,30h mov ah,02h int 21h lea dx,crlf ;輸出后,回車換行 mov ah,09 int 21h pop si pop cx ret print2 proc near lea dx,hintoutput2 ;輸出提示語 mov ah,09h ;輸出功能入口在dx int 21h lea dx,crlf ;輸入提示語后,回車換行 mov ah,09h int 21h push cx push si cld ;方向標(biāo)志位df清零 L3: push cx lodsb ;從字符串串中取數(shù)據(jù)至al cmp al,'A' jb L4 ;如果字符<'A',跳轉(zhuǎn)到L4 cmp al,'Z' jbe L5 ;如果字符<='Z',跳轉(zhuǎn)到L5 cmp al,'a' jb L4 ;如果字符<'a',跳轉(zhuǎn)到L4 cmp al,'z' jbe L5 ;如果字符<='Z',跳轉(zhuǎn)到L5 L4: ;如果不是字母,則進(jìn)行閃爍輸出 mov bl,10000111b ;bl屬性閃爍輸出 mov bh,0 ;顯示頁為0 mov cx,1 ;顯示字符為1個(gè) mov ah,09h int 10h ;輸出bl屬性的字符串 mov ah,03h int 10h ;讀光標(biāo)位置 inc dl ;輸出列+1 mov ah,02h int 10h ;置光標(biāo)位置 jmp L6 L5: mov bl,00000111b ;bl屬性為平常輸出 mov bh,0 ;顯示頁為0 mov cx,1 ;顯示字符個(gè)數(shù)為1個(gè) mov ah,09h int 10h ;輸出屬性為bl的字符 mov ah,03h int 10h ;讀光標(biāo)位置 inc dl ;輸出列+1 mov ah,02h int 10h ;置光標(biāo)位置 L6: pop cx loop L3 lea dx,crlf ;輸入提示語后,回車換行 mov ah,09 int 21h pop si pop cx ret print3 proc near lea dx,hintoutput3 ;輸出提示語 mov ah,09h ;輸出功能入口在dx int 21h lea dx,crlf ;輸入提示語后,回車換行 mov ah,09 int 21h push cx push si ;count用來存放ascill最大的字符 L7: mov al,[si] cmp al,count ;比較al和count的大小,如果al>count,則令al=count jbe L8 mov count,al L8: inc si dec cl jnz L7 pop si pop cx cld L9: push cx lodsb ;從串中取數(shù)據(jù)至al cmp al,count jz L11 ;如果字符==ascill碼最大字符 L10: mov bl,00000111b ;bl屬性正常輸出 mov bh,0 ;顯示頁為0 mov cx,1 ;顯示字符為1個(gè) mov ah,09h int 10h ;輸出bl屬性的字符串 mov ah,03h int 10h ;讀光標(biāo)位置 inc dl ;輸出列+1 mov ah,02h int 10h ;置光標(biāo)位置 jmp L12 L11: mov bl,00000100b ;bl屬性為紅色輸出 mov bh,0 ;顯示頁為0 mov cx,1 ;顯示字符個(gè)數(shù)為1個(gè) mov ah,09h int 10h ;輸出屬性為bl的字符 mov ah,03h int 10h ;讀光標(biāo)位置 inc dl ;輸出列+1 mov ah,02h int 10h ;置光標(biāo)位置 L12: pop cx loop L9 lea dx,crlf ;輸出后,回車換行 mov ah,09 int 21h ret codes ends end start ;--------------------------------------
希望大家不吝賜教,在下面支出我的錯(cuò)誤,謝謝
匯編語言
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。