專利名稱:存儲器子系統的多字元儲存/讀取方法以及其電路的制作方法
技術領域:
本發明有關于在處理器寄存器群組(processor register file)和存儲器子系統 之間的多字元搬移的方法與其電路。
背景技術:
在存儲器子系統里,公用編譯或組合語言程序設計經常需要把一大塊存儲 器由一個位置復制到另一個位置,來存取連續的存儲器位置,例如函數堆棧推 進和推出(function stack pushing and popping)等,存儲器子系統的最小可選址 單元是一個字節。目前,大多數處理器經由一個指令存取一個存儲器位置。因 此,多字元的搬移只能借由一串的單字元搬移指令群來達成。舉例來說, 一個 字元載入指令一次只能夠把具有4個字節的單字元,從一存儲器位置移動至處 理器寄存器中。三個這類的字元載入指令可以如下的格式, 一起完成3個字元的搬移。ld一wordrl, [BASE]. Id—word r2, [BASE+4]. Id—word r 14, [BASE+8],在以上的例子里,kLword代表字元載入指令;rl, r2和rl4皆代表用以接 收已選址存儲器位置值的處理器寄存器索引;而BASE代表內容當作存儲器位 置基址的處理器寄存器索引。基址通常會加入偏移值(offset),以構成最終的存 儲器地址。在常見的程序設計實務上,當多個存儲器位置被存取時,所涉及到 的寄存器通常有連續索引。再者,經常涉及到特殊的寄存器,比如通用數據 指標(dp),框架指標(fp),函數調用返回指標(rp),以及堆棧指標(sp)。然而,使用一連串的單字元搬移指令去實現多字元搬移,也許會導致大量 程序碼和低效能。一些含有少量寄存器群組的處理器可借由指定在存儲器存取所涉及到的寄存器的選擇遮罩(selection mask),以能夠用單一指令來存取多個字元。在存 儲器存取中, 一個存儲器字元的存取需要一個寄存器當作其來源(用于存儲器儲 存)或當作其目的地(用于存儲器載入)。舉例來說,在具有16個寄存器(編號為r0 rl5)的處理器里,多字元搬移指 令可定義為ld_multi—word 0b0100000000000110, [BASE].在這個例子里,0b00000000000110是一個全16位元選擇遮罩,用以定義 在搬移中要使用寄存器rl, r2和r14。然而,對于含有N個寄存器和M-位元指令格式的處理器來說,如果N大 于等于M,這種指令規格是不可行的。因為寄存器選擇遮罩本身便需要N個 字元,故而沒有剩余的空間去對該指令格式里的其余信息編碼。如果M-N為小 的正整數(M-N值代表保留在指令格式內以對其它信息進行編碼的位元數),這 對此種處理器是無效率的。舉例來說,32位元的大多數處理器都含有32個通 用處理器寄存器,而此種指令格式不可能使用全寄存器選擇遮罩。因此,最好能有一種應用于多寄存器處理器的存儲器搬移指令機制,期能 在連續存儲器位置和處理器寄存器之間移動多字元,以減少程序碼,增進指令 存取頻寬,以及達成高效能。發明內容為解決上述問題,本發明提出一種多字元搬移指令,用以在連續存儲器位 置和處理器寄存器群組之間移動多個字元。本發明還提出一種存儲器搬移方法和其電路實施,用以在連續存儲器位置 和處理器寄存器群組之間移動多字元。本發明中,多字元搬移指令定義存取類型(載入或儲存);處理器寄存器群組中的具有連續索引的寄存器組(group);選擇遮罩,用以在處理器寄存器 群組中選擇特殊寄存器;以及基底寄存器索引,用于存儲器子系統的相對應存 儲器位置的起始地址。本發明的在一存儲器子系統和一處理器寄存器群組之間的存儲器搬移方 法包括產生一多字元搬移指令,其中,該多字元搬移指令指定 一存取類型 信息,基于一對信息的一連續寄存器組信息, 一遮罩選擇信息,以及用于該存 儲器子系統內的相應存儲器位置的一起始地址的一基底寄存器信息;以及回應 于該多字元搬移指令,在該存儲器子系統和該處理器寄存器群組之間移動多個 字元。本發明的一種回應于一多字元搬移指令而在一存儲器子系統和一處理器 寄存器群組之間移動多個字元的電路包括 一寄存器索引計算器,用以根據該 連續寄存器組信息,該遮罩選擇信息和該基底暫存信息而產生一寄存器索引和 一基底修改指定信號; 一讀/寫控制器,回應于該存取類型信息和該基底修改指 定信號,產生一存儲器存取控制信號并送至該存儲器,產生一寄存器存取控制 信號并送至該處理器寄存器群組;以及一雙向選擇單元,根據該存儲器存取控 制信號和該寄存器存取控制信號,在該存儲器子系統和該處理器寄存器之間雙 向地傳送該多字元。另外,經由多字元搬移指令所存取的字元總數量等同于該連續寄存器組里 所定義的寄存器數量加上被該選擇遮罩所定義的寄存器數量。除此之外,附加 的信息,比如地址更新模式,順序模式,以及修改模式,可指定于多字元搬移 指令中,以達成不同存儲器選址模式。
為讓本發明的上述目的、特征和優點能更明顯易懂,以下結合附圖對本發 明的具體實施方式
作詳細說明,其中圖1顯示根據本發明實施例的實現多字元搬移指令的電路圖,其用于在存 儲器子系統160和處理器寄存器群組120間搬移多字元。主要元件符號說明110:寄存器索引計算器120:寄存器群組130:讀/寫控制器140:存儲器次地址NEXT_ADDR寄存器150:雙向選擇單元跳存儲器子系統170:多路傳輸器175:多路傳輸器176:命令控制單元180:算術運算單元190:邏輯運算單元具體實施方式
本發明的一實施例提供多字元搬移指令,用以在連續存儲器位置和多個處 理器寄存器之間進行多字元的移動。除此之外,本發明還提供一電路實施例, 用以在存儲器子系統和該處理器寄存器之間進行多字元搬移。在該實施例中,揭露多字元搬移指令的存取類型指標(specifier)TYPE的兩 個值。當TYPE是載入時,其定義了多字元載入指令(lmw),用來把多個字元從 存儲器子系統中搬移至處理器寄存器群組中。當TYPE是儲存時,其定義了多 字元儲存指令(smw),用來把多個字元從處理器寄存器群組中搬移至存儲器子 系統中。除此之外,該多字元搬移指令還定義如下的一些信息處理器寄存器群組 中的連續寄存器組的初始寄存器索引START以及結束寄存器索引END;遮罩 指標MASK,用以在此處理器寄存器群組中選擇特殊的寄存器;以及基底寄存 器指標BASE,用于對應存儲器的起始地址。寄存器組被START END和MASK 所定義,且被稱為搬移寄存器列表。其被用作來源(用于儲存)或目的地(用 于載入)。在該搬移寄存器列表中的寄存器的順序為具最小寄存器索引的寄 存器會位于該列表的開頭,具最大寄存器索引的寄存器則位于該列表的結束。再者,該多字元搬移指令可定義附加的信息,例如地址更新模式(address update mode),順序模式(order mode),以及修改模式(modification mode)。該地址更新模式INC決定對于每一個存儲器字元搬移,是否要對該基底地址增加4 或減少4。假如該更新模式是"increment",則位于該搬移寄存器列表中的寄 存器從該列表的開始處啟用;假如該更新模式是"decrement",則位于該搬移 寄存器列表中的寄存器將從該列表的結束處啟用。該順序模式BE決定在地址 更新之前或之后來存取存儲器。該修改模式MOD決定是否要在指令執行結束 時,將基底寄存器修改成最后更新的地址。所以,在多字元搬移指令中,有兩個階段。第一個階段稱為存儲器搬移階 段,是用以在已選址的存儲器位置與寄存器搬移列表之中移動數據。第二階段 稱為基底修改階段,當指定該修改模式MOD時,在指令執行結束,更新該基 底寄存器。舉例來說,常見的32位元指令處理器的通用目的寄存器(general purpose register, GPR)群組會具有32個寄存器,其可能被編碼為r0 r31 。假設最后4 個GPR (r28 r31)分別被定成寄存器dp, fp, rp和sp。該寄存器索引/指標START, END和BASE各占據5個位元,共需使用15 個位元,每一個寄存器索引/指標會指定32個寄存器中的一個寄存器。指標 MASK占據4個位元,用以指定4個特殊寄存器(dp, fp , rp和sp)。附加信 息,如該地址更新模式,該順序模式,以及該修改模式,分別占據l個位元, 總共占據3個位元。所以,在這種具有32個寄存器的處理器的多字元搬移指令中,可被運算 碼和選擇遮罩所用的位元總和是-32-15-4-3=10。該存儲器載入和儲存指令的格式可能如下lmw.mode START, END, MASK, [BASE]smw.mode START,END,MASK, [BASE] 其中,"lmw"表示"載入多字元";"smw"表示"儲存多字元";且 "mode"定義上述的附加信息BE/INC/MOD。舉例來說,存儲器載入指令可能會有如下的格式lmw.bimrl,r3,勵0110, [r31]其中,寄存器rl被指定為起始地址,r3被指定為結束地址,遮罩糾b0110 指定寄存器r29和r30,而r31則被指定為基底寄存器,而且"bim"定義在基 底地址增加4之前來存取該存儲器,以及在該指令執行結束時要修改該基底寄 存器。該"Imw.bimrl,r3,#0b0110,[r31],,的相對應運算如下所示addr= register[r31]; /* addr is the initial address */ register[rl] <= memory [addr]; addr- addr+4; register[r2] <= memory [addr]; addr= addr+4; register[r3] <= memory [addr]; addr= addr+4; register[r29] <= memory [addr]; add產addr+4; register[r30] <= memory [addr]; addr= addr+4; register[r31] <= addr; /* addr equals to register[31]+4*5 */在以上的運算中,"addr-registerlr31"表示將臨時值addr初始化成 registerr311的值;"register[rxl<=memoryaddif,表示將地址為臨時值addr 的存儲器位置內容載入寄存器rx中,其中rx^1, r2, r3, r29和r30; "addr= addr+4"表示增加該地址,且在這個實施例中,存儲器存取要在地址更新前完 成;"register[r311《addr"表示,在該指令執行結束時,將基底寄存器r31修改 成最后更新的地址。另舉例來說,存儲器儲存指令可能會有如下的格式smw.adm r2, r4, #0bl001, [r31]其中,寄存器r2被指定為起始寄存器,r4被指定為結束寄存器,遮罩 #0bl001指定寄存器r31和r28,且"adm"進一步指定,在基底地址減少4 之后才存取存儲器,以及在指令執行結束,要修改基底寄存器。"smw.adm r2, r4, #0bl001, [r31]"的相對應運算如下所示addr= register[r31];/* addr is the initial address */addr= addr-4; memory [addr] <= register[r31];addr= addr-4; memory [addr] <= register[r28];addr= addr-4; memory [addr] <= register[r4];addr= addr-4;memory [addr] <= register[r3];addr= addr-4;memory [addr] <= register[r2];register[r31] <= addr; /* addr equals to register[31]-4*5 */在以上的運算中,"addr-register[r31"表示將臨時值addr初始化成 registerr31的值;"memoryaddr<=registerrx"表示將寄存器rx的值儲存 到地址為臨時值addr的存儲器位置中,其中rx=r31, r28, r4, r3和r2; "addr= addr-4"表示減少該地址,且在這個實例中,在地址更新后才完成存儲 器存取;"register[r31H-addr"表示在指令執行結束后,將基底寄存器r31修改 至最后更新的地址。在習慣用法上,寄存器r31當作堆棧指標(sp),且上例用于函數堆棧復原。 多字元搬移指令的語意如下所定義,其中如果該地址更新模式INC是 "increment",那么inc_or_dec是"+ "(增加);而如果該地址更新模式INC是 "decrement",那么inc—or—dec是"-"(減少)。addr=register[base];for each register index reg—idx in the order specified by [START, END, MASK, INC] {if(order mode is "after") addr=addr inc—or—dec 4; if (access mode is "load")register[reg—idx]=memory[addr]; else /* store */<formula>formula see original document page 11</formula>在此實施例中,由單個指令所存取的字元總數量等于由寄存器索引/指標 START, END和MASK所定義的寄存器數量。舉例來說,由上述的多字元搬 移指令(i.e. 1mw.bimrl,r3,糾b0110, [r31])所存取的字元總數是5,因為寄存 器指標START和END定義了 3個寄存器(rl r3)而寄存器指標MASK則定 義2個寄存器(r29及r30)。根據函數調用的通用程序設計實務,寄存器通常可做下列的分組函數引 數和回傳值,函數調用者保存寄存器,函數被調用者保存寄存器,臨時寄存器, 以及特殊寄存器(如sp, fp, dp, rp,等等)。通常,除特殊寄存器以外, 其它寄存器的索引是連續的。該實施例能儲存/復原任何寄存器組與特殊寄存 器。在該實施例中,在執行多字元載入指令lmw之后執行多字元儲存指令 smw,可將多個字元的內容從某一存儲器地址復制到另一個存儲器地址。圖1顯示根據本發明實施例的實現多字元搬移指令的電路圖,其用于在存 儲器子系統160和處理器寄存器群組120間搬移多字元。該電路包括寄存器索引計算器110,讀/寫控制器130,存儲器次地址 NEXT—ADDR寄存器140,雙向選擇單元150,多路傳輸器170與175,命令控 制單元176,算術運算單元180,以及邏輯運算單元190。寄存器索引計算器110,存儲器次地址NEXT一ADDR寄存器140,存儲器 子系統160,以及處理器寄存器群組120按照外部時鐘脈沖信號 STEP—CONTROL的控制來運作。眾所周知的,外部時鐘脈沖信號 STEP—CONTROL可為簡單的電路時鐘脈沖信號,其在多字元搬移指令的操作 周期內才會有效。在開始執行多字元搬移指令時,在信號STEP—CONTRAL的一個周期內, 會出現另一信號FIRST_STEP,以控制寄存器索引計算器110和多路傳輸器 175。當信號FIRST—STEP出現時,多路傳輸器175能從BASE—REG得到一串 存儲器地址的初始值,此初始值是利用寄存器索引BASE而從寄存器群組120 中讀出,其經由在此實施例中所假設的另一個不同寄存器讀取端口所讀出。關 于取得BASE—REG值的詳細運作是公知的,故將細節略過。當信號FIRST—STEP 未出現時,多路傳輸器175會選擇存儲器次地址NEXT_ADDR寄存器140的輸 出信號。一旦接收到已出現的信號FIRST—STEP ,對于各STEP—CONTROL周期, 寄存器索引計算器110根據索弓l/指標START, END, MASK和BASE而開始 產生寄存器索引REG—IDX。再者,寄存器索引計算器IIO更基于該地址更新 模式INC而產生寄存器索引REG一IDX,其中,地址更新模式在該寄存器索引 計算器110的運算中是可選擇的。當地址更新模式INC代表"增加"時,在信 號STEP—CONTROL的一個周期內,根據索弓l/指標START END (由START 至END的方向)和MASK所定義的搬移寄存器列表的開頭,寄存器索引計算 器UO會借由輸出寄存器索引REG—IDX來指定寄存器。當該地址更新模式INC 代表"減少"時,在信號STEP—CONTROL的一個周期內,根據索引/指標MASK 禾口END START (由END至START)所定義的搬移寄存器列表的結尾,寄 存器索引計算器IIO會輸出寄存器索引REGJDX來指定寄存器。如果修改模 式被啟動,那么在指令執行結束時,寄存器索引計算器IIO會輸出索引BASE。 舉例來說,對于格式為"lmw.bim rl, r3, #0b0110, [r31]"的多字元載入指令, 該寄存器索引REG—IDX相繼地指定rl, r2, r3 (基于START END) , r29, r30 (基于MASK),以及r31 (BASE)。同樣地,對于格式為"smw.bdm rl, r3, 柳blOOl, [r31]"格式的多字元儲存指令,該寄存器索引REGJDX相繼地指定 r31, r28(基于MASK) , r3, r2, rl (基于END START),以及r31 (BASE)。再者,在寄存器索引計算器110已產生多字元搬移指令的搬移寄存器列表 中的所有寄存器索引后且正在產生寄存器BASE的索引時,寄存器索引計算器 IIO輸出指示信號IS BASE。當IS—BASE未出現時,此電路是處于存儲器搬移階段;而當IS一BASE出現且MOD為真時,此電路是處于修改階段。寄存器群組120接收來自寄存器索引計算器110的寄存器索引REGJDX,用以定義哪個寄存器要被讀取或是寫入。回應于存儲器存取類型信號TYPE,指示信號IS_BASE以及修改模式 MOD,讀/寫控制器RW一CTL 130控制存儲器子系統160和寄存器群組120的 讀寫運算。控制信號MEM一R, MEM_W, REG_R和REG_W分別用于啟動存 儲器讀取運算,存儲器寫入運算,寄存器讀取運算,以及寄存器寫入運算。讀 /寫控制器130的詳細運作解釋如下。雙向選擇單元SEL 150決定,是否數據是由REG_VALUE流至 MEM—VALUE(在存儲器搬移階段的存儲器寫入中,例如當REG一R為真且信 號191為假);或數據是由MEM—VALUE流至REG—VALUE(在存儲器搬移階段 的存儲器讀取,例如當REG—W為真且信號191為假);亦或數據是由MEM一AD 流至REG—VALUE(在基底修改階段,例如當REG—W和信號191都是為)。存儲器次地址NEXT_ADDR寄存器140可暫存地址增減后的更新后存儲 器地址(信號181),并在下一個STEP—CONTROL的周期時,把其輸出成信號 141并輸入至多路傳輸器175。在命令控制單元176的輸出信號177的控制下,回應于順序模式BE和 IS_BASE,多路傳輸器170從更新后基底地址181和182中選一。如果該順序 模式指定,,先前模式(before)"(此模式表示在增減該存儲器地址之前做存儲器存 取),那么多路傳輸器170選擇輸入182,否則,多路傳輸器170選擇輸入181。 然而,如果修改模式MOD為真,那么多路傳輸器170總是在信號 STEP—CONTROL的最后一個周期中選擇輸入182。信號177的產生的定義如下if(IS—BASE) signal 177= before; elsesignal 177= BE; /* BE can be before or after */算術運算單元180接收由BASE所定義的基底寄存器或接收存儲器次地址 NEXT一ADDR寄存器140的輸出141,且該算術運算單元180產生更新后基底 地址181,以回應于地址更新模式INC,例如,增加4或減少4。現在,請再回到圖l來解釋在寄存器群組120和存儲器子系統160之間的 數據搬移。在此,格式為"lmw.bim rl, r3,勵OllO, [r31]"的多字元載入指令 只是用于舉例說明而已。如上所述,在STEP—CONTROL的各別周期內,源自 寄存器索引計算器110的寄存器索引REG—IDX相繼地指定rl, r2, r3, r29, r30和r31。在指令的第一個STEP—CONTROL周期中,信號FIRST—STEP會出現。用 來指定rl的寄存器索引REGJDX被送至該寄存器群組120。讀/寫控制器130 產生存儲器讀取信號MEM—R并送至該存儲器子系統160,以及產生寄存器寫 入信號REG_W并送至該寄存器群組120。接著,該存儲器子系統160送出由 存儲器地址MEM—AD所定義的存儲器內容MEM—VALUE;在多路傳輸器175 從端口 "first"選擇其輸入BASE—REG下的情形下,存儲器地址MEM_AD的 值為r31,多路傳輸器170從端口 "before"處選擇其輸入182,而且雙向選擇 單元150將該存儲器內容MEM一VALUE當作寄存器值REG_VALUE而傳送至 寄存器群組120中的寄存器rl內。同時,基底寄存器的值增加4,且其值r31+4 被儲存在存儲器次地址NEXT—ADDR寄存器140中。在下一個STEP_CONTROL周期中,指定r2的寄存器索引REG—IDX被送 至寄存器群組120。讀/寫控制器130產生存儲器讀取信號MEM—R并送至存儲 器子系統160中,以及產生寄存器寫入信號REG_W并送至寄存器群組120。 接著,由存儲器地址MEM_AD所定義的存儲器子系統160的內容被寫入至寄 存器群組120中的寄存器r2。在多路傳輸器175從端口 "later"處選擇其輸入 141以及多路傳輸器170從端口 "before"處選擇其輸入182的情況下,存儲器 地址MEM—AD指定此存儲器次地址NEXT—ADDR寄存器140的輸出值,且此 值等于r3i+4。同時,算術運算單元180將其輸入(也就是存儲器次地址 NEXT_ADDR寄存器140的輸出,其值為r31+4)增加4,而算術運算單元180 的輸出會再增加4(等于r31+8)并再次存入存儲器次地址NEXT—ADDR寄存器 140中。借由以上操作,存儲器地址MEM一AD,分別為(r31+8), (r31 + 12),及 (r31 + 16),的存儲器內容會被分別載入至該寄存器r3, r29和r30中。在指令執 行結束時,由于要改變該基底寄存器指標BASE,所以寄存器索引計算器110 輸出寄存器索引REG—IDX作為BASE,并輸出IS_BASE;同時,多路傳輸器 170從端口 "after"處選擇其輸入181來當成存儲器地址MEM—AD(其值為 r31+20);并且,雙向選擇單元150選擇存儲器地址MEM_AD作為寄存器值 REG_VALUE,用以更新由BASE所定義的基底寄存器,亦即令r31=r31+20。在上例中,經由上述的多字元搬移指令,連續存儲器位置的5個字元可利 用單一指令而載入至該處理器寄存器中。以下列出圖1的該讀/寫控制器130在多字元搬移指令中的詳細運作。If(IS_BASE is false) { /*memory transfer phase*/If(TYPE == "load") { assert REG—W; assert MEMR;} else { /*TYPE==,,store,,*/ assert REGR; assert MEM一W;} else if(both IS—BASE and MOD are true) { /*base modification phase*/ assert REG—W;當信號IS—BASE是假時(如存儲器搬移階段),如果存儲器存取類型 信號TYPE是載入("load"),那么讀/寫控制器130產生該存儲器讀取信號 MEM—R和寄存器寫入信號REG_W;如果該存儲器存取類型信號TYPE是儲存 ("store"),那么該讀/寫控制器130產生該寄存器讀取信號REG一R和該存儲器寫 入信號MEM—W。當信號IS—BASE和MOD都為真時(基底修改階段),讀/ 寫控制器130只產生寄存器寫入信號REG_W。在另一個實施例中,該處理器搬移寄存器列表可由START, NUMREG和 MASK來定義,其中START和MASK的定義同于先前實施例,且NUMREG 代表在連續寄存器組中的寄存器的編號。因此,在此實施例中的"lmw START, NUMREG, MASK, [BASE]"等同于在先前實施例中的"lmw START, END, MASK, [BASE]",其中END=START+NUMREG-1 。綜上所述,單一的多字元搬移指令足以在連續存儲器位置和多個處理器寄 存器之間移動多個字元,且仍有數個可用位元能用于次運算碼(sub-opcode)和 選擇遮罩指標。雖然本發明已以較佳實施例揭示如上,然其并非用以限定本發明,任何本 領域技術人員,在不脫離本發明的精神和范圍內,當可作些許的修改和完善, 因此本發明的保護范圍當以權利要求書所界定的為準。
權利要求
1.一種在一存儲器子系統和一處理器寄存器群組之間的存儲器搬移方法,該方法包括產生一多字元搬移指令,其中,該多字元搬移指令指定一存取類型信息,基于一對信息的一連續寄存器組信息,一遮罩選擇信息,以及用于該存儲器子系統內的相應存儲器位置的一起始地址的一基底寄存器信息;以及回應于該多字元搬移指令,在該存儲器子系統和該處理器寄存器群組之間移動多個字元。
2. 如權利要求1所述的存儲器搬移方法,其特征在于,該存取類型信息定 義一存儲器載入類型和一存儲器儲存類型之一。
3. 如權利要求1所述的存儲器搬移方法,其特征在于,所搬移的字元總數 量等同于,由該連續寄存器組所定義的寄存器數量加上由該遮罩選擇信息所定 義的寄存器數量。
4. 如權利要求1所述的存儲器搬移方法,其特征在于,該多字元搬移指令進一步定義一地址更新模式,用以指定根據該存儲器位置的該起始地址來更 新各存儲器搬移的該存儲器地址。
5. 如權利要求4所述的存儲器搬移方法,其特征在于,該多字元搬移指 令迸一步定義一順序模式,用以指定在該存儲器地址每次更新之前或之后,來 執行該存儲器存取。
6. 如權利要求5所述的存儲器搬移方法,其特征在于,該多字元搬移指 令進一步定義一修改模式,用以指定在該指令執行結束時,是否要依據最后更 新的存儲器地址來修改該基底寄存器信息。
7. —種回應于一多字元搬移指令而在一存儲器子系統和一處理器寄存器 群組之間移動多個字元的電路,其中該指令定義 一存取類型信息;根據一對 信息的一連續寄存器組; 一遮罩選擇信息;以及用于該存儲器子系統內的相應 存儲器位置的一起始地址的一基底寄存器信息,該電路包括一寄存器索引計算器,用以根據該連續寄存器組信息,該遮罩選擇信息和 該基底暫存信息而產生一寄存器索引和一基底修改指定信號;一讀/寫控制器,回應于該存取類型信息和該基底修改指定信號,產生一存 儲器存取控制信號并送至該存儲器,產生一寄存器存取控制信號并送至該處理 器寄存器群組;以及一雙向選擇單元,根據該存儲器存取控制信號和該寄存器存取控制信號, 在該存儲器子系統和該處理器寄存器之間雙向地傳送該多字元。
8. 如權利要求7所述的電路,其特征在于,該多字元搬移指令進一步定義-一地址更新模式,用以指定連續更新該存儲器地址的方式; 一順序模式,用以指定在該存儲器地址更新之前或之后來執行該存儲器存取;以及一修改模式,用以指定是否在該指令執行結束時,將該基底寄存器修改成 最后更新的存儲器地址。
9. 如權利要求8所述的電路,其特征在于,還包括 一算術運算單元,回應該地址更新模式而更新該存儲器地址。
10. 如權利要求9所述的電路,其特征在于,還包括一次地址寄存器,用以暫時地儲存來自該算術運算單元更新后的該存儲器 地址。
11. 如權利要求IO所述的電路,其特征在于,還包括一第一多路傳輸器,用以在該存儲器位置的一初始存儲器地址和該次地址 寄存器的一輸出之間選擇。
12. 如權利要求11所述的電路,其特征在于,還包括一第二多路傳輸器,用以在該算術運算單元的一輸出和該第一多路傳輸器 的一輸出之間選擇。
全文摘要
本發明提供一種多字元搬移指令,利用此多字元搬移指令的存儲器搬移方法,以及在存儲器子系統與處理器寄存器群組之間進行多字元搬移的一種電路。多字元搬移指令定義存取類型(載入或儲存),連續寄存器組,選擇遮罩,以及用于存儲器位置起始地址的基底寄存器。因此,由此指令所存取的字元總數等于,由連續寄存器組所定義的寄存器數量連同由選擇遮罩所規定的寄存器數量。除此之外,多字元搬移指令還定義地址更新模式,順序模式,以及修改模式。
文檔編號G06F9/34GK101236487SQ200810003158
公開日2008年8月6日 申請日期2008年1月11日 優先權日2007年1月12日
發明者張傳華, 曾仁志, 蘇泓萌 申請人:晶心科技股份有限公司