日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编原理实验 --查找子字符串的位置

發(fā)布時(shí)間:2024/10/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编原理实验 --查找子字符串的位置 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)驗(yàn)2:(子字符串,查找字符串在另一個(gè)字符串中出現(xiàn)的位置)

設(shè)計(jì)算法:將用戶輸入關(guān)鍵字和句子,將bx為關(guān)鍵字起始位置地址,dx賦初值為句子起始位置地址,將dx和bx內(nèi)容進(jìn)行匹配,如果不匹配則dx指向句子下一個(gè)字符及inc dx。用di表示當(dāng)字符匹配成功時(shí)bx,dx的偏移量,di賦初值為0,[bx+di]與[dx+di]比較,如果匹配成功di自增1,直到di加到等于關(guān)鍵字長度時(shí)顯示結(jié)果匹配成功,如果中間有匹配不成功di重置為0,直到當(dāng)整個(gè)句子查詢完沒匹配則顯示結(jié)果不匹配.

程序?qū)崿F(xiàn):調(diào)用print子程序,將緩沖區(qū)字符串顯示出來,調(diào)用cin子程序?qū)⒂脩糨斎胱址嫒胫付ň彌_區(qū)。另 cx=句子長度,用bx,dx分別等于關(guān)鍵字地址和句子地址按照前面所說的算法來編程。此外,還有一個(gè)要求需要顯示當(dāng)匹配成功時(shí)的子字符串位置:匹配的位置等于句子長度-cx,或匹配位置=dx-句子首地址,調(diào)用數(shù)字輸出子程序。要注意的是:得出來的結(jié)果為十進(jìn)制數(shù)字,要想以十六進(jìn)制格式輸出數(shù)字還需要將其轉(zhuǎn)化成ASCII輸出.

十六進(jìn)制數(shù)字輸出算法;(在附錄中會(huì)附上十進(jìn)制數(shù)輸出代碼)具體思路:將數(shù)字除以16,將余數(shù)壓入棧中,商繼續(xù)除以16,得出來的余數(shù)再壓入棧中,

重復(fù)上述步驟,直到商為0時(shí)結(jié)束,再將棧頂元素依次推出并輸出(判斷是否小于10,小于10加30H輸出,大于10加31h輸出)。

DATAS SEGMENT;此處輸入數(shù)據(jù)段代碼 msg db 'enter keyword:$' msg1 db 'enter sentence:$' msg2 db 'NoMatch$' msg3 db 'last Match location at:$' keepcin db 100 cinlen db 0 cinfld db 100 dup(0) keepcin1 db 100 cin1len db 0 cin1fld db 100 dup(0) DATAS ENDSSTACKS SEGMENT;此處輸入堆棧段代碼 STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXmov es,ax;此處輸入代碼段代碼;此處為標(biāo)題輸出和輸入mov dx,offset msgcall print ;"enter keyword" mov dx,offset keepcincall cin mov dx,offset msg1call print mov dx,offset keepcin1call cin;用戶輸入完成接下來要完成字符串匹配mov bx,offset cinfld ;關(guān)鍵字 mov dx,offset cin1fld ;句子mov cl,cin1len ;循環(huán)次數(shù)為句子長度 mat:call comparestr cmp al,0je matchinc dxloop matjmp noMatch ;遍歷完都沒找到 match:mov dx,offset msg3call print mov al,cin1lensub al,clmov dl,al ;索引從0開始call dispdecjmp stop noMatch: ;沒有查詢到結(jié)果mov dx,offset msg2call print stop: MOV AH,4CHINT 21H;以下為子程序 comparestr proc ;dx,bx指向字符串,比較字符串大小,相等為al=0,否則-1push cxpush sipush dimov si,dxmov di,bx ;mov cl,cinlen ;改成字符串長度cld lastagain: cmpsbjnz lastunmatloop lastagain;匹配成功mov al,0jmp lastoutput lastunmat: mov al,-1 lastoutput: pop di pop si pop cxret comparestr endp ;打印固定字符串 print procpush axmov ah,09hint 21hpop axret print endp ;十進(jìn)制輸出,入口參數(shù)dx dispdec procpush axpush bxpush cxpush dxmov ax,dxxor dx,dxmov bx,10mov cx,0 a:cmp ax,10jb okdiv bxadd dl,30hpush dxxor dx,dxinc cxjmp a ok:add al,30hpush axinc cx b:pop dxmov ah,2int 21hloop bpop dxpop cxpop bxpop axret dispdec endp;用戶輸入 cin procpush axmov ah,0AHint 21hpop axcall printnewlineret cin endp ;輸出換行 printnewline procpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axret printnewline endp CODES ENDSEND START

輸出結(jié)果如圖:


總結(jié)

以上是生活随笔為你收集整理的汇编原理实验 --查找子字符串的位置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。