量(例如一程序計(jì)數(shù)值6)找到一相對(duì)應(yīng)的編碼單元(例如對(duì)應(yīng)程序計(jì)數(shù)值6的 編碼單元10),再依據(jù)所述編碼單元與局部范圍字典的最小編碼值來判斷此編碼單元是對(duì) 應(yīng)全范圍字典或局部范圍字典(例如基于編碼單元10大于局部范圍字典的最小編碼值01 而判斷此編碼單元10所對(duì)應(yīng)的內(nèi)容儲(chǔ)存于局部范圍字典中),接著再依據(jù)復(fù)數(shù)個(gè)參數(shù)來 找出一相對(duì)應(yīng)的字典內(nèi)容位址,進(jìn)而找到所述編碼單元所對(duì)應(yīng)的資料單元。上述找出字典 內(nèi)容位址的一范例(以對(duì)應(yīng)編碼單元10為例)如下:
[0045] 字典內(nèi)容位址=局部范圍字典的起始位址+(偏移量/局部范圍字典所對(duì)應(yīng)的資 料區(qū)塊大?。局部范圍字典所對(duì)應(yīng)的編碼區(qū)塊大小+(編碼單元一全范圍字典的最小編 碼值(若為0則可忽略))。
[0046] 另請(qǐng)注意,各字典(若不影響實(shí)施則可排除最底層的字典)的起始位址(簡(jiǎn)稱 layer_mem_start)、最小編碼值(簡(jiǎn)稱layer_code_start)、對(duì)應(yīng)的資料區(qū)塊大小(或說所 包含的資料單元數(shù),簡(jiǎn)稱為layer_data_blksize)、對(duì)應(yīng)的編碼區(qū)塊大小(或說所包含的編 碼單元數(shù),簡(jiǎn)稱為layer_code_blksize)等可儲(chǔ)存于一或多個(gè)記憶單元(例如緩存器)中, 由于記憶單元的數(shù)目有限,故不實(shí)質(zhì)影響本發(fā)明的整體壓縮率。
[0047] (4)采用多層級(jí)字典壓縮規(guī)則來壓縮:請(qǐng)參閱圖5d,在本情形下,全范圍字典壓 縮規(guī)則用來壓縮每單位范圍(即4個(gè)資料區(qū)塊)中的重復(fù)內(nèi)容X,使用的字典儲(chǔ)存空間為 IX32位;中范圍字典壓縮規(guī)則用來壓縮每單位范圍(即2個(gè)資料區(qū)塊)中的重復(fù)內(nèi)容Y、 Z,使用的字典儲(chǔ)存空間為2X32位;局部范圍字典壓縮規(guī)則用來壓縮每單位范圍(即1個(gè) 資料區(qū)塊)中的重復(fù)內(nèi)容六3、(:、0,使用的字典儲(chǔ)存空間為4\32位 ;此時(shí),全范圍字典、中 范圍字典(可區(qū)分為2個(gè)單位,如圖5d所示)以及局部范圍字典(可區(qū)分為4個(gè)單位,如圖 5d所示)使用的儲(chǔ)存空間為1X32+2X32+4X32 = 7X32位。因此,多層級(jí)字典壓縮規(guī)則 可將所述數(shù)位資料壓縮如下:1〇, 1〇,〇〇,〇1 ;1〇, 1〇,〇〇,〇1 ;1〇, 1〇,〇〇,〇1 ;1〇, 1〇,〇〇,〇1(其 中OO代表所述4個(gè)資料區(qū)塊中的X ;01分別代表前2個(gè)資料區(qū)塊中的Y與后2個(gè)資料區(qū)塊 中的Z ; 10分別代表所述4個(gè)資料區(qū)塊中的A、B、C、D,然此對(duì)應(yīng)關(guān)系僅為舉例,可由實(shí)施者 依其需求調(diào)整),此時(shí)由于每個(gè)資料區(qū)塊中32位的資料單元改由2位的編碼單元來代表且 所有字典使用了 7 X 32位的儲(chǔ)存空間,因此壓縮后所需的儲(chǔ)存空間為2 X 16+7 X 32 = 8 X 32 位,小于原始儲(chǔ)存空間16X32位,同時(shí)也小于前述各情形所需的儲(chǔ)存空間,簡(jiǎn)言之,以多 層級(jí)字典壓縮規(guī)則來進(jìn)行壓縮對(duì)于所述數(shù)位資料而言能達(dá)到最佳壓縮率。
[0048] 請(qǐng)注意,本情形中,由于采用多層級(jí)字典壓縮規(guī)則,因此在解壓縮時(shí),本情形可通 過一偏移量(例如一程序計(jì)數(shù)值5)找到一相對(duì)應(yīng)的編碼單元(例如對(duì)應(yīng)程序計(jì)數(shù)值5的 編碼單元10),再依據(jù)所述編碼單元與最高層(即第三層)的局部范圍字典的最小編碼值 (本例中為10)來判斷此編碼單元是否對(duì)應(yīng)局部范圍字典(例如依據(jù)編碼單元10等于或大 于局部范圍字典的最小編碼值10而判斷此編碼單元10所對(duì)應(yīng)的內(nèi)容儲(chǔ)存于局部范圍字典 中),若否再依據(jù)所述編碼單元與次一層(即第二層)的中范圍字典的最小編碼值(本例中 為01)來判斷此編碼單元是對(duì)應(yīng)中范圍或全范圍字典所儲(chǔ)存的內(nèi)容,接著依據(jù)復(fù)數(shù)個(gè)參數(shù) 來找出一相對(duì)應(yīng)的字典內(nèi)容位址,進(jìn)而找到所述編碼單元所對(duì)應(yīng)的資料單元。上述找出字 典內(nèi)容位址的一范例(以對(duì)應(yīng)編碼單元10為例)如下:
[0049] 字典內(nèi)容位址=局部范圍字典的起始位址+(偏移量/局部范圍字典所對(duì)應(yīng)的資 料區(qū)塊大小)X局部范圍字典所對(duì)應(yīng)的編碼區(qū)塊大小+(編碼單元一中范圍字典的最小編 碼值)。
[0050] 類似地,各字典(若不影響實(shí)施則可排除最底層的字典)的起始位址、最小編碼 值、對(duì)應(yīng)的資料區(qū)塊大小、對(duì)應(yīng)的編碼區(qū)塊大小等可儲(chǔ)存于一或多個(gè)記憶單元中。
[0051] 表 1
[0055] 在上述4種情形中,采用多層級(jí)壓縮規(guī)則可達(dá)到最佳壓縮率,雖然對(duì)某些特殊圖 樣的數(shù)位資料而言,采用單一壓縮規(guī)則或雙層級(jí)壓縮規(guī)則可能有最佳壓縮率,但本實(shí)施例 著重于多層級(jí)(至少三層)的壓縮規(guī)則。另外,本實(shí)施例的數(shù)位資料中4個(gè)資料單元構(gòu)成 一資料區(qū)塊,然此僅為舉例,針對(duì)不同圖樣的數(shù)位資料,本方法可依一預(yù)設(shè)規(guī)范或一資料組 成分析結(jié)果決定一資料區(qū)塊所對(duì)應(yīng)的資料單元數(shù)。再者,本技術(shù)領(lǐng)域具有通常知識(shí)者可依 本說明書的公開(例如上述4種情形)推導(dǎo)出更多層級(jí)的壓縮處理、采用不同的編碼單元 與資料單元的對(duì)應(yīng)關(guān)系、及/或增減編碼單元的位元數(shù)等,凡此種種均包含于本發(fā)明的實(shí) 施變化范圍內(nèi)。
[0056] 請(qǐng)注意,如圖5d所示,表1的第(4)種情形雖以全范圍字典做為所有字典的最底 層(儲(chǔ)存資料單元X)、以中范圍字典做為所有字典的中間層(儲(chǔ)存資料單元Y、Z)而以局 部范圍字典做為所有字典的最上層(儲(chǔ)存資料單元A、B、C、D),然此僅為舉例以供了解。原 則上本發(fā)明的特征著重于字典層級(jí)數(shù),可不對(duì)字典的編排順序做特別限制,例如上述三種 字典的層級(jí)順序可以任意變換。然而,為方便查找字典,本發(fā)明的實(shí)施例將對(duì)應(yīng)相同字典的 資料單元儲(chǔ)存于連續(xù)的位址,藉此確定同一字典的起始位址。
[0057] 由于字典壓縮方法罕見于微控制單元的指令集的壓縮,本發(fā)明另公開一種字典壓 縮方法,專用于壓縮一微控制單元的指令集。所述方法的一實(shí)施例如圖6所示,包含:
[0058] 步驟S610 :接收一指令集,所述指令集包含復(fù)數(shù)個(gè)指令區(qū)塊(或說可區(qū)分為復(fù)數(shù) 個(gè)指令區(qū)塊),每所述指令區(qū)塊包含復(fù)數(shù)個(gè)資料單元,每所述資料單元由復(fù)數(shù)個(gè)位元組成。
[0059] 步驟S620 :依據(jù)復(fù)數(shù)個(gè)字典壓縮規(guī)則壓縮所述指令集,其中所述復(fù)數(shù)個(gè)字典壓縮 規(guī)則包含第一與第二字典壓縮規(guī)則,所述第一字典壓縮規(guī)則以N個(gè)指令區(qū)塊為單位范圍對(duì) 所述指令集中的第一內(nèi)容進(jìn)行壓縮處理,所述第二字典壓縮規(guī)則以M個(gè)指令區(qū)塊為單位范 圍對(duì)所述指令集中的第二內(nèi)容進(jìn)行壓縮處理,所述第一與第二內(nèi)容不同,所述N、M為正整 數(shù)且不大于所述復(fù)數(shù)個(gè)指令區(qū)塊的總數(shù),且所述N大于所述M。舉例來說,所述N等于所述復(fù) 數(shù)個(gè)資料區(qū)塊的總數(shù),所述M小于所述N。另舉例而言,所述第一字典壓縮規(guī)則用于處理于 所有資料區(qū)塊中以單一資料區(qū)塊為單位而出現(xiàn)頻率高于第一頻率的一或復(fù)數(shù)個(gè)資料單元 (例如表1的資料單元X),所述第二字典壓縮規(guī)則用于處理于所有資料區(qū)塊中以單一資料 區(qū)塊為單位而出現(xiàn)頻率較低的一或復(fù)數(shù)個(gè)資料單元(例如表1的資料單元Y,Z,A, B,C,D)。
[0060] 類似圖3的實(shí)施例,本實(shí)施例所述的復(fù)數(shù)個(gè)字典壓縮規(guī)則可進(jìn)一步包含:一第三 字典壓縮規(guī)則,以L個(gè)指令區(qū)塊為單位范圍對(duì)所述指令集中的第三內(nèi)容進(jìn)行壓縮處理,所 述第一、第二與第三內(nèi)容不同,所述L為正整數(shù)且不大于所述復(fù)數(shù)個(gè)指令區(qū)塊的總數(shù),且所 述L小于所述Μ。舉例來說,所述N等于所述復(fù)數(shù)個(gè)指令區(qū)塊的總數(shù),所述M小于所述N但 大于1 ;所述L等于1。另舉例而言,所述第一字典壓縮規(guī)則用于處理于所有所述指令區(qū)塊中 以單一所述指令區(qū)塊為單位而出現(xiàn)頻率高于第一頻率的一或復(fù)數(shù)個(gè)所述資料單元(例如 表1的資料單元X),所述第二字典壓縮規(guī)則用于處理于所有所述指令區(qū)塊中以單一所述指 令區(qū)塊為單位而出現(xiàn)頻率介于第一與第二頻率之間的一或復(fù)數(shù)個(gè)所述資料單元(例如表1 的資料單元Υ,Ζ),所述第三字典壓縮規(guī)則適用于處理于所有所述指令區(qū)塊中以單一所述指 令區(qū)塊為單位而出現(xiàn)頻率小于第二頻率的一或復(fù)數(shù)個(gè)所述資料單元(例如表1的資料單元 A, Β, C, D)。
[0061] 另外,為了對(duì)未經(jīng)分析或尚未有相對(duì)應(yīng)字典的指令集以較佳壓縮方式進(jìn)行壓縮, 本實(shí)施例可進(jìn)一步包含下列步驟:
[0062] 步驟S615(未圖示):依據(jù)復(fù)數(shù)個(gè)字典壓縮規(guī)則分析所述指令集的資料組成及/ 或壓縮率,藉此得到一分析結(jié)果。此時(shí)步驟S620進(jìn)一步包含:依據(jù)所述分析結(jié)果使用所述 復(fù)數(shù)個(gè)字典壓縮規(guī)則壓縮所述指令集。
[0063] 更多關(guān)于圖6的實(shí)施例的細(xì)節(jié)與變化可由圖3的實(shí)施例的說明得知。
[0064] 除上述的壓縮方法外,本發(fā)明亦公開一種字典解壓縮方法,用來通過解壓縮產(chǎn)生 一數(shù)位資料,適用于處理圖3的實(shí)施例所產(chǎn)生的壓縮碼。如圖7所示,所述解壓縮方法的一 實(shí)施例包含:
[0065] 步驟S710 :接收一第一偏移量(例如一第一程序計(jì)數(shù)值);
[0066] 步驟S720 :依據(jù)所述第一偏移量找到一第一編碼單元,其中所述第一編碼單元屬 于復(fù)數(shù)個(gè)編碼單元,且這些編碼單元對(duì)應(yīng)至少三個(gè)字典壓縮規(guī)則。本實(shí)施例中,所有編碼單 元的位元數(shù)相同,相較之下,使用不同位元數(shù)的復(fù)數(shù)個(gè)編碼單元來代表所述數(shù)位資料屬于 本領(lǐng)域的通常知識(shí),然實(shí)施本發(fā)明者可依其需求決定編碼單元的位元數(shù)的變化。
[0067] 步驟S730 :依據(jù)所述第一編碼單元決定一字典起始位址。更詳細(xì)的例子可由前述 表1的說明得知。
[0068] 步驟S740 :依據(jù)復(fù)數(shù)個(gè)參數(shù)決定一字典內(nèi)容位址,其中所述復(fù)數(shù)個(gè)參數(shù)包含所述 第一編碼單元與所述字典起始位址。舉例而言,這些參數(shù)包含所述字典起始位址、所述第一 偏移量、所述第一編碼單元所屬的一資料區(qū)塊的大小、所述第一編碼單元所屬的一編碼區(qū) 塊的大小以及所述第一編碼單元決定一字典內(nèi)容位址。更詳細(xì)的例子可由前述表1的說明 得知。
[0069] 步驟S750 :依據(jù)所述字典內(nèi)容位址存取一存儲(chǔ)器以得到所述第一編碼單元所對(duì) 應(yīng)的一或復(fù)數(shù)個(gè)第一資料單元,所述一或復(fù)數(shù)個(gè)第一資料單元屬于所述數(shù)位資料,其中所 述字典起始位置對(duì)應(yīng)至少三個(gè)字典的其中之一,所述至少三個(gè)字典分別對(duì)應(yīng)前述至少三個(gè) 字典壓縮規(guī)則。舉例來說,這些字典壓縮規(guī)則包含第一、第二與第三字典壓縮規(guī)