專(zhuān)利名稱(chēng):可同時(shí)處理多個(gè)字串的字串處理裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明是有關(guān)于字串處理,尤指一種可同時(shí)處理多個(gè)字串的字串處理裝置。
背景技術(shù):
字串的比較是一個(gè)在字串處理過(guò)程中經(jīng)常用到的一個(gè)功能。舉例來(lái)說(shuō),文字搜尋、HTML/XML的剖析、病毒檢測(cè)以及型樣比對(duì)都是應(yīng)用字串比較來(lái)完成特定用途的重要功能。 是故,字串比較的效率對(duì)一個(gè)字串處理程序的整體效能來(lái)說(shuō)有著極為重要的影響。一般已 知的字串比較是以字節(jié)相關(guān)(byte-related)的指令來(lái)實(shí)現(xiàn)的,也就是說(shuō),系統(tǒng)是以一次一 個(gè)字節(jié)(byte)的方式來(lái)逐一處理輸入的字串。請(qǐng)一并參考圖1與圖2。圖1為繪示了執(zhí)行“strcmp”(string comparison)這個(gè) 功能的程序碼以及處理器指令的示意圖,而圖2則為依據(jù)先前技術(shù)應(yīng)用處理器指令實(shí)現(xiàn)該 “strcmp”功能的一范例流程圖。指令群Ll內(nèi)為一處理器用以實(shí)現(xiàn)程序碼“while (cla ! =‘\0’ Mcla== clb) ”的處理器指令,而指令群L2內(nèi)為處理器用以實(shí)現(xiàn)程序碼“return cla-clb”的處理器指令。本領(lǐng)域技術(shù)人員應(yīng)可輕易了解,圖1中已知字串比較的操作是一 次處理一個(gè)字節(jié),因此,在比較兩個(gè)字節(jié)時(shí),便需要使用四個(gè)指令(例如圖1中指令群Ll 內(nèi)的處理器指令)。對(duì)于需要使用大量字串比較的應(yīng)用(例如超文本標(biāo)示語(yǔ)言(HyperText Markup Language, HTML)的處理)來(lái)說(shuō),處理器需要相對(duì)應(yīng)地花費(fèi)大量的時(shí)間來(lái)一次一個(gè) 字節(jié)地處理字串的比較。因此,若能使用一個(gè)更有效率的方式來(lái)處理字串,將可以促進(jìn)該些 應(yīng)用的整體效能的提升。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種字串處理裝置,用以同時(shí)處理多個(gè)字串而以更有效 率的方式執(zhí)行字串比較的功能。依據(jù)本發(fā)明的實(shí)施例,其揭露了一種字串處理裝置。該字串處理裝置包含有第一 儲(chǔ)存裝置,用以?xún)?chǔ)存多個(gè)第一預(yù)定字串;第二儲(chǔ)存裝置;載入模塊,耦接于該第一儲(chǔ)存裝置 及該第二儲(chǔ)存裝置,用以由該第一儲(chǔ)存裝置載入該多個(gè)第一預(yù)定字串至該第二儲(chǔ)存裝置; 比較模塊,耦接于該第二儲(chǔ)存裝置,用以同時(shí)比較一特定字串以及該多個(gè)第一預(yù)定字串,并 分別產(chǎn)生對(duì)應(yīng)該特定字串的多個(gè)比較結(jié)果;以及控制邏輯器,耦接于該比較模塊,用以依據(jù) 該多個(gè)比較結(jié)果產(chǎn)生字串處理結(jié)果。依據(jù)本發(fā)明的實(shí)施例,其還揭露了一種字串處理裝置。該字串處理裝置包含有 第一儲(chǔ)存裝置,用以?xún)?chǔ)存多個(gè)第一預(yù)定字串;第二儲(chǔ)存裝置;載入模塊,耦接于該第一儲(chǔ)存 裝置及該第二儲(chǔ)存裝置,用以由該第一儲(chǔ)存裝置載入該多個(gè)第一預(yù)定字串至該第二儲(chǔ)存裝 置;比較模塊,耦接于該第二儲(chǔ)存裝置,用以同時(shí)地分別比較多個(gè)第二預(yù)定字串以及該多個(gè) 第一預(yù)定字串,并分別產(chǎn)生對(duì)應(yīng)該多個(gè)第二預(yù)定字串的多個(gè)比較結(jié)果;以及控制邏輯器,耦 接于該比較模塊,用以依據(jù)該多個(gè)比較結(jié)果產(chǎn)生字串處理結(jié)果。
圖1為執(zhí)行“strcmp”這個(gè)功能的程序碼以及處理器指令的示意圖。圖2為依據(jù)先前技術(shù)應(yīng)用處理器指令實(shí)現(xiàn)“strcmp”功能的一范例流程圖。圖3為本發(fā)明字串處理方法的第一實(shí)施例的流程圖。圖4為本發(fā)明字串處理裝置的第一實(shí)施例的示意圖。圖5為找出第一個(gè)與一特定字串常數(shù)相同的字節(jié)的偽碼片段。圖6為本發(fā)明字串處理方法的第二實(shí)施例的流程圖。圖7為本發(fā)明字串處理裝置的第二實(shí)施例的示意圖。圖8為找出第一個(gè)與所載入的字組中一起始字節(jié)相同的字節(jié)的偽碼片段。圖9為本發(fā)明字串處理方法的第三實(shí)施例的流程圖。圖10為本發(fā)明字串處理裝置的第三實(shí)施例的示意圖。圖11為找出兩預(yù)定字串中的第一個(gè)不同的兩相對(duì)應(yīng)字串的偽碼片段。圖12為找出兩預(yù)定字串中的最后一個(gè)不同的兩相對(duì)應(yīng)字串的偽碼片段。圖13為本發(fā)明字串處理方法的第四實(shí)施例的流程圖。圖14為本發(fā)明字串處理裝置的第四實(shí)施例的示意圖。圖15為本發(fā)明執(zhí)行“strcmp”這個(gè)功能的程序碼以及處理器指令的示意圖。圖16為本發(fā)明應(yīng)用處理器指令實(shí)現(xiàn)“strcmp”功能的一范例流程圖。[主要元件標(biāo)號(hào)說(shuō)明]
100、200、300、400~~ 字串處理裝置 110、210、310、410 第一儲(chǔ)存裝置 120、220、320、420 第二儲(chǔ)存裝置 130、230、330、430 載入模塊 140、240、340、440 比較模塊 150、250、350、450 控制邏輯器
具體實(shí)施例方式在說(shuō)明書(shū)及上述的申請(qǐng)專(zhuān)利范圍當(dāng)中使用了某些詞匯來(lái)指稱(chēng)特定的元件。本領(lǐng)域 技術(shù)人員應(yīng)可理解,硬件制造商可能會(huì)用不同的名詞來(lái)稱(chēng)呼同樣的元件。本說(shuō)明書(shū)及上述 的申請(qǐng)專(zhuān)利范圍并不以名稱(chēng)的差異來(lái)作為區(qū)分元件的方式,而是以元件在功能上的差異來(lái) 作為區(qū)分的準(zhǔn)則。在通篇說(shuō)明書(shū)及上述的請(qǐng)求項(xiàng)當(dāng)中所提及的「包含」為開(kāi)放式的用語(yǔ),故 應(yīng)解釋成「包含但不限定于」。另外,「耦接」一詞在此是包含任何直接及間接的電氣連接手 段。因此,若文中描述第一裝置耦接于第二裝置,則代表該第一裝置可直接電氣連接于該第 二裝置,或通過(guò)其它裝置或連接手段間接地電氣連接至該第二裝置。
請(qǐng)參照?qǐng)D3,圖3為本發(fā)明字串處理方法的第一實(shí)施例的流程圖。此實(shí)施例的主要目的為找到第一個(gè)與一特定位型樣(bit pattern)相同的字節(jié)。倘若大體上可達(dá)到相同的 結(jié)果,并不需要一定遵照?qǐng)D3所示的流程中的步驟順序來(lái)進(jìn)行,且圖3所示的步驟不一定要 連續(xù)進(jìn)行,亦即,其它步驟亦可插入其中。本發(fā)明字串處理方法的第一實(shí)施例的運(yùn)作可歸納 如下S201 載入一字組(word,即四個(gè)字節(jié))以作為多個(gè)第一預(yù)定字串,亦即,在所載入 的該字組中的各個(gè)字節(jié)分別作為第一預(yù)定字串。S202 將該多個(gè)第一預(yù)定字串中的每一字串與一 8位(8_bit)字串常數(shù)imm8同時(shí) 作比較,進(jìn)而產(chǎn)生多個(gè)比較結(jié)果。S203:判斷該多個(gè)第一預(yù)定字串中是否完全沒(méi)有任一字串與8位字串常數(shù)imm8相 同。若是,到步驟S204 ;若否,到步驟S205。S204 將字串處理結(jié)果設(shè)定為零。S205 依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序(endian),檢查與8位字串常數(shù)imm8相 同的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第一個(gè)字串。若是,到步驟S206 ;若否, 到步驟S207。S206 將字串處理結(jié)果設(shè)定為_(kāi)4。S207 依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與8位字串常數(shù)imm8相同的字串 是否為在該多個(gè)第一預(yù)定字串中順序上的第二個(gè)字串。若是,到步驟S208 ;若否,到步驟 S209。S208 將字串處理結(jié)果設(shè)定為_(kāi)3。S209 依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與8位字串常數(shù)imm8相同的字串 是否為在該多個(gè)第一預(yù)定字串中順序上的第三個(gè)字串。若是,到步驟S210 ;若否,到步驟 S211。S210 將字串處理結(jié)果設(shè)定為_(kāi)2。S211 將字串處理結(jié)果設(shè)定為-1。在此實(shí)施例中,步驟S205、S207以及S 209被設(shè)計(jì)來(lái)參照該多個(gè)第一預(yù)定字串的 字節(jié)序以于該多個(gè)第一預(yù)定字串中找出在順序上第一個(gè)與8位字串常數(shù)imm8相同的字串。請(qǐng)注意,在步驟S206、S208、S210以及S211中的操作是用以指出第一個(gè)與8位字 串常數(shù)imm8相同的字串于該多個(gè)第一預(yù)定字串內(nèi)的次序。舉例來(lái)說(shuō),當(dāng)該多個(gè)第一預(yù)定字 串的字節(jié)序?yàn)樾∽止?jié)序(little-endian)且該多個(gè)第一預(yù)定字串中只有在次序上為第二 與第三的字串與8位字串常數(shù)imm8相同,在這個(gè)情況之下,由于該多個(gè)第一預(yù)定字串的字 串?dāng)?shù)為四,而字串處理結(jié)果為-3,由于4-3 = 1,因此字串處理結(jié)果為_(kāi)3即指示第一個(gè)與8 位字串常數(shù)imm8相同的字串于該多個(gè)第一預(yù)定字串內(nèi)的次序?yàn)榈诙〉?請(qǐng)注意,字串處 理結(jié)果為0是代表次序上為第一小的)。而在另一個(gè)情況之下,當(dāng)該多個(gè)第一預(yù)定字串的 字節(jié)序?yàn)榇笞止?jié)序(big-endian)且該多個(gè)第一預(yù)定字串中只有在次序上為第二與第三的 字串與8位字串常數(shù)imm8相同,由于該多個(gè)第一預(yù)定字串的字串?dāng)?shù)為四,而字串處理結(jié)果 為-2,由于4-2 = 2,因此字串處理結(jié)果為_(kāi)2即指示第一個(gè)與8位字串常數(shù)imm8相同的字 串于該多個(gè)第一預(yù)定字串內(nèi)的次序?yàn)榈谌〉?。圖4為本發(fā)明字串處理裝置的第一實(shí)施例的示意圖。字串處理裝置100應(yīng)用圖3所示的方法來(lái)找出第一個(gè)與一特定字串常數(shù)相同的字節(jié)。如圖4所示,字串處理裝置100包 含有第一儲(chǔ)存裝置110,用以?xún)?chǔ)存字組Ra,其包含有四個(gè)字節(jié)RaO Ra3且其字節(jié)序?yàn)樾?字節(jié)序;第二儲(chǔ)存裝置120 ;載入模塊130,耦接于第一儲(chǔ)存裝置110及第二儲(chǔ)存裝置120, 用以由第一儲(chǔ)存裝置110載入字組Ra至第二儲(chǔ)存裝置120 ;比較模塊140,耦接于第二儲(chǔ)存 裝置120,用以同時(shí)分別比較一字串常數(shù)imm8以及字組Ra的字節(jié)RaO Ra3,并產(chǎn)生對(duì)應(yīng) 于字組Ra中字節(jié)Ra0-Ra3的多個(gè)比較結(jié)果Ml M4 ;以及控制邏輯器150,耦接于比較模塊 140,用以依據(jù)比較結(jié)果Ml M4產(chǎn)生字串處理結(jié)果以顯示在所載入的字組Ra中次序上第 一個(gè)與字串常數(shù)imm8相同的字節(jié)。此外,控制邏輯器150所產(chǎn)生的字串處理結(jié)果是依據(jù)字組Ra的字節(jié)序來(lái)顯 示第一 個(gè)與字串常數(shù)imm8相同的字串于字組Ra內(nèi)的次序。在此實(shí)施例中,假設(shè)字組Ra中只有在 次序上為第二與第三的字串(亦即字節(jié)Ral和Ra2)與字串常數(shù)imm8相同,在這個(gè)情況之 下,由于字組Ra的字串?dāng)?shù)為四(亦即字組Ra包含四個(gè)字節(jié)RaO Ra3),控制邏輯器150便 設(shè)定字串處理結(jié)果為_(kāi)3,由于4-3 = 1,因此字串處理結(jié)果為_(kāi)3是指出第一個(gè)與字串常數(shù) imm8相同的字串為Ral ;相反地,若字組Ra的字節(jié)序?yàn)榇笞止?jié)序,則控制邏輯器150便設(shè)定 字串處理結(jié)果為_(kāi)2,由于4-2 = 2,因此字串處理結(jié)果為_(kāi)2便指出第一個(gè)與字串常數(shù)imm8 相同的字串為Ra2。請(qǐng)參照?qǐng)D5,圖5所顯示的偽碼(pseudo code)是用以概述以上所述的找出第一個(gè) 與一特定字串常數(shù)相同的字節(jié)的方法與裝置的運(yùn)作。由于本領(lǐng)域技術(shù)人員在閱讀以上關(guān)于 圖3的方法與圖4的裝置的段落后,應(yīng)可輕易了解圖5的偽碼的運(yùn)作,相關(guān)的細(xì)節(jié)于此便不 再贅述。請(qǐng)參照?qǐng)D6,圖6為本發(fā)明字串處理方法的第二實(shí)施例的流程圖。此一實(shí)施例的 主要目的為找到第一個(gè)與一載入字串中一起始字節(jié)相同的字節(jié)。倘若大體上可達(dá)到相同的 結(jié)果,并不需要一定照?qǐng)D6所示的流程中的步驟順序來(lái)進(jìn)行,且圖6所示的步驟不一定要連 續(xù)進(jìn)行,亦即,其它步驟亦可插入其中。本發(fā)明字串處理方法的第二實(shí)施例的操作可歸納如 下S301 載入一字組(亦即四個(gè)字節(jié))以作為多個(gè)第一預(yù)定字串,并載入另一字組 (亦即四個(gè)字節(jié))以作為多個(gè)第二預(yù)定字串。S302 將該多個(gè)第一預(yù)定字串中的每一字串與該多個(gè)第二預(yù)定字串中的一起始字 串同時(shí)作比較,進(jìn)而產(chǎn)生多個(gè)比較結(jié)果。S303:判斷該多個(gè)第一預(yù)定字串中是否完全沒(méi)有任一字串與該多個(gè)第二預(yù)定字串 中的該起始字串相同。若是,到步驟S304 ;若否,到步驟S305。S304 將字串處理結(jié)果設(shè)定為零。S305:依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與該多個(gè)第二預(yù)定字串中的該起 始字串相同的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第一個(gè)字串。若是,到步驟 S306 ;若否,到步驟S307。S306 將字串處理結(jié)果設(shè)定為_(kāi)4。S307:依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與該多個(gè)第二預(yù)定字串中的該起 始字串相同的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第二個(gè)字串。若是,到步驟 S308 ;若否,到步驟S309。
S308 將字串處理結(jié)果設(shè)定為-3。S309:依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與該多個(gè)第二預(yù)定字串中的該起 始字串相同的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第三個(gè)字串。若是,到步驟 S310 ;若否,到步驟S311。S310 將字串處理結(jié)果設(shè)定為_(kāi)2。S311 將字串處理結(jié)果設(shè)定為-1。在此實(shí)施例中,步驟S305、S307以及S309被設(shè)計(jì)來(lái)參照該多個(gè)第一預(yù)定字串的字 節(jié)序以于該多個(gè)第一預(yù)定字串中找出次序上第一個(gè)與該多個(gè)第二預(yù)定字串中的起始字串 相同的字串。本領(lǐng)域技術(shù)人員在閱讀以上關(guān)于第一實(shí)施例的敘述的段落后,應(yīng)可輕易了解 此實(shí)施例中字串處理結(jié)果的設(shè)定原則,故相關(guān)細(xì)節(jié)在此便不再贅述。圖7為本發(fā)明字串處理裝置的第二實(shí)施例的示意圖。字串處理裝置200應(yīng)用圖6 所示的方法來(lái)找出第一個(gè)與該多個(gè)第二預(yù)定字串中的起始字節(jié)相同的字節(jié)。在此實(shí)施例 中,載入模塊230由第一儲(chǔ)存裝置210載入第二字組Rb至第二儲(chǔ)存裝置220,其中第二字 組Rb包含有四個(gè)字節(jié)RbO- Rb3,且其字節(jié)序?yàn)樾∽止?jié)序,而比較模塊240比較第二字組 Rb的起始字串(亦即起始字節(jié)RbO)與所載入的第一字組Ra中所有字串(亦即字節(jié)RaO Ra3),以產(chǎn)生分別對(duì)應(yīng)于RaO Ra3的多個(gè)比較結(jié)果Ml M4。因此,控制邏輯器250可據(jù) 以產(chǎn)生字串處理結(jié)果以指示在所載入的第一字組Ral中次序上第一個(gè)與第二字組Rb中的 起始字節(jié)相同的字節(jié)。請(qǐng)參照?qǐng)D8,圖8所顯示的偽碼用以概述以上所述的找出第一個(gè)與所載入的字組 中一起始字節(jié)相同的字節(jié)的方法與裝置的運(yùn)作。由于本領(lǐng)域技術(shù)人員在閱讀以上關(guān)于圖6 的方法與圖7的裝置的段落后,應(yīng)可輕易了解圖8的偽碼的運(yùn)作,相關(guān)的細(xì)節(jié)于此便不再贅 述。請(qǐng)參照?qǐng)D9,圖9為本發(fā)明字串處理方法的第三實(shí)施例的流程圖。此一實(shí)施例的主 要目的為在兩個(gè)預(yù)定字串中找出第一個(gè)/最后一個(gè)不同的字串。倘若大體上可達(dá)到相同的 結(jié)果,并不需要一定遵照?qǐng)D9所示的流程中的步驟順序來(lái)進(jìn)行,且圖9所示的步驟不一定要 連續(xù)進(jìn)行,亦即,其它步驟亦可插入其中。本發(fā)明字串處理方法的第三實(shí)施例的運(yùn)作可歸納 如下S401 載入一字組(四個(gè)字節(jié))以作為多個(gè)第一預(yù)定字串,并載入另一字組(四個(gè) 字節(jié))以作為多個(gè)第二預(yù)定字串。S402:將該多個(gè)第一預(yù)定字串中的各個(gè)字串分別與該多個(gè)第二預(yù)定字串中各個(gè)對(duì) 應(yīng)的字串同時(shí)進(jìn)行比較,進(jìn)而產(chǎn)生多個(gè)比較結(jié)果。S403:判斷該多個(gè)第一預(yù)定字串中的各個(gè)字串與該多個(gè)第二預(yù)定字串中各個(gè)對(duì)應(yīng) 的字串是否完全相同。若是,到步驟S404 ;若否,到步驟S405。S404 將字串處理結(jié)果設(shè)定為零。S405 依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查在該多個(gè)第一預(yù)定字串中第一個(gè) 不同于該多個(gè)第二預(yù)定字串中對(duì)應(yīng)字串的字串是否為在該多個(gè)第一預(yù)定字串中順序上的 第一個(gè)字串。若是,到步驟S406 ;若否,到步驟S407。S306:若目的是為了找出第一個(gè)不同字串,則將字串處理結(jié)果設(shè)定為-4;然而,若 目的是為了找出最后一個(gè)不同的字串,則將字串處理結(jié)果設(shè)定為-1。
S407 依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查在該多個(gè)第一預(yù)定字串中第一個(gè) 不同于該多個(gè)第二預(yù)定字串中對(duì)應(yīng)字串的字串是否為在該多個(gè)第一預(yù)定字串中順序上的 第二個(gè)字串。若是,到步驟S408 ;若否,到步驟S409。S408 若目的是為了找出第一個(gè)不同的字串,則將字串處理結(jié)果設(shè)定為_(kāi)3 ;然而, 若目的是為了找出最后一個(gè)不同的字串,則將字串處理結(jié)果設(shè)定為-2。S409 依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查在該多個(gè)第一預(yù)定字串中第一個(gè) 不同于該多個(gè)第二預(yù)定字串中對(duì)應(yīng)字串的字串是否為在該第一預(yù)定字串中順序上的第三 個(gè)字串。若是,到步驟S410 ;若否,到步驟S411。S410:若目的是為了找出第一個(gè)不同的字串,將字串處理結(jié)果設(shè)定為-2 ;然而,若 目的是為了找出最后一個(gè)不同的字串,則將字串處理結(jié)果設(shè)定為-3。S411 若目的是為了找出第一個(gè)不同的字串,將字串處理結(jié)果設(shè)定為-1 ;然而,若 目的是為了找出最后一個(gè)不同的字串,將字串處理結(jié)果設(shè)定為-4。在此實(shí)施例中,步驟S405、S407以及S409被設(shè)計(jì)來(lái)參照該多個(gè)第一預(yù)定字串的字 節(jié)序以于該多個(gè)第一預(yù)定字串中找出第一個(gè)/最后一個(gè)不同于該多個(gè)第二預(yù)定字串中相 對(duì)應(yīng)字串的字串。此外,本領(lǐng)域技術(shù)人員在閱讀以上關(guān)于第一實(shí)施例的敘述后,應(yīng)可輕易了 解此實(shí)施例中字串處理結(jié)果的設(shè)定原則,故相關(guān)的細(xì)節(jié)便不再贅述。圖10為本發(fā)明字串處理裝置的第三實(shí)施例的示意圖。字串處理裝置300應(yīng)用圖9 所示的方法,在兩個(gè)預(yù)定字串中找出第一個(gè)/最后一個(gè)不同的對(duì)應(yīng)字串。如圖10所示,字 串處理裝置300包含有第一儲(chǔ)存裝置310,用以?xún)?chǔ)存字組Ra與Rb,其中字組Ra包含有四 個(gè)字節(jié)RaO Ra3且其字節(jié)序?yàn)樾∽止?jié)序,而字組Rb包含有四個(gè)字節(jié)RbO Rb3且其字節(jié) 序亦為小字節(jié)序;第二儲(chǔ)存裝置320 ;載入模塊330,耦接于第一儲(chǔ)存裝置310及第二儲(chǔ)存 裝置320,用以由第一儲(chǔ)存裝置310載入字組Ra、Rb至第二儲(chǔ)存裝置320 ;比較模塊340,耦 接于第二儲(chǔ)存裝置320,用以同時(shí)且分別地比較字組Ra中的字節(jié)RaO Ra3與字組Rb中的 字節(jié)RbO Rb3,并產(chǎn)生字組Ra中字節(jié)RaO Ra3所分別對(duì)應(yīng)的多個(gè)比較結(jié)果Ml M4 ;以 及控制邏輯器350,耦接于比較模塊340,用以依據(jù)比較結(jié)果Ml M4產(chǎn)生字串處理結(jié)果以 指示出字組Ra與字組Rb之間的第一個(gè)/最后一個(gè)不同的字節(jié)。在此實(shí)施例中,字組Ra與字組Rb的字節(jié)序均為小字節(jié)序,假設(shè)只有在次序上的第 二小的兩相對(duì)應(yīng)字串(亦即Ral與Rbl)及第三小的兩相對(duì)應(yīng)字串(亦即Ra2與Rb2)彼此 不同。當(dāng)目的是為了找出第一個(gè)不同的兩相對(duì)應(yīng)字串時(shí),由于Ra與Rb皆為具有四個(gè)字串 (亦即字節(jié)RaO Ra3與RbO Rb3)的字組,因此控制邏輯器350設(shè)定字串處理結(jié)果為_(kāi)3, 由于4-3 = 1,因此字串處理結(jié)果為_(kāi)3即表示第一個(gè)不同的兩相對(duì)應(yīng)字串為Ral與Rbl ;然 而,當(dāng)目的是為了找出最后一個(gè)不同的兩相對(duì)應(yīng)字串時(shí),控制邏輯器350便設(shè)定字串處理 結(jié)果為_(kāi)2,由于4-2 = 2,因此字串處理結(jié)果為_(kāi)2即表示最后一個(gè)不同的兩相對(duì)應(yīng)字串為 Ra2 與 Rb2。圖11與圖12為兩段偽碼,分別各用以概述以上所述的找出兩預(yù)定字串中的第一 個(gè)與最后一個(gè)不同的兩相對(duì)應(yīng)字串的方法與裝置的運(yùn)作。由于本領(lǐng)域技術(shù)人員在閱讀以上 關(guān)于圖9的方法與圖10的裝置后,應(yīng)可輕易了解圖11與圖12的偽碼運(yùn)作,故相關(guān)的細(xì)節(jié) 便不再贅述。請(qǐng)參照?qǐng)D13,圖13為本發(fā)明字串處理方法的第四實(shí)施例的流程圖。此實(shí)施例的主要目的為在多個(gè)第一預(yù)定字串中,找出第一個(gè)等于零的字串或是第一個(gè)與多個(gè)第二預(yù)定字 串中一對(duì)應(yīng)字串不同的字串。倘若大體上可達(dá)到相同的結(jié)果,并不需要一定遵照?qǐng)D13所示 的流程中的步驟順序來(lái)進(jìn)行,且圖13所示的步驟不一定要連續(xù)進(jìn)行,亦即,其它步驟亦可 插入其中。本發(fā)明字串處理方法的第四實(shí)施例的操作可歸納如下S501 載入一字組(四個(gè)字節(jié))以作為多個(gè)第一預(yù)定字串。S502:將該多個(gè)第一預(yù)定字串中的各個(gè)字串分別與多個(gè)第二預(yù)定字串中的各個(gè)字 串同時(shí)進(jìn)行比較,進(jìn)而產(chǎn)生多個(gè)比較結(jié)果。該多個(gè)第二預(yù)定字串包含一字組(四個(gè)字節(jié)) 與一為零的字串常數(shù)(string constant)。S503:判斷該多個(gè)第一預(yù)定字串中是否任一字串皆不等于零或是該多個(gè)第一預(yù)定 字串中所有字串分別與該多個(gè)第二預(yù)定字串中的相對(duì)應(yīng)字串完全相同。若是,到步驟S504; 若否,到步驟S505。S504 將字串處理結(jié)果設(shè)定為零。S505:依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與該多個(gè)第二預(yù)定字串中的對(duì)應(yīng) 字串不同或是等于零的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第一個(gè)字串。若是, 到步驟S506 ;若否,到步驟S507。S506 將字串處理結(jié)果設(shè)定為_(kāi)4。S507:依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與該多個(gè)第二預(yù)定字串中的對(duì)應(yīng) 字串不同或是等于零的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第二個(gè)字串。若是, 到步驟S508 ;若否,到步驟S509。S508 將字串處理結(jié)果設(shè)定為_(kāi)3。S509:依據(jù)該多個(gè)第一預(yù)定字串的字節(jié)序,檢查與該多個(gè)第二預(yù)定字串中的對(duì)應(yīng) 字串不同或是等于零的字串是否為在該多個(gè)第一預(yù)定字串中順序上的第三個(gè)字串。若是, 到步驟S510 ;若否,到步驟S511。S510 將字串處理結(jié)果設(shè)定為_(kāi)2。S511 將該字串處理結(jié)果設(shè)定為-1。在此實(shí)施例中,步驟S505、S507以及S509被設(shè)計(jì)來(lái)參照該多個(gè)第一預(yù)定字串的字 節(jié)序以于該多個(gè)第一預(yù)定字串中找出第一個(gè)與該多個(gè)第二預(yù)定字串中的對(duì)應(yīng)字串相同或 是等于零的字串。此外,本領(lǐng)域技術(shù)人員在閱讀以上關(guān)于第一實(shí)施例的段落后,應(yīng)可輕易了 解此實(shí)施例中字串處理結(jié)果的設(shè)定原則,故相關(guān)的細(xì)節(jié)便不再贅述。值得注意的是,前述的所有實(shí)施例均作為范例說(shuō)明之用,并非用以局限本發(fā)明的 范疇。舉例來(lái)說(shuō),本領(lǐng)域技術(shù)人員應(yīng)可輕易了解,字串處理結(jié)果可依不同的設(shè)計(jì)需求而設(shè)定 為不同的數(shù)字(在本說(shuō)明書(shū)的范例中,字串處理結(jié)果為0,-1 -4),而這些依循本發(fā)明的 精神而作出變化修改的設(shè)計(jì)的進(jìn)一步說(shuō)明便不再贅述。圖14為本發(fā)明字串處理裝置的第四實(shí)施例的示意圖。字串處理裝置400用以在 字組Ra中,找出第一個(gè)等于零或是與字組Rb中的對(duì)應(yīng)字節(jié)不同的字節(jié)。如圖14所示,除 了比較載入的字組Ra與載入的字組Rb以產(chǎn)生比較結(jié)果Ml M4外,比較模塊440亦應(yīng)用 輸入的本身為零的字串常數(shù)來(lái)與字組Ra中各個(gè)字串(亦即字符組RaO Ra3)作比較而產(chǎn) 生比較結(jié)果Ml, M4,。因此,控制邏輯器450可據(jù)以產(chǎn)生字串處理結(jié)果以指示在字組Ra 中第一個(gè)等于零或是與字組Rb中的對(duì)應(yīng)字節(jié)不同的字節(jié)。
綜上所述,本發(fā)明提供了一種同時(shí)地分別處理一個(gè)字組中多個(gè)字節(jié)(字串)的方 法與裝置,如此一來(lái),可以更有效率地處理各個(gè)字串。請(qǐng)一并參考圖15與圖16。圖15為本 發(fā)明執(zhí)行“strcmp”這個(gè)功能的程序碼以及處理器指令的示意圖,而圖16為本發(fā)明應(yīng)用處 理器指令實(shí)現(xiàn)該“strcmp”功能的一范例流程圖。指令群Li’內(nèi)為一處理器用以實(shí)現(xiàn)程序 碼“while (cla ! = ‘\0,&&cla == clb) ”的處理器指令,而指令群L2,內(nèi)為一處理器用以 實(shí)現(xiàn)程序碼“returncla-clb”的處理器指令。前述的“strcmp”功能可應(yīng)用圖14中所示的 裝置以找出在第一字組中第一個(gè)等于零或是與第二字組中的一對(duì)應(yīng)字節(jié)不同的字節(jié),進(jìn)而 加以實(shí)現(xiàn)其功能。如圖15所示,在比較兩字節(jié)時(shí),僅須使用單一個(gè)指令,而在圖1所示的已 知技術(shù)中則需要四個(gè)指令,相較之下,本發(fā)明可省下大量處理字串的時(shí)間。
以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明權(quán)利要求范圍所做的均等變化與 修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
權(quán)利要求
一種字串處理裝置,包含有第一儲(chǔ)存裝置,用以?xún)?chǔ)存多個(gè)第一預(yù)定字串;第二儲(chǔ)存裝置;載入模塊,耦接于該第一儲(chǔ)存裝置及該第二儲(chǔ)存裝置,用以由該第一儲(chǔ)存裝置載入該多個(gè)第一預(yù)定字串至該第二儲(chǔ)存裝置;比較模塊,耦接于該第二儲(chǔ)存裝置,用以同時(shí)比較一特定字串以及該多個(gè)第一預(yù)定字串,并分別產(chǎn)生對(duì)應(yīng)該特定字串的多個(gè)比較結(jié)果;以及控制邏輯器,耦接于該比較模塊,用以依據(jù)該多個(gè)比較結(jié)果產(chǎn)生字串處理結(jié)果。
2.根據(jù)權(quán)利要求1所述的字串處理裝置,其中該特定字串為字串常數(shù)。
3.根據(jù)權(quán)利要求1所述的字串處理裝置,其中該載入模塊另由該第一儲(chǔ)存裝置載入多 個(gè)第二預(yù)定字串至該第二儲(chǔ)存裝置,而被載入至該第二儲(chǔ)存裝置的該多個(gè)第二預(yù)定字串中 一字串被選為該特定字串。
4.根據(jù)權(quán)利要求3所述的字串處理裝置,其中該特定字串為該多個(gè)第二預(yù)定字串的起 始字串。
5.根據(jù)權(quán)利要求1所述的字串處理裝置,其中該控制模塊參照該多個(gè)比較結(jié)果以檢查 該特定字串是否與所載入的該多個(gè)第一預(yù)定字串中至少一字串相同以產(chǎn)生檢查結(jié)果,并依 據(jù)該檢查結(jié)果設(shè)定該字串處理結(jié)果。
6.根據(jù)權(quán)利要求5所述的字串處理裝置,其中當(dāng)該檢查結(jié)果顯示所載入的該多個(gè)第一 預(yù)定字串中沒(méi)有任一字串與該特定字串相同時(shí),則該控制邏輯器將該字串處理結(jié)果設(shè)定為 第一邏輯值;當(dāng)該檢查結(jié)果顯示所載入的該多個(gè)第一預(yù)定字串中至少一字串與該特定字串 相同時(shí),則該控制邏輯器參照所載入的該多個(gè)第一預(yù)定字串的字節(jié)序,于所載入的該多個(gè) 第一預(yù)定字串中找出與該特定字串相同的第一個(gè)字串,決定對(duì)應(yīng)該第一個(gè)字串的第二邏輯 值,以及將該字串處理結(jié)果設(shè)定為該第二邏輯值。
7.根據(jù)權(quán)利要求6所述的字串處理裝置,其中該控制邏輯器依據(jù)與該特定字串相同的 該第一個(gè)字串在所載入的該多個(gè)第一預(yù)定字串中的次序來(lái)決定該第二邏輯值。
8.根據(jù)權(quán)利要求1所述的字串處理裝置,其中該多個(gè)第一預(yù)定字串以及該特定字串中 的各個(gè)字串為一字串元件。
9.根據(jù)權(quán)利要求8所述的字串處理裝置,其中該字串元件為一字節(jié)。
10.一種字串處理裝置,包含有第一儲(chǔ)存裝置,用以?xún)?chǔ)存多個(gè)第一預(yù)定字串;第二儲(chǔ)存裝置;載入模塊,耦接于該第一儲(chǔ)存裝置及該第二儲(chǔ)存裝置,用以由該第一儲(chǔ)存裝置載入該 多個(gè)第一預(yù)定字串至該第二儲(chǔ)存裝置;比較模塊,耦接于該第二儲(chǔ)存裝置,用以同時(shí)地分別比較多個(gè)第二預(yù)定字串以及該多 個(gè)第一預(yù)定字串,并分別產(chǎn)生對(duì)應(yīng)該多個(gè)第二預(yù)定字串的多個(gè)比較結(jié)果;以及控制邏輯器,耦接于該比較模塊,用以依據(jù)該多個(gè)比較結(jié)果產(chǎn)生字串處理結(jié)果。
11.根據(jù)權(quán)利要求10所述的字串處理裝置,其中該多個(gè)第二預(yù)定字串包含有一字串常 數(shù)以及由該載入模塊自該第一儲(chǔ)存裝置所載入的多個(gè)字串,而所載入的該多個(gè)的個(gè)數(shù)與該 多個(gè)第一預(yù)定字串的個(gè)數(shù)相同。
12.根據(jù)權(quán)利要求11所述的字串處理裝置,其中該控制模塊參照該多個(gè)比較結(jié)果以檢 查所載入的多個(gè)第一預(yù)定字串中至少一字串是否與該字串常數(shù)相同或是所載入的該多個(gè) 第一預(yù)定字串中至少一字串是否與所載入的該多個(gè)第二預(yù)定字串中一相對(duì)應(yīng)字串不同以 產(chǎn)生檢查結(jié)果,并依據(jù)該檢查結(jié)果來(lái)設(shè)定該字串處理結(jié)果。
13.根據(jù)權(quán)利要求12所述的字串處理裝置,其中當(dāng)該檢查結(jié)果顯示所載入的該多個(gè)第 一預(yù)定字串中所有字串皆與該字串常數(shù)不同且所載入的該多個(gè)第一預(yù)定字串中所有字串 分別與所載入的該多個(gè)第二預(yù)定字串中所有相對(duì)應(yīng)字串相同時(shí),則該控制邏輯器將該字串 處理結(jié)果設(shè)定為第一邏輯值;當(dāng)該檢查結(jié)果顯示所載入的該多個(gè)第一預(yù)定字串中至少一字 串與該字串常數(shù)相同或所載入的該多個(gè)第一預(yù)定字串中至少一字串與所載入的該多個(gè)第 二預(yù)定字串中一相對(duì)應(yīng)字串不同時(shí),則該控制邏輯器參照所載入的該多個(gè)第一預(yù)定字串的 字節(jié)序,于所載入的該多個(gè)第一預(yù)定字串中找出與該字串常數(shù)相同或與所載入的該多個(gè)第 二預(yù)定字串中一相對(duì)應(yīng)字串不同的第一個(gè)字串,決定對(duì)應(yīng)該第一個(gè)字串的第二邏輯值,以 及將該字串處理結(jié)果設(shè)定為該第二邏輯值。
14.根據(jù)權(quán)利要求13所述的字串處理裝置,其中該控制邏輯器依據(jù)與該字串常數(shù)相同 或是與所載入的該多個(gè)第二預(yù)定字串中一相對(duì)應(yīng)字串不同的該第一個(gè)字串在所載入的該 多個(gè)第一預(yù)定字串中的次序來(lái)決定該第二邏輯值。
15.根據(jù)權(quán)利要求10所述的字串處理裝置,其中該載入模塊另自該第一儲(chǔ)存裝置載入 該多個(gè)第二預(yù)定字串至該第二儲(chǔ)存裝置,而所載入的該多個(gè)第二預(yù)定字串的個(gè)數(shù)與該多個(gè) 第一預(yù)定字串的個(gè)數(shù)相同。
16.根據(jù)權(quán)利要求15所述的字串處理裝置,其中該控制模塊參照該多個(gè)比較結(jié)果以檢 查所載入的該多個(gè)第一預(yù)定字串中至少一字串是否與所載入的該多個(gè)第二預(yù)定字串中一 相對(duì)應(yīng)字串不同以產(chǎn)生檢查結(jié)果,并依據(jù)該檢查結(jié)果來(lái)設(shè)定該字串處理結(jié)果。
17.根據(jù)權(quán)利要求16所述的字串處理裝置,其中當(dāng)該檢查結(jié)果顯示所載入的該多個(gè)第 一預(yù)定字串中所有字串分別與所載入的該多個(gè)第二預(yù)定字串中相對(duì)應(yīng)字串相同時(shí),則該控 制邏輯器將該字串處理結(jié)果設(shè)定為第一邏輯值;以及當(dāng)該檢查結(jié)果顯示所載入的該多個(gè)第 一預(yù)定字串中至少一字串與所載入的該多個(gè)第二預(yù)定字串中一相對(duì)應(yīng)字串不同時(shí),則該控 制邏輯器參照所載入的該多個(gè)第一預(yù)定字串的字節(jié)序,于所載入的該多個(gè)第一預(yù)定字串中 找出與所載入的該多個(gè)第二預(yù)定字串中一相對(duì)應(yīng)字串不同的第一個(gè)字串,決定對(duì)應(yīng)該第一 個(gè)字串的第二邏輯值,以及將該字串處理結(jié)果設(shè)定為該第二邏輯值。
18.根據(jù)權(quán)利要求17所述的字串處理裝置,其中該控制邏輯器依據(jù)該第一個(gè)字串在所 載入的該多個(gè)第一預(yù)定字串中的次序來(lái)決定該第二邏輯值。
19.根據(jù)權(quán)利要求10所述的字串處理裝置,其中該多個(gè)第一預(yù)定字串以及該第二預(yù)定 字串中的各個(gè)字串為一字串元件。
20.根據(jù)權(quán)利要求19所述的字串處理裝置,其中該字串元件為一字節(jié)。
全文摘要
本發(fā)明提供一種應(yīng)用字組相關(guān)指令以處理特定字節(jié)字串的字串處理方法。該字串處理方法包含有載入多個(gè)第一預(yù)定字串;同時(shí)比較一特定字串與載入的該多個(gè)第一預(yù)定字串,進(jìn)而產(chǎn)生對(duì)應(yīng)該特定字串的多個(gè)比較結(jié)果;以及依據(jù)該多個(gè)比較結(jié)果產(chǎn)生字串處理結(jié)果。此外,本發(fā)明另提供一種應(yīng)用該字串處理方法的字串處理裝置。
文檔編號(hào)G06F17/30GK101807190SQ20091013773
公開(kāi)日2010年8月18日 申請(qǐng)日期2009年4月29日 優(yōu)先權(quán)日2009年2月16日
發(fā)明者張傳華, 蘇泓萌, 賴(lài)吉昌 申請(qǐng)人:晶心科技股份有限公司