專利名稱:整合式數(shù)據(jù)處理器的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種整合式數(shù)據(jù)處理器,尤其涉及一種融合微處理器(MCU)及數(shù)字信號(hào)處理器(DSP)功能的整合式數(shù)據(jù)處理器。
背景技術(shù):
于目前的操作系統(tǒng)中,若是涉及數(shù)字信號(hào)處理器(DSP)者,大多數(shù)的架構(gòu)是利用一獨(dú)立的微處理器(MCU)配合一獨(dú)立的數(shù)字信號(hào)處理器(DSP)兩者同共同搭配運(yùn)用,采行Co-processor的運(yùn)算方式,一般是以該數(shù)字信號(hào)處理器DSP作為Co-processor輔助微處理器進(jìn)行數(shù)據(jù)運(yùn)算處理,在微處理器發(fā)出DSP指令控制數(shù)字信號(hào)處理器執(zhí)行數(shù)據(jù)運(yùn)算的同時(shí),微處理器本身亦在執(zhí)行自己所負(fù)責(zé)的指令。
就兩者負(fù)責(zé)的作業(yè)來(lái)說,微處理器的工作通常較偏向控制(control)方面,例如接收中斷(interrupt)指令、接收bit string data等,該些數(shù)據(jù)可再傳遞給數(shù)字信號(hào)處理器作進(jìn)一步的演算。
以采用前述兩種獨(dú)立處理器的系統(tǒng)而言,所花費(fèi)的硬件成本相對(duì)較高,各個(gè)獨(dú)立處理器的內(nèi)部均建有各自的細(xì)部單元,例如指令譯碼器(instruction decoder)、操作數(shù)擷取單元(operand fetch unit)、計(jì)算單元(calculation unit)、儲(chǔ)存單元等;而在兩個(gè)獨(dú)立處理器之間亦必須建立一連結(jié)的接口(interface)讓彼此間形成數(shù)據(jù)傳遞溝通的管道。因此,既有系統(tǒng)于硬件架構(gòu)方面來(lái)看,其硬件成本若希望得以有效降低,恐面臨一定的瓶頸。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種可支持微處理器(MCU)及數(shù)字信號(hào)處理器(DSP)功能的整合式數(shù)據(jù)處理器,且能保有一定程度的數(shù)據(jù)運(yùn)算效率,藉以降低系統(tǒng)設(shè)計(jì)的硬件所需成本。
為達(dá)到上述目的,本發(fā)明的整合式數(shù)據(jù)運(yùn)算處理器是包含有一運(yùn)算單元,是負(fù)責(zé)執(zhí)行數(shù)據(jù)演算的主要核心單元,該運(yùn)算單元連接有一共享數(shù)據(jù)總線及一Y數(shù)據(jù)總線,其中該共享數(shù)據(jù)總線連接一X地址產(chǎn)生器、一數(shù)據(jù)擷取單元及一緩存器單元,而該Y數(shù)據(jù)總線是連接至一內(nèi)部Y內(nèi)存;一內(nèi)存并行總線接口,是連接至前述數(shù)據(jù)擷取單元與一指示擷取單元,該內(nèi)存并行總線接口是連接一內(nèi)部程序內(nèi)存、一內(nèi)部X內(nèi)存、一外部?jī)?nèi)存及外圍裝置,該內(nèi)存并行總線接口可利用管線式運(yùn)算方式同步處理數(shù)據(jù)傳輸及擷取指令,以提高該處理器的運(yùn)算平行度;又前述內(nèi)存并行總線接口是包含一數(shù)據(jù)傳輸單元及一中斷控制器,以該中斷處理器于中斷要求發(fā)生時(shí)負(fù)責(zé)處理;一Y地址產(chǎn)生器,是連接至前述緩存器單元及內(nèi)部Y內(nèi)存。
在前述架構(gòu)之下,處理器配合其對(duì)應(yīng)的指令群組,是能有效率的執(zhí)行數(shù)據(jù)演算及指令處理作業(yè)。
圖1本發(fā)明的電路方塊圖。
圖2本發(fā)明的內(nèi)存配置圖。
圖3本發(fā)明程序編址的示意圖。
圖4本發(fā)明數(shù)據(jù)編址的示意圖。
圖5本發(fā)明緩存器的配置示意圖。
圖6本發(fā)明暫存器作為byte存取時(shí)的配置示意圖。
圖7A本發(fā)明系統(tǒng)選項(xiàng)控制緩存器(SOCR)的示意圖。
圖7B本發(fā)明程序狀態(tài)暫存器(PSR)的示意圖。
圖7C本發(fā)明堆棧溢出/下溢緩存器(STOVUN)的示意圖。
圖8本發(fā)明乘法累加單元(MAC)的電路方塊圖。
圖9本發(fā)明編址模式與編址范圍的關(guān)系對(duì)應(yīng)圖。
圖10本發(fā)明三種編碼模式及地址產(chǎn)生器的關(guān)系對(duì)應(yīng)圖。
圖11本發(fā)明柱形移位器的示意圖。
圖12本發(fā)明中斷控制緩存器群(xxICR)示意圖。
圖13本發(fā)明中斷控制緩存器位置及中斷向量表。
圖14本發(fā)明所支持的例外事件表。
圖15本發(fā)明例外要求緩存器(EXR)的示意圖。
圖16本發(fā)明數(shù)據(jù)傳輸單元控制緩存器(DTUCx)的示意圖。
圖17本發(fā)明數(shù)據(jù)傳輸單元控制緩存器(DTUCx)中INC字段的對(duì)照表。
圖18本發(fā)明數(shù)據(jù)傳輸單元所使用的地址指針表。
圖19本發(fā)明外部?jī)?nèi)存控制緩存器(EMCR)示意圖。
圖20本發(fā)明外部?jī)?nèi)存的區(qū)分示意圖。
圖21本發(fā)明時(shí)脈控制緩存器(CLKCON)的示意圖。
圖22本發(fā)明時(shí)脈控制緩存器(CLKCON)中可設(shè)定的系統(tǒng)時(shí)脈表。
圖23本發(fā)明定時(shí)器的架構(gòu)方塊圖。
圖24本發(fā)明時(shí)基控制緩存器(TBC)的示意圖。
圖25本發(fā)明時(shí)基控制緩存器(TBC)中可設(shè)定的時(shí)基表。
圖26本發(fā)明管線式運(yùn)算的示意圖。
圖27本發(fā)明無(wú)條件式轉(zhuǎn)移指令的管理運(yùn)算示意圖。
圖28本發(fā)明條件式轉(zhuǎn)移指令的管線運(yùn)算示意圖(當(dāng)執(zhí)行轉(zhuǎn)移動(dòng)作時(shí))。
圖29本發(fā)明條件式轉(zhuǎn)移指令的管線運(yùn)算示意圖(當(dāng)未執(zhí)行轉(zhuǎn)移動(dòng)作時(shí))。
主要組件符號(hào)說明(10)運(yùn)算單元(11)共同數(shù)據(jù)總線(13)Y數(shù)據(jù)總線 (15)內(nèi)部Y內(nèi)存(20)X地址產(chǎn)生器 (22)Y地址產(chǎn)生器(30)數(shù)據(jù)擷取單元(40)緩存器單元(50)內(nèi)存并行總線(51)數(shù)據(jù)傳輸單元(52)中斷控制器(60)指令擷取單元(62)指令譯碼/控制單元(71)內(nèi)部程序內(nèi)存(72)內(nèi)部X內(nèi)存(73)外部?jī)?nèi)存(74)外圍裝置具體實(shí)施方式
本發(fā)明是一種融合微處理器(MCU)及數(shù)字信號(hào)處理器(DSP)的創(chuàng)新處理器,搭配其指令組及管線式(pipeline)的處理架構(gòu),可于單一周期(single cycle)中即完成單一指令的執(zhí)行。于單一周期中,便可自內(nèi)存中取出一操作數(shù)(operand)并將執(zhí)行完畢的計(jì)算結(jié)果寫回至內(nèi)存中,此種高速的運(yùn)算能力將大幅提升整體系統(tǒng)的作業(yè)效率。
請(qǐng)參見圖1所示,為本發(fā)明的詳細(xì)電路方塊圖,包含有一運(yùn)算單元(arithmetic unit)10,是負(fù)責(zé)執(zhí)行數(shù)據(jù)演算的主要核心單元,例如一般的加減乘除數(shù)學(xué)演算、邏輯運(yùn)算及DSP運(yùn)算;該運(yùn)算單元10是經(jīng)由一共享數(shù)據(jù)總線(common data bas)11連接有一X地址產(chǎn)生器(X address generator)20、一數(shù)據(jù)擷取單元(data fetch unit)30及一緩存器單元40;該運(yùn)算單元10是更進(jìn)一步經(jīng)由一Y數(shù)據(jù)總線(Y data BUS)13連接至一內(nèi)部Y內(nèi)存15;一內(nèi)存并行總線接口(Advanced Memory Parallelism Bus,AMPB)50,包含有數(shù)據(jù)傳輸單元51及一中斷控制器52,該內(nèi)存并行總線接口50是連接至前述數(shù)據(jù)擷取單元30與一指示擷取單元60,該內(nèi)存并行總線接口50可自一內(nèi)部程序內(nèi)存(internal program ROM/FLASH)71、內(nèi)部X內(nèi)存(internal X RAM)72、外部?jī)?nèi)存(external ROM/RAM)73及其余外圍裝置(peripheral)74等存取數(shù)據(jù);一Y地址產(chǎn)生器22是連接至前述緩存器單元40及內(nèi)部Y內(nèi)存15。
前述指令擷取單元60可以透過內(nèi)存并行總線接口50自前述內(nèi)部程序內(nèi)存71、內(nèi)部X內(nèi)存72、外部?jī)?nèi)存73等取得指令,而在此同時(shí),該數(shù)據(jù)擷取單元30亦可透過內(nèi)存并行總線接口50自任一內(nèi)存中取得操作數(shù)數(shù)據(jù)(operand data)。因此,在指令及數(shù)據(jù)的存取過程中,前述內(nèi)存并行總線接口50即扮演控制數(shù)據(jù)存取路徑、存取優(yōu)先權(quán)、切換等仲裁功能,該內(nèi)存并行總線接口50是具有一項(xiàng)特點(diǎn),可以同時(shí)擷取指令及數(shù)據(jù),令處理器的平行度增加。
該指令擷取單元60更連接有一指令譯碼/控制單元(instructiondecoder/control unit)62,此指令譯碼/控制單元(instruction decoder/controlunit)62即針對(duì)指令擷取單元60擷取到的編碼指令進(jìn)行譯碼動(dòng)作,并產(chǎn)生管線式運(yùn)算(pipeline)控制指令。
本發(fā)明中是使用到一組地址內(nèi)存,即內(nèi)部X內(nèi)存72及內(nèi)部Y內(nèi)存15,于同一周期(cycle)當(dāng)中,該運(yùn)算單元10可同時(shí)至該組內(nèi)存72、15中取得兩操作數(shù),此種架構(gòu)是極適合用于乘法累積演算(Multiply and Accumulate,MAC),在MAC演算的過程中,會(huì)同時(shí)取得兩操作數(shù),對(duì)兩者執(zhí)行乘法后與累加緩存器(AR register)累加。
前述X地址產(chǎn)生器20及Y地址產(chǎn)生器22是可同時(shí)產(chǎn)生兩地址,藉以因應(yīng)MAC演算。而單一的X地址產(chǎn)生器20則可提供一般MCU演算時(shí)的地址指令,所提供的是一24bit的地址,可用來(lái)尋址前述任一內(nèi)存;利用本發(fā)明的內(nèi)存尋址方式,除前述內(nèi)存之外,亦可應(yīng)用于緩存器及特殊功能緩存器的尋址。
在X地址產(chǎn)生器20可執(zhí)行兩種特別的功能,其一為對(duì)DSP算法極有幫助的環(huán)式緩沖(circular buffer),另一則是位交換(Bit reversal)。環(huán)式緩沖的功能,Y地址產(chǎn)生器22是同樣具備,而位交換(Bit reversal)則僅有X地址產(chǎn)生器20所獨(dú)有。
前述緩存器單元40大致上包含有一般緩存器(R0~R4)、累加緩存器(ARX、ARH及ARL)、索引緩存器(index register,X0~X2、Y0~Y2)、框指針器(frame pointer)、堆棧指針器(stack pointer)。
前述是為本發(fā)明的簡(jiǎn)要概述,有關(guān)各單元的詳細(xì)介紹如下(一)、內(nèi)存請(qǐng)參閱圖2,本發(fā)明所提供的內(nèi)存容量最少為16MB Bytes,其配置方式如圖所示。在ROM/Flash模式下,重置(reset)開始地址及中斷向量是存放于該內(nèi)部程序內(nèi)存71;而在Romless模式,重置(reset)開始地址及中斷向量是自外部?jī)?nèi)存起始地址73開始。
程序編址(program addressing)本發(fā)明是可自內(nèi)部程序內(nèi)存71、內(nèi)部X內(nèi)存72及外部?jī)?nèi)存73中執(zhí)行程序,但無(wú)法自內(nèi)部Y內(nèi)存15中執(zhí)行。用于程序代碼的編址空間與數(shù)據(jù)的編址空間相同,是為24bit的地址。請(qǐng)參閱圖3所示,本發(fā)明是為一16bit的處理器,其程序計(jì)數(shù)器(program counter,PC)亦僅是16bit,因此使用一8bit的code segment(CS)緩存器序連(concatenate)該程序計(jì)數(shù)器PC,藉此組成一完整的24bit地址數(shù)據(jù)。
數(shù)據(jù)編址(data addressing)請(qǐng)參閱圖4所示,本發(fā)明是可使用兩種方式存取存于內(nèi)存中的數(shù)據(jù),即直接存取模式(direct access mode)及間接存取模式(indirect access mode),這兩種模式均是16bit的編址,故均使用到9bit的DS0或DS1緩存器序連原16bit的編址,藉此組成完整的24bit數(shù)據(jù)地址,而根據(jù)原16bit的編址的最高位(bit15)可決定是采用DS0或DS1。
(二)緩存器群請(qǐng)參考圖5所示,為本發(fā)明的緩存器配置示意圖,包含有一般緩存器(R0~R4)、累加緩存器(ARX、ARH及ARL)、索引緩存器(index register,X0~X2、Y0~Y2)、框指針器(frame pointer)、堆棧指針器(stack pointer)等,均為16words的緩存器。
其中,前述三個(gè)累加暫存器(ARX、ARH及ARL)于MAC指令中可作為40bit的累加器(accumulator)。若無(wú)應(yīng)用于MAC指令,亦可作為一般緩存器使用,其中ARX、ARH、ARL分別映像為R5、R6、R7。
該堆棧指針器(SP)的初始值是為當(dāng)該內(nèi)部X內(nèi)存72的數(shù)據(jù)未超過4K bytes時(shí),于內(nèi)存72內(nèi)的最后字符地址。舉例而言,如果內(nèi)存72內(nèi)部數(shù)據(jù)為2K bytes,則其最后字符的地址為07FE,該地址即為堆棧指針器的初始值。
而框指針器(FP)則是應(yīng)用在C編譯器,用以指定一特定地址予局部變量(localvariables),藉以提升call、return等函數(shù)的執(zhí)行效率。
請(qǐng)參閱圖6所示,前述暫存器是可提供byte存取的功能,其分別規(guī)劃為圖中所示的各個(gè)區(qū)域。
此外,本發(fā)明亦提供有數(shù)個(gè)特殊功能的緩存器SOCR、PSR、STOVUN1.系統(tǒng)選項(xiàng)控制緩存器(system option control register,SOCR),請(qǐng)參考圖7A所示,其初始值為0x000,該緩存器各位所代表涵意STKCHK用以自動(dòng)偵測(cè)該堆棧指針器有無(wú)溢位/下溢(overflow/underflow)。
RAM令中斷/陷阱向量的起始地址為0x0000開始。
FR針對(duì)MUL及MAC指令,可用以設(shè)定其小數(shù)點(diǎn)運(yùn)算,若有設(shè)定,則乘法運(yùn)算結(jié)果是將左移1bit。
MAS若此位加以設(shè)定,則累加器飽和模式(saturation mode)將會(huì)自行激活。當(dāng)累加器處于飽和模式,且發(fā)生32bit的溢位情況,則根據(jù)溢位方向,最大負(fù)值(FF80000000)或最大正值(007FFFFFFF)將會(huì)截入至該累加器中。
NSEG若欲限定程序代碼小于64K byte,則可設(shè)定此位值。
WS此位是用以設(shè)定外部?jī)?nèi)存的等待狀態(tài)號(hào)碼。
DW此位若加以設(shè)定,則取消監(jiān)視時(shí)鐘(watch dog timer)。
UP取消受保護(hù)的緩存器。有些緩存器的數(shù)據(jù)為避免誤寫,將設(shè)為寫保護(hù)狀態(tài),若要改變?cè)撔┚彺嫫鞯脑O(shè)定,即必須先取消其寫保護(hù)保護(hù)。
IE中斷致能位。
2.程序狀態(tài)緩存器(Program Status Register,PSR),如圖7B所示,該緩存器的初始值為0X0000,而各位所代表的涵意如下Z零標(biāo)志(zero flag)。
V溢位標(biāo)志(overflow flag)C進(jìn)位標(biāo)志(carry flag)N負(fù)號(hào)標(biāo)志(negative flag)MVMAC溢位標(biāo)志,當(dāng)MAC演算發(fā)生溢位情形時(shí)(超過40bit),則該標(biāo)志即加以顯示。
MSMAC飽和標(biāo)志,當(dāng)MAC演算結(jié)果產(chǎn)生飽和時(shí),該標(biāo)志即加以顯示。
CPRI目前作業(yè)的優(yōu)先權(quán)信息。
CIRQ當(dāng)進(jìn)入中斷作業(yè)例程,該位將由硬件自動(dòng)加以設(shè)定。當(dāng)CIRQ為1時(shí),則其余中斷要求的優(yōu)先權(quán)必須高于CPRI方能接受。當(dāng)CIRQ為1時(shí),則其余中斷要求的優(yōu)先權(quán)必須等于或高于CPRI方能接受。
3.堆棧溢出/下溢緩存器(stack overflow/underflow register,STOVUN),其初始值為0X01FF,請(qǐng)參閱圖7C所示本發(fā)明的處理器是允許于內(nèi)部存儲(chǔ)器的任何地方執(zhí)行堆棧作業(yè),只需變更堆棧指針(SP)便可指定堆棧地址。
堆棧溢出/下溢緩存器是包含兩個(gè)8bit的緩存器STKOV、STKUN,其編址方式可到達(dá)4K,而最小儲(chǔ)存單位為16bytes,即最小的堆棧容量即為16bytes。堆棧的上界為STKUN*16,而下界為STKOV*16。堆棧指針的初始值可設(shè)定為STKUN*16,當(dāng)堆棧指針高于STKUN*16,即代表下溢的狀況發(fā)生;若是堆棧指針低于STKOV*16,則表示溢位的情況發(fā)生。
(三)乘法累加單元及地址產(chǎn)生單元如圖8所示,該乘法累加單元(MAC)可用以提升數(shù)字信號(hào)處理的效率,用以執(zhí)行乘法及累加運(yùn)算。利用一乘法器接收自X、Y緩存器所指引的兩筆16bit的數(shù)據(jù),于單一周期中執(zhí)行乘法運(yùn)算,其結(jié)果是經(jīng)由1-bit的移位緩存器執(zhí)行移位運(yùn)算,再送入至一40bit的加法器,與累加器的前一次輸出結(jié)果相加,MAC運(yùn)算的結(jié)果即儲(chǔ)存在ARX:ARH:ARL。
地址產(chǎn)生單元(Address Generation Unit,AGU)如同前述,本發(fā)明包含有兩個(gè)地址產(chǎn)生組件20、22,故可在單一周期中提供兩不同的地址指令以存取兩獨(dú)立操作數(shù),其中,前述X地址產(chǎn)生器20可用來(lái)尋址所有內(nèi)存位置,而Y地址產(chǎn)生器20則僅能尋址內(nèi)部Y內(nèi)存15而已。
惟無(wú)論X地址產(chǎn)生器20或Y地址產(chǎn)生器22,皆提供有線性編址(linearaddressing)、環(huán)式緩沖編址及位反置(bit-reversal)編址三種模式。請(qǐng)參閱圖9所示,任何指令若是用以存取[Xn]或[Yn],即激活尋址功能,惟某些特定指令如[Xn+#immed16]及[--Rn]則不會(huì)。
對(duì)于該X地址產(chǎn)生器20及Y地址產(chǎn)生器22來(lái)說,內(nèi)部均包含三組緩存器,分別為X地址產(chǎn)生器20的[X0,XM0,XC0]、[X1,XM1,XC1]、[X2,XM2,XC2],以及Y地址產(chǎn)生器22的[Y0,YM0,YC0]、[Y1,YM1,YC1]、[Y2,YM2、YC2],各個(gè)緩存器均支持前述三種編址模式,而編址模式可根據(jù)XMn或YMn緩存器加以區(qū)別,若是XMn或是YMn為0x0000,即為線性編址;若是XMn或是YMn為0xFFFF,即為位反置(bit-reversal)編址;而其余數(shù)值即代表環(huán)式緩沖編址,如圖10所示。
1.線性編址此為支持MAC指令的一般尋址方式,例如MAC [X0++,][Y0++]該指令即對(duì)X0及Y0所指出的地址,取其線性數(shù)據(jù)矩陣元素執(zhí)行乘法及累加運(yùn)算。完成后,該X0及Y0即各別加2。假設(shè)一矩陣的大小為256,則可利用下列指令完成所有的運(yùn)算REP 255MAC [X0++],[Y0++]對(duì)于某些DSP算法,例如FIR算法,是具固定的系數(shù)并兼具數(shù)據(jù)的搬移,在執(zhí)行乘法-累加的運(yùn)算,目前的結(jié)果將取代前一次的結(jié)果,假設(shè)數(shù)據(jù)是由X地址產(chǎn)生器所指引,而系數(shù)是由Y地址產(chǎn)生器所指示,則利用以下指令完成MAC.m [X0++],[Y0++]該指令先擷取數(shù)據(jù)及系數(shù),執(zhí)行運(yùn)算并寫入至累加器后,處理器會(huì)保留[X0]的數(shù)據(jù)并覆寫至地址(X0-1)2.環(huán)式緩沖編址對(duì)于重復(fù)執(zhí)行的MAC運(yùn)算指令,此種方式可提高其運(yùn)算速度。舉例而言,假設(shè)欲宣告16words的環(huán)式緩沖器,利用指令Label0.CIRCBUF 0x10;便可定義出一16words的環(huán)式緩沖器,而基礎(chǔ)起始地址為k*25。
在定義過程中,于內(nèi)存中是可規(guī)劃出一16words的環(huán)式緩沖器,而其基礎(chǔ)起始地址為k*(2n),其中2n大于0x20而k則為任一整數(shù),此緩沖器的上界地址為k*(2n)+0x20-1。
利用上述環(huán)式緩沖器執(zhí)行MAC運(yùn)算時(shí),運(yùn)算起始地址是存放于Xn緩存器,該起始地址必須界于基礎(chǔ)起始地址及上界地址。而緩沖器長(zhǎng)度則設(shè)定于XMn緩存器中。
例如要以緩沖器中的第五個(gè)字為運(yùn)算起始地址,使用以下指令集MOV X0,#Label0+10;(5word*2=10bytes)MOV XM0,#0x20;buffer length,16words
REP #0x2D;proceed 0x2E times of the next instructionMAC.uu [X0++],[Y0++]上述指令集即是從#Label+10開始,執(zhí)行0x2E次的MAC演算,每次執(zhí)行后,X0是自動(dòng)加2。當(dāng)X0>=#Label+0x20時(shí),X0即轉(zhuǎn)繞至#Label+(X0-(#Label+0x20)。
3.位反置編址此種方式主要應(yīng)用于FFT算法上。只有在AGU及Xmn(或Ymn)為0xFFFF時(shí)才能執(zhí)行,此功能會(huì)將設(shè)定數(shù)目的位順序全部反向排列,例如原數(shù)據(jù)為k9k8k7k6k5k4k3k2k1k0b5b4b3b2b1b0,則經(jīng)過反向排列后會(huì)成為k9k8k7k6k5k4k3k2k1k0b0b1b2b3b4b5。
(四)柱形移位器Barrel Shifter請(qǐng)參閱圖11所示,本發(fā)明的柱形移位器于單一周期中(one cycle)可對(duì)一緩存器操作數(shù)或內(nèi)存操作數(shù)的任一位進(jìn)行移位處理。其移位運(yùn)算即是于同一緩存器/內(nèi)存執(zhí)行“讀取—移位—寫入”的動(dòng)作。有七種運(yùn)算會(huì)使用到該柱形移位器,其分別是SR、SL、ROR、ROL、ASR、SLOSB及SROSB,該些指令運(yùn)算的詳細(xì)方式容后再述。
(五)中斷及例外處理Interrupt and Exception Handling于三種情況之下,本發(fā)明的處理器會(huì)暫時(shí)擱置目前的執(zhí)行工作,而轉(zhuǎn)換至服務(wù)例行例程(service routine)。第一種情況即為「中斷(interrupt)」,中斷是指由外圍裝置所產(chǎn)生的中斷要求,例如timer、I/O port、serial interface、A/D converter等。第二種情況稱之為「例外(exception)」,例外狀況通常是于執(zhí)行程序過程中所產(chǎn)生的,可能為最初撰寫程序者所預(yù)料未及的情形,例如無(wú)效指令(invalidinstruction)、無(wú)效地址(invalid addresses)、堆棧溢出(stack overflow)、除數(shù)為零(divided by zero)等其它狀況。第三種情況則是直接撰寫指令采刻意方式令處理器暫時(shí)擱置目前的執(zhí)行工作,例如使用陷阱(Trap)這個(gè)指令可以產(chǎn)生軟件中斷,該中斷的處理方式是視同為硬件中斷。使用者可于INTPDN緩存器中設(shè)定一位而產(chǎn)生中斷情形,藉以仿真出如硬件所發(fā)生的中斷狀況。
本發(fā)明的處理器是支持32個(gè)中斷來(lái)源,利用三組不同的緩存器控制中斷動(dòng)作。首先,中斷屏蔽緩存器群(interrupt mask registers)是控制是否致能或去能中斷要求;中斷擱置緩存器組(interrupt pending registers)則用于指示出中斷要求的狀態(tài);中斷等級(jí)緩存器組(interrupt level registers)是用于區(qū)分中斷要求的優(yōu)先前后順序。
請(qǐng)參閱圖12所示,為前述中斷控制緩存器群的示意圖,而圖13即中斷控制緩存器位置及中斷向量表,于中斷控制緩存器中所具有的字段包含EN中斷致能,設(shè)定此字段以致能一筆等待處理的中斷需求。
RQ中斷要求,此字段是當(dāng)中斷要求產(chǎn)生時(shí)由硬件所設(shè)定,用以指示出有一筆中斷要求已產(chǎn)生并等待處理。當(dāng)該筆中斷要求已由一數(shù)據(jù)傳輸單元51(其動(dòng)作稍后詳述)其處理或是其對(duì)應(yīng)的中斷例行服務(wù)例程已開始執(zhí)行,該字段將被自動(dòng)清除。前述兩字段亦可藉由軟件直接設(shè)定。
ED致能數(shù)據(jù)傳輸單元51處理中斷,是致能數(shù)據(jù)傳輸單元51處理中斷要求并傳輸數(shù)據(jù),該數(shù)據(jù)來(lái)源是由SRCPx所指向地址,而其儲(chǔ)放放地址則以DSTPx所指向。若ED字段被加以設(shè)定,則PRI字段是表示該中斷要求于數(shù)據(jù)傳輸單元51所使用的信道編號(hào)。
PRI中斷優(yōu)先權(quán),本發(fā)明是支持0-3四種等級(jí)的優(yōu)先權(quán),越大的數(shù)值代表越高的優(yōu)先權(quán)。當(dāng)一中斷要求發(fā)生時(shí),PRI中的數(shù)值是與前述程序狀態(tài)緩存器中的CPRI值比較,若PRI高于CPRI,則中斷要求將可接受而先擱置目前正在執(zhí)行中的作業(yè),反之若低于CPRI,則該筆中斷要求是暫時(shí)擱置等待處理。當(dāng)在單一周期中同時(shí)出現(xiàn)多筆中斷要求,則互相比較所有中斷要求的優(yōu)先權(quán),并取最高者優(yōu)先處理。
例外(exception)例外事件是于執(zhí)行程序或某些事件時(shí)所發(fā)生的,當(dāng)有此種狀況時(shí)會(huì)產(chǎn)生某些程序碼,供程序設(shè)計(jì)者除錯(cuò)參考,圖14所示是為本發(fā)明所支持的例外事件表,圖15為一例外要求緩存器(EXR)的的示意圖,透過該緩存器,可讓軟件知道是何種例外事件發(fā)生,于該緩存器中是具有多數(shù)字段,分別代表STU堆棧下溢。
STO堆棧溢出。
IIO無(wú)效指令或操作數(shù)格式錯(cuò)誤。
IWA無(wú)效字符地址,是對(duì)一無(wú)效的地址擷取字符操作數(shù)。
IAE無(wú)效地址錯(cuò)誤,是存取一未加定義的地址。
IIA無(wú)效指令地址。
IREP不合法重復(fù)指令。
DB0除數(shù)為零。
例外事件的運(yùn)算是類似中斷處理,然而這兩者仍是有些許差異。首先,當(dāng)例外事件發(fā)生時(shí),目前的指令(該指令正處于譯碼階段)地址將被送入堆棧,但是若為中斷需求發(fā)生,則是將下一道指令送入堆棧。其次,在進(jìn)入例外事件例行例程之前,程序狀態(tài)緩存器(PSR)的CIRQ位將先被設(shè)為1而CPRI則設(shè)為11(代表最高優(yōu)先權(quán))。而中斷運(yùn)算是自中斷控制緩存器(ICR)的PRI字段復(fù)制到程序狀態(tài)緩存器。因此,可以得知例外事件較所有中斷事件具有較高的優(yōu)先處理權(quán)。而不同例外事件彼此之間的優(yōu)先權(quán)則是取決于其各自的例外向量,較低的向量值是代表較高的優(yōu)先權(quán)。
(六)數(shù)據(jù)傳輸單元Data Transfer Unit數(shù)據(jù)傳輸單元51是包含于前述內(nèi)存并行總線接口50中,在單一周期內(nèi),可于一來(lái)源內(nèi)存位置擷取一中斷、字符或字節(jié)而傳送至一目標(biāo)內(nèi)存位置,當(dāng)完成傳輸動(dòng)作后,指向數(shù)據(jù)來(lái)源地及目的地的內(nèi)存位置的指針位置是可自動(dòng)調(diào)整。
該數(shù)據(jù)傳輸單元51是由四個(gè)信道(channel)組合而成,這意謂著至多有四個(gè)中斷需求可指派至數(shù)據(jù)傳輸單元51。當(dāng)一中斷需求指派給數(shù)據(jù)傳輸單元51且數(shù)據(jù)傳輸單元51的信道計(jì)數(shù)非為零,則該中斷需求將不被激活。中斷需求將驅(qū)使數(shù)據(jù)傳輸單元51的某一信道n去擷取特定來(lái)源地址所儲(chǔ)存的字符(word)或字節(jié)(byte),該來(lái)源地址是儲(chǔ)存于SRCPn。爾后,該信道n是將擷取到的數(shù)據(jù)儲(chǔ)存于一目標(biāo)地址,該目標(biāo)地址是儲(chǔ)存于DSTPn。
請(qǐng)參閱圖16所示,為一數(shù)據(jù)傳輸單元控制緩存器(DTUCx)的示意圖,在完成數(shù)據(jù)傳輸后,數(shù)據(jù)傳輸單元控制緩存器內(nèi)的計(jì)數(shù)字段(COUNT)將會(huì)自動(dòng)減1。當(dāng)該計(jì)數(shù)字段成為零時(shí),一實(shí)際的中斷需求即被激活并執(zhí)行中斷例行服務(wù)例程,此中斷需求將具有最高的優(yōu)先權(quán)。
當(dāng)欲致能數(shù)據(jù)傳輸單元51,于中斷控制緩存器(xxICR)中的ED標(biāo)志必須加以設(shè)定,而PRI字段必須設(shè)定為數(shù)據(jù)傳輸單元51的信道編號(hào)。該數(shù)據(jù)傳輸單元控制緩存器(DTUCx)所代表的各字段意義如下COUNT對(duì)數(shù)據(jù)傳輸單元的數(shù)據(jù)傳送加以計(jì)數(shù)。
WBT字符(word)/字節(jié)(byte)的傳輸選擇,當(dāng)此字段為清除狀態(tài)時(shí)是以字符方式傳送,而當(dāng)被設(shè)定時(shí)則以字節(jié)型態(tài)傳送。
SDS設(shè)定此字段后,將致能SRCPx結(jié)合DS0/DS1計(jì)算產(chǎn)生一數(shù)據(jù)的來(lái)源地址。若未加設(shè)定,則來(lái)源地址即等于SRCPx。
DDS設(shè)定此字段后,將致能DSTPx結(jié)合DS0/DS1計(jì)算產(chǎn)生一數(shù)據(jù)的目標(biāo)地址。若未加設(shè)定,則目標(biāo)地址即等于DSTPx。
INC微調(diào)控制SRCPx及DSTPx。請(qǐng)參考圖17該字段由二個(gè)字節(jié)成,00代表不作任何調(diào)整,01代表DSTPx加1或加2(取決于WBT字段),10代表SRCPx加1或加2(取決于WBT字段),11表示保留未定義。
如前所述,完成數(shù)據(jù)傳輸后,數(shù)據(jù)傳輸單元控制緩存器內(nèi)的計(jì)數(shù)字段(COUNT)將會(huì)自動(dòng)減1,而該字段成為0時(shí)即進(jìn)入中斷例行服務(wù)例程。該中斷例行服務(wù)例程可以是處理傳輸后的數(shù)據(jù)、調(diào)整來(lái)源/目標(biāo)地址指針器(pointer)、重新設(shè)定COUNT字段。當(dāng)中斷例行服務(wù)例程處理完后,數(shù)據(jù)傳輸單元51將恢復(fù)到中斷要求發(fā)生時(shí)正在執(zhí)行的作業(yè),繼續(xù)完成其原本作業(yè)。
請(qǐng)參閱圖18所示,為數(shù)據(jù)傳輸單元51所使用的地址指針表。當(dāng)數(shù)據(jù)傳輸單元51接受一中斷要求后,會(huì)平行讀取SRCPn及DSTPn。
(七)外部?jī)?nèi)存接口External Memory Interface連接外部?jī)?nèi)存73的接口是支持標(biāo)準(zhǔn)的ROM、EEPROM、SRAM、NOR Flash Memory、NAND Flash Memory等。所連接的外部?jī)?nèi)存可尋址大于16MB,因?yàn)槭褂脛?dòng)態(tài)的外部?jī)?nèi)存控制緩存器(EMCR)可控制任一外部?jī)?nèi)存的起始地址,目前共計(jì)使用有3個(gè)EMCR。
請(qǐng)參考圖19所示,即前述外部?jī)?nèi)存控制緩存器EMCR的示意圖,其中EMBLK(external memory block address)這個(gè)字段是用以區(qū)隔外部?jī)?nèi)存的尋址空間并控制外部?jī)?nèi)存進(jìn)行讀/寫動(dòng)作時(shí)所用的控制信號(hào)chip select active/inactive。其單位區(qū)塊的最小大小是64KB。而WS這一字段,可配合低速內(nèi)存的讀/寫時(shí)序,插入適當(dāng)?shù)牡却隣顟B(tài)(wait state)指令,最長(zhǎng)的等待狀態(tài)指令是3個(gè)系統(tǒng)時(shí)脈周期(system clock cycle),而最長(zhǎng)的讀/寫指令是4個(gè)系統(tǒng)時(shí)脈周期。
如圖20所示,外部?jī)?nèi)存是區(qū)分成四個(gè)節(jié)段,而各節(jié)段的邊界地址如圖上所標(biāo)示,第一節(jié)段的下邊界地址為0x210000,而上邊界地址由第一外部?jī)?nèi)存控制緩存器(EMCR1)的EMBLK字段所定義,而第一節(jié)段的等待狀態(tài)是定義在前述系統(tǒng)選項(xiàng)控制緩存器(SOCR)。
第二節(jié)段的下邊界地址由第一外部?jī)?nèi)存控制緩存器(EMCR1)的EMBLK字段決定,而上邊界地址由第二外部?jī)?nèi)存控制緩存器(EMCR2)的EMBLK字段所決定。第二節(jié)段的等待狀態(tài)是定義在第一外部?jī)?nèi)存控制緩存器(EMCR1)的WS字段。其余第三、第四節(jié)段是由此類推。
(八)時(shí)脈產(chǎn)生器及工作模式本發(fā)明是提供一般(normal)、閑置(idle)及睡眠(sleep)三種工作模式。一般模式是隨著系統(tǒng)時(shí)脈運(yùn)作,而系統(tǒng)時(shí)脈的速度可由一時(shí)脈控制緩存器(CLKCON)中的CLKSEL字段所決定。在閑置及睡眠模式下,系統(tǒng)時(shí)脈是處于停止?fàn)顟B(tài)(OFF)。
請(qǐng)參閱圖21所示,為該時(shí)脈控制緩存器的示意圖,其中以5個(gè)bit組成的CLKSEL字段是用以設(shè)定系統(tǒng)時(shí)脈的速度,設(shè)定對(duì)照表如圖22所示,介于32.768KHz~24.576MHz,惟該時(shí)脈控制緩存器一般是處于保護(hù)的寫保護(hù)狀態(tài),因此要設(shè)定時(shí)脈時(shí),必須將前述的系統(tǒng)選項(xiàng)控制緩存器(SOCR)中的UP字段預(yù)先設(shè)定,時(shí)基改變后再將該字段予以清除。
(九)定時(shí)器Timers本發(fā)明中共計(jì)有三個(gè)定時(shí)器(Timer)及一時(shí)基產(chǎn)生器Time Base Clock(TB),各個(gè)定時(shí)器中包含一計(jì)時(shí)控制緩存器(TxC)、一預(yù)載緩存器(TxP)及一計(jì)時(shí)計(jì)數(shù)緩存器(Tx)。圖23是一定時(shí)器的架構(gòu)方塊圖,其中輸入給定時(shí)器的時(shí)基源(Fsys)是選自前述時(shí)基控制緩存器(CLKCON)中的CLKSEL字段。
而前述時(shí)基產(chǎn)生器是由一簡(jiǎn)單的定時(shí)器組成,可產(chǎn)生2Hz~32768Hz的中斷信號(hào),于該時(shí)基產(chǎn)生器中是有一時(shí)基控制緩存器(TBC)用以決定時(shí)基速度,如圖24所示,該時(shí)基控制緩存器的B0~B3四個(gè)bit對(duì)應(yīng)圖25的列表。
(十)輸出/入連接埠及外部中斷I/O Ports and External Interrupts本發(fā)明提供了64支的I/O輸出入接腳,可區(qū)分成四組(P0.0~P0.15、P1.0~P1.15、P2.0~P2.15、P3.0~P3.15)。而可利用其中的四支接腳作為外部中斷的接受端,即P0.15、P0.14、P0.13及P0.12作為INT0、INT1、INT2及INT3。
如同先前所述,本發(fā)明的處理器是搭配其指令組及管線式(pipeline)的處理架構(gòu),可于單一周期(single cycle)中即完成單一指令的執(zhí)行,以下僅對(duì)該管線式運(yùn)算方式詳細(xì)說明。
請(qǐng)參考圖26所示,管線式運(yùn)算是分為四個(gè)階段(stage),包含指令擷取、譯碼、執(zhí)行及回寫,其中特別注意的一點(diǎn)是本發(fā)明的讀出/寫入的動(dòng)作是分布在不同階段,并配合本發(fā)明獨(dú)創(chuàng)的指令集(參閱附見)可以讓數(shù)據(jù)的演算獲得最高的平行度,即可以擁有最佳的作業(yè)效率。
第一階段指令是由內(nèi)存或由指令緩沖器中取出。
第二階段處理器譯碼該指令,若必要時(shí)亦一并計(jì)算操作數(shù)位置并自內(nèi)存中擷取出操作數(shù)。若該操作數(shù)是存于一緩存器所指向的地址(間接尋址),則必須讀入該緩存器以計(jì)算出操作數(shù)地址。在某些尋址模式中,可允許對(duì)間接緩存器執(zhí)行postincrement或pre decrement。
第三階段是由運(yùn)算單元10依據(jù)指令類別對(duì)該操作數(shù)執(zhí)行計(jì)算。
第四階段將前一階段的計(jì)算結(jié)果寫入至一目標(biāo)內(nèi)存地址。
轉(zhuǎn)移指令的處理Branch Instruction Processing本處理器包含有三類的轉(zhuǎn)移指令,第一為無(wú)條件式的轉(zhuǎn)移指令(如SJMP、SCALL),第二為條件式的轉(zhuǎn)移指令(如AJMP、ACALL、JB等),第三為特殊重復(fù)運(yùn)算,目的是為了要形成zero overhead循環(huán)執(zhí)行。
請(qǐng)參見圖27,為無(wú)條件式轉(zhuǎn)移指令的管線運(yùn)算示意圖。無(wú)條件式的轉(zhuǎn)移指令可在指令譯碼單元62中預(yù)先被譯碼。而下一個(gè)地址則在轉(zhuǎn)移指令的第一階段產(chǎn)生出來(lái)。在此管線式運(yùn)算過程中并無(wú)overhead的狀況發(fā)生。
如圖28所示,為條件式轉(zhuǎn)移指令的管線運(yùn)算示意圖。條件式轉(zhuǎn)移指令必須檢查條件碼與PSW狀態(tài)緩存器,再?zèng)Q定是否執(zhí)行轉(zhuǎn)移動(dòng)作。圖中所示的是當(dāng)條件轉(zhuǎn)移執(zhí)行時(shí),在I1于“執(zhí)行”階段后即擷取目標(biāo)指令碼。
前述指令擷取單元60在取得一條件式指令后,亦隨即擷取下一個(gè)指令,因此,若無(wú)轉(zhuǎn)移動(dòng)作,則下一個(gè)指令將會(huì)直接譯碼執(zhí)行,如圖29所示。
請(qǐng)參閱附件所示,為本發(fā)明處理器所使用到的指令集,可區(qū)分為算術(shù)指令(arithmetic)、移位/回轉(zhuǎn)(shift/rotate)指令、位運(yùn)算指令(bit operation)、轉(zhuǎn)移指令(branch)、比較指令(comparison)、數(shù)據(jù)搬移指令(data movement)、MISC指令等,利用這些獨(dú)創(chuàng)的指令配合上述硬件架構(gòu),處理器是能發(fā)揮其最大效能。
綜上所述,本發(fā)明是具備以下數(shù)點(diǎn)特征1.高效率的管線式運(yùn)算方式,可使得MCU或DSP指令于單一周期完成運(yùn)算。
2.單一周期MAC演算兼數(shù)據(jù)搬移的能力,使得FIR算法得以最佳化。
3.位反置(bit reversal)功能是極適合用于FFT演算。
4.重復(fù)指令(repeat)是可多次重復(fù)某一道指令,有效精簡(jiǎn)指令的撰寫。
5.自動(dòng)偵測(cè)堆棧溢出/下溢狀況,可避免復(fù)雜的堆棧檢驗(yàn)且能支持無(wú)限制的堆棧結(jié)構(gòu)。
6.提供針對(duì)Word、Btye、Bit的運(yùn)算指令,令MCU的控制能力更為強(qiáng)大。
因此,相較于現(xiàn)今的處理器架構(gòu),本發(fā)明可說是一新穎且具備顯著功效增進(jìn)的發(fā)明,是符合發(fā)明專利申請(qǐng)要件,爰依法具文提出申請(qǐng)。
附件
DMCU指令集這章節(jié)將列舉DMCU的每個(gè)指令及描述其每個(gè)指令的功能,如下所描述。
格式說明n0~15(4bit)表示R0~R15m0~15(4bit)表示R0~R15iii000~111二進(jìn)制(3bit)表示間接緩存器(R8~R15)#0~15(4bit)表示四位的資料常數(shù)##0~255(8bit)表示八位的資料常數(shù)RR0~255(8bit)表示緩存器編號(hào)MM0~255(8bit)表示內(nèi)存地址Cycle descriptionCycle description可以有兩種情況,分別是A狀態(tài)和B狀態(tài)。A情況中所代表的條件為指令在內(nèi)部的ROM或FLASH并且其操作數(shù)也同時(shí)在內(nèi)部RAM或緩存器,B情況中所代表的條件為指令被存放在外部?jī)?nèi)存然而其操作數(shù)在內(nèi)部RAM或緩存器。Cycle value代表管線化指令周期,這意味著我們并不考慮管線化沖突以及管線化暫停,在同一個(gè)指令周期將有很多的指令被同時(shí)管線化Condition CodeCondition code(CC)表示一個(gè)運(yùn)算的旗標(biāo)狀態(tài)。
用于狀態(tài)式的branch指令來(lái)簡(jiǎn)化comparison code(CC)如下表所示
例如,一個(gè)無(wú)條件的呼叫可以用以下程序來(lái)敘述ACALL 0x3F00;無(wú)條件跳至CS3F00而有條件的呼叫則可用以下程序來(lái)敘述ACALL IF_EQ,0x3F00;假如相等,跳至CS3F00
算術(shù)運(yùn)算指令A(yù)DD Integer Addition語(yǔ)法 ADD op1,op2將op2和op1相加,并將資料存入op1中。
運(yùn)算 op1=op1+op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
ADDB Integer Byte Addition語(yǔ)法 ADDB op1,op2將op2和op1相加,并將資料存入op1中。
運(yùn)算 op1=op1+op2資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0.
地址種類
ADDC Integer Addition with carry語(yǔ)法 ADDC op1,op2將op2和op1相加并事先產(chǎn)生一個(gè)進(jìn)位,再將資料存入op1中,此指令可以做較精密的運(yùn)算。
運(yùn)算 op1=op1+op2+C資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已有設(shè)定,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
ADDCB Integer Byte Addition with carry語(yǔ)法 ADDCB op1,op2將op2和op1相加并事先產(chǎn)生一個(gè)進(jìn)位,再將資料存入op1中,此指令可以做較精密的運(yùn)算。
運(yùn)算 op1=op1+op2+C資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已有設(shè)定,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
AND Logical AND語(yǔ)法 AND op1,op2將op1和op2作邏輯上的AND運(yùn)算,并將結(jié)果儲(chǔ)存在op1中。
運(yùn)算 op1=op1^op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已有設(shè)定,則Z設(shè)成1,否則設(shè)為0V V清為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
ANDB Logical Byte AND語(yǔ)法 AND op1,op2將op1和op2作邏輯上的AND運(yùn)算,并將結(jié)果儲(chǔ)存在op1中。
運(yùn)算 op1=op1^op2資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已有設(shè)定,則Z設(shè)成1,否則設(shè)為0V V清為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
CPL Integer One’s Complement語(yǔ)法 CPL op1將op1取1’s補(bǔ)碼后存回op1。
運(yùn)算 op1=--_﹁op1資料型態(tài) WORD方法匯編語(yǔ)言中利用XOR指令來(lái)完成CPL的指令,但在硬件中提供使用此指令,故替代指令如下XOR op1,0xFFFFh旗標(biāo)狀態(tài)和周期信息請(qǐng)參考XOR指令。
CPLB Integer Byte One’s Complement語(yǔ)法 CPLB op1將位op1取1’s補(bǔ)碼后存回op1。
運(yùn)算 op1=--_﹁op1資料型態(tài) BYTE方法匯編語(yǔ)言中利用XORB指令來(lái)完成CPLB的指令,但在硬件中提供使用此指令,故替代指令如下XORB op1,0xFFh旗標(biāo)狀態(tài)和周期信息請(qǐng)參考XORB指令。
DIV 16-by-16 signed division語(yǔ)法 DIV op1將ARL緩存器中16位資料除以op1,相除結(jié)果之商存入ARL緩存器,余數(shù)存入ARH緩存器。
運(yùn)算 ARL=-ARL/op1ARH=ARL mod op1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用WORD的資料形態(tài)表示時(shí),或op1為0,則V設(shè)為1,否則設(shè)為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
DIVL 32-by-16 signed division語(yǔ)法 DIVL op1將32位資料分成兩個(gè)16位資料分別儲(chǔ)存于ARH及ARL緩存器中再除以op1,相除結(jié)果之商存入ARL緩存器,余數(shù)存入ARH緩存器。
運(yùn)算 ARL=-ARHARL/op1ARH=ARHARL mod op1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用WORD的資料形態(tài)表示時(shí),或op1為0,則V設(shè)為1,否則設(shè)為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
UDIV 16-by-16 unsigned division語(yǔ)法 UDIV op1將ARL緩存器中16位資料除以op1,相除結(jié)果之商存入ARL緩存器,余數(shù)存入ARH緩存器。
運(yùn)算 ARL=ARL/op1ARH=ARL mod op1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用WORD的資料形態(tài)表示時(shí),或op1為0,則V設(shè)為1,否則設(shè)為0。
地址種類
UDIVL 32-by-16 unsigned division語(yǔ)法 UDIVL op1將32位資料分成兩個(gè)16位資料分別儲(chǔ)存于ARH及ARL緩存器中再除以op1,相除結(jié)果之商存入ARL緩存器,余數(shù)存入ARH緩存器。
運(yùn)算 ARL=ARHARL/op1ARH=ARHARL mod op1資料型態(tài)s WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用WORD的資料形態(tài)表示時(shí),或op1為0,則V設(shè)為1,否則設(shè)為0。
地址種類
MUL Signed Multiplication語(yǔ)法 MUL op1,op2將op1乘以op2,其結(jié)果儲(chǔ)存在AR緩存器。
運(yùn)算 AR=op1*op2if(SOCR.FR)ARn=ARn-1[n=15...1]資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算結(jié)果不能用double WORD的資料形態(tài)表示時(shí)(RHARL),則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算結(jié)果不能用WORD的資料形態(tài)表示時(shí),則V設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
UMUL Unsigned Multiplication語(yǔ)法 UMUL op1,op2分別用兩個(gè)16位op1及op2的資料相乘,所得之32位的結(jié)果儲(chǔ)存在AR緩存器(ARHARL)。
運(yùn)算 AR=op1*op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0C 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用WORD的資料形態(tài)表示時(shí),則V設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V V清為0地址種類
NEG Integer Two’s Complement語(yǔ)法 NEG op1將op1的2’s補(bǔ)碼存入op1中。
運(yùn)算 op1=0-op1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0C 假如產(chǎn)生借位,則C為1,否則為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用WORD的資料形態(tài)表示時(shí),則V設(shè)為1,否則設(shè)為0。在這個(gè)指令中,V的成立條件在op1為-32768(0x8000)。
地址種類
NEGB Integer Two’s Complement(Byte)語(yǔ)法 NEG op1將op1的2’s補(bǔ)碼存入op1中。
運(yùn)算 op1=0-op1Data Type BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0C 假如產(chǎn)生借位,則C為1,否則為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,也就是說結(jié)果不能用BYTE的資料形態(tài)表示時(shí),則V設(shè)為1,否則設(shè)為0。在這個(gè)指令中,V的成立條件在op1為-128(0x80).。
地址種類
MAC Multiply and Accumulate語(yǔ)法 MAC.{[ss][us][su][uu]}.[r].[m].[s].[-] [Xn@],[Ym@]將Xn與Yn緩存器所指到的十六位有號(hào)或無(wú)號(hào)的操作數(shù)相乘,將乘積累加到四十位的AR緩存器。若參數(shù)[m]被指定,則由X所指到的資料會(huì)覆載到(X-@)的地址上。例如[X@]是[X++],則資料會(huì)由(X)的地址上被移動(dòng)到(X-2)的地址上。若參數(shù)[-]被指定,則會(huì)由AR緩存器中減去運(yùn)算出來(lái)的乘積,并將差值存回AR緩存器。當(dāng)一個(gè)運(yùn)算結(jié)束后,Xn與Yn的指針會(huì)根據(jù)@來(lái)運(yùn)作。若[s]或SOCR.MAS被設(shè)定,則累加器的值會(huì)保持在0xFF80000000~0x007FFFFFFF的范圍之內(nèi)。
@代表尋址模式,如下表所示
運(yùn)算 tmp=(Xn)*(Ym)if(SOCR.FR&ss)tmpn=tmpn-1[n=15...1]If(-)AR=AR-tmpelseAR=AR+tmpif(m)(X-@)=(Xn)
if(r){AR=AR+0x8000ARL=0}X=X+@Y=Y(jié)+@狀態(tài)旗標(biāo)Z 當(dāng)累加器其運(yùn)算為0時(shí),設(shè)為1,否則設(shè)為0V 當(dāng)狀態(tài)發(fā)生溢位時(shí),設(shè)為1,否則設(shè)為0C 當(dāng)狀態(tài)發(fā)生進(jìn)位或借位時(shí),設(shè)為1,否則設(shè)為0N 當(dāng)Acc狀態(tài)為負(fù)時(shí),設(shè)為1,否則設(shè)為0地址種類
助記符號(hào)說明在[]內(nèi)的參數(shù)是可以設(shè)定的,若全部的參數(shù)都省略了,這個(gè)指令將執(zhí)行無(wú)號(hào)數(shù)-無(wú)號(hào)數(shù)的整數(shù)相乘,并且以沒有round與資料移動(dòng)(data movement)的方式做累加。
有號(hào)數(shù)對(duì)有號(hào)數(shù)[su]有號(hào)數(shù)對(duì)無(wú)號(hào)數(shù)→[X]是有號(hào)數(shù),[Y]是無(wú)號(hào)數(shù)[us]無(wú)號(hào)數(shù)對(duì)有號(hào)數(shù)→[X]是無(wú)號(hào)數(shù),[Y]是有號(hào)數(shù) 無(wú)號(hào)數(shù)對(duì)無(wú)號(hào)數(shù)[r]Rounding機(jī)制為加0x8000到AR并清除ALR[m]資料搬移,在MAC完成后,Xn所指到之資料被搬移到Xn-1[s]完成MAC之運(yùn)算后其值將被map到0x007FFFFFFFF to 0xFF80000000. 將加法以減法取代格式說明KK是4bit,如下表所示,8~5K分辨表
GG是4bit,如下表所示,3~0G分辨表
x和y
例如
MAC Multiply and Accumulate with Rn and Rm語(yǔ)法 MAC.{[ss][us][su][uu]}.[r].[s].[-] Rn,Rm乘法器的兩個(gè)16bit操作數(shù)分別被存放在Rn與Rm中,其累加的值則是放置AR(40bit),當(dāng)[-]被設(shè)定,相乘后與AR相減并存放到AR,若設(shè)定[s]或SOCR.MAS,則累加器的值會(huì)在0xFF80000000~0x007FFFFFFF的范圍內(nèi)。
運(yùn)算tmp=Rn*Rmif(SOCR.FR & ss)tmpn=tmpn-1[n=15...1]If(-)AR=AR-tmpelseAR=AR+tmpif(r){AR=AR+0x8000ARL=0}if(s or SOCR.MAS)Saturate(AR)狀態(tài)旗標(biāo)Z 當(dāng)累加器其運(yùn)算為0時(shí),設(shè)為1,否則設(shè)為0V 當(dāng)狀態(tài)發(fā)生溢位時(shí),設(shè)為1,否則設(shè)為0
C 當(dāng)狀態(tài)發(fā)生進(jìn)位或借位時(shí),設(shè)為1,否則設(shè)為0N 當(dāng)Acc狀態(tài)為負(fù)時(shí),設(shè)為1,否則設(shè)為0地址種類
助記符號(hào)說明在[]內(nèi)的參數(shù)是可以設(shè)定的,若全部的參數(shù)都省略了,這個(gè)指令將執(zhí)行無(wú)號(hào)數(shù)-無(wú)號(hào)數(shù)的整數(shù)相乘,并且以沒有round與資料移動(dòng)(data movement)的方式做累加。
有號(hào)數(shù)對(duì)有號(hào)數(shù)[su]有號(hào)數(shù)對(duì)無(wú)號(hào)數(shù)→[X]是有號(hào)數(shù),[Y]是無(wú)號(hào)數(shù)[us]無(wú)號(hào)數(shù)對(duì)有號(hào)數(shù)→[X]是無(wú)號(hào)數(shù),[Y]是有號(hào)數(shù)[uu]無(wú)號(hào)數(shù)對(duì)無(wú)號(hào)數(shù)[r]Rounding機(jī)制為加0x8000到AR并清除ALR[s]完成MAC之運(yùn)算后其值將被map到0x007FFFFFFFF to 0xFF80000000. 將加法以減法取代格式說明KK是4bit,如下表所示,8~5K分辨表
G分辨表
例如
MULS Multiply Rn and Rm with Options語(yǔ)法 MULS.{[ss][us][su][uu]}.[r].[s] Rn,Rm乘法器的兩個(gè)16bit操作數(shù)分別被存放在Rn與Rm中,其累加的值則是放置AR(40bit),當(dāng)[-]被設(shè)定,相乘后與AR相減并存放到AR,設(shè)定參數(shù)[r]使累加器做round的工作,若設(shè)定[s]或SOCR.MAS,則累加器的值會(huì)在0xFF80000000~0x007FFFFFFF的范圍內(nèi)。
運(yùn)算tmp=Rn*Rmif(SOCR.FR & ss)tmpn=tmpn-1[n=15...1]AR=tmpif(r){AR=AR+0x8000ARL=0}if(s or SOCR.MAS)Saturate(AR)狀態(tài)旗標(biāo)Z 當(dāng)累加器其運(yùn)算為0時(shí),設(shè)為1,否則設(shè)為0V 當(dāng)累加發(fā)生溢位時(shí),設(shè)為1,否則設(shè)為0C 當(dāng)累加發(fā)生進(jìn)位或借位時(shí),設(shè)為1,否則設(shè)為0N 當(dāng)累加器狀態(tài)為負(fù)時(shí),設(shè)為1,否則設(shè)為0地址種類
助記符號(hào)說明在[]內(nèi)的參數(shù)是可以設(shè)定的,若全部的參數(shù)都省略了,這個(gè)指令將執(zhí)行無(wú)號(hào)數(shù)-無(wú)號(hào)數(shù)的整數(shù)相乘,并且以沒有round與資料移動(dòng)(data movement)的方式做累加。
有號(hào)數(shù)對(duì)有號(hào)數(shù)[su]有號(hào)數(shù)對(duì)無(wú)號(hào)數(shù)→[X]是有號(hào)數(shù),[Y]是無(wú)號(hào)數(shù)[us]無(wú)號(hào)數(shù)對(duì)有號(hào)數(shù)→[X]是無(wú)號(hào)數(shù),[Y]是有號(hào)數(shù)[uu]無(wú)號(hào)數(shù)對(duì)無(wú)號(hào)數(shù)[r]Rounding機(jī)制為加0x8000到AR并清除ALR[s]完成MAC之運(yùn)算后其值將被map到0x007FFFFFFFF to 0xFF80000000. 將加法以減法取代格式說明KK是4bit,如下表所示,8~5K分辨表
GG是4bit,如下表所示,3~0
G分辨表
例如
RNDST Round and Saturate the Accumulator語(yǔ)法 RNDST.[r].[s]這個(gè)指令可以對(duì)累加器做round以及saturate的工作,與MAC指令在輸入操作數(shù)均為零的情況下是一樣的。設(shè)定參數(shù)[r]使累加器做round的工作,若設(shè)定[s]或SOCR.MAS,則累加器的值會(huì)在0xFF80000000~0x007FFFFFFF的范圍內(nèi)。
運(yùn)算if(r){AR=AR+0x8000ARL=0}if(s or SOCR.MAS)Saturate(AR)狀態(tài)旗標(biāo)Z 當(dāng)累加器其運(yùn)算為0時(shí),設(shè)為1,否則設(shè)為0V 當(dāng)狀態(tài)發(fā)生溢位時(shí),設(shè)為1,否則設(shè)為0C 當(dāng)狀態(tài)發(fā)生進(jìn)位或借位時(shí),設(shè)為1,否則設(shè)為0N 當(dāng)累加器狀態(tài)為負(fù)時(shí),設(shè)為1,否則設(shè)為0地址種類
助記符號(hào)說明在[]內(nèi)的參數(shù)是可以設(shè)定的,若全部的參數(shù)都省略了,這個(gè)指令將執(zhí)行無(wú)號(hào)數(shù)-無(wú)號(hào)數(shù)的整數(shù)相乘,并且以沒有round與資料移動(dòng)(data movement)的方式做累加。
執(zhí)行不對(duì)運(yùn)算結(jié)果做saturation的MAC運(yùn)算,累加器的結(jié)果會(huì)被限制在0x007FFFFFFFF to 0xFF80000000的范圍內(nèi)。且累加器的值會(huì)被視為有號(hào)資料型態(tài)來(lái)做saturate的處理。
round的運(yùn)算是將AR加上0x8000之后將ARL清除掉。
格式說明KK是4bit,如下表所示,8~5K分辨表
GG是4bit,如下表所示,3~0G分辨表
例如
OR Logical OR語(yǔ)法 OR op1,op2將op1和op2做邏輯上的OR,并將其結(jié)果儲(chǔ)存在op1中。
運(yùn)算 op1=op1 v op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已有設(shè)定,則Z設(shè)成1,否則設(shè)為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V V清為0地址種類
ORB Logical OR語(yǔ)法 ORB op1,op2將op1和op2做邏輯上的OR,并將其結(jié)果儲(chǔ)存在op1中。
運(yùn)算 op1=op1 v op2資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已有設(shè)定,則Z設(shè)成1,否則設(shè)為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0V V清為0地址種類
SUB Integer Subtraction語(yǔ)法 SUB op1,op2op1減op2并將結(jié)果儲(chǔ)存在op1中。
運(yùn)算 op1=op1-op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
SUBB Integer Subtraction(Byte)語(yǔ)法 SUBB op1,op2op1減op2并將結(jié)果儲(chǔ)存在op1中。
運(yùn)算 op1=op1-op2資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
SUBC Integer Subtraction with carry語(yǔ)法 SUBC op1,op2將op1減去op2及其進(jìn)位,再將結(jié)果存入op1中,此指令可以做較精密的運(yùn)算。
運(yùn)算 op1=op1-op2-C資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已被設(shè)定,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
SUBCB Integer Subtraction with carry(Byte)語(yǔ)法 SUBCB op1,op2將op1減去op2及其進(jìn)位,再將結(jié)果存入op1中,此指令可以做較精密的運(yùn)算。
運(yùn)算 op1=op1-op2-C資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0且之前Z已被設(shè)定,則Z設(shè)成1,否則設(shè)為0V 假如運(yùn)算后溢位發(fā)生,則V設(shè)為1,否則設(shè)為0C 假如運(yùn)算后進(jìn)位發(fā)生,則C設(shè)為1,否則設(shè)為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
XOR Logical Exclusive OR語(yǔ)法 XOR op1,op2將op1及op2做Exclusive OR的邏輯運(yùn)算,并將結(jié)果存入op1中。
運(yùn)算 op1=op1op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V V清為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
XORB Logical Exclusive OR(Byte)語(yǔ)法 XOR op1,op2將op1及op2做Exclusive OR的邏輯運(yùn)算,并將結(jié)果存入op1中。
運(yùn)算 op1=op1op2資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V V清為0C C清為0N 假如運(yùn)算后為負(fù)數(shù),則N設(shè)為1,否則設(shè)為0地址種類
移轉(zhuǎn)指令A(yù)SR Arithmetic shift Right語(yǔ)法 ASR op1,op2算數(shù)右移目的字運(yùn)算子op1。運(yùn)算子op2為移動(dòng)的位數(shù)。ASR會(huì)保留原來(lái)運(yùn)算子op1的正負(fù)號(hào)。假設(shè)原來(lái)的最高位為0,則結(jié)果的最高位也會(huì)為0,或假設(shè)原來(lái)的最高位為1,則結(jié)果的最高位也會(huì)為1。溢位旗標(biāo)被用來(lái)當(dāng)作回轉(zhuǎn)旗標(biāo)。最低位會(huì)被允許移到進(jìn)位且移到緩沖器SB上。假設(shè)緩存器op2的內(nèi)容為負(fù),此指令會(huì)和ASL,op1和-op2相等。因?yàn)闆]有指令A(yù)SL的表示,所以可以利用此指令完成保留最高位的左移。
含有負(fù)op2的ASR指令會(huì)變成ASL。最高位將被維持住。假設(shè)和最高位不相同的任何位都會(huì)被移出,則會(huì)造成飽和。這表示假設(shè)op1為負(fù),則結(jié)果會(huì)有0x8000的飽和。假設(shè)op1為正,結(jié)果將會(huì)是0x7FFF。
運(yùn)算 count=op2V=0C=0SB=0if(count<0){ASL op1,-count;左移一個(gè)位end}WHILE(count?。?){V=C v VC=op10
SBn=SBn+1[n=0...14]SB15=op10OP1n=op1n+1[n=0...14]count=count-1}資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假設(shè)任何移動(dòng)動(dòng)作的周期進(jìn)位旗標(biāo)1被移出,則V設(shè)為1,否則設(shè)為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
ROL Rotate Left語(yǔ)法 ROL op1,op2藉由多個(gè)來(lái)源運(yùn)算子op2,將使目的操作數(shù)op1向左轉(zhuǎn)動(dòng)。位15將被轉(zhuǎn)到位0并轉(zhuǎn)到進(jìn)位。移動(dòng)值只有0到15是被允許。當(dāng)使用GPR當(dāng)作計(jì)數(shù)的控制,只有最右邊四各位有被使用。
Operation count←op2C←0WHILE(count>0){C←op115op1n←op1n-1[n=1...15]op10←Ccount←count-1}資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V V清為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
ROR Rotate Right語(yǔ)法 ROR op1,op2藉由多個(gè)來(lái)源運(yùn)算子op2,將使目的操作數(shù)op1向右轉(zhuǎn)動(dòng)。位15將被轉(zhuǎn)到位0并轉(zhuǎn)到進(jìn)位。移動(dòng)值只有0到15是被允許。當(dāng)使用GPR當(dāng)作計(jì)數(shù)的控制,只有最右邊四各位有被使用。
運(yùn)算 count←op2C←0WHIL E(count>0){C←op10op1n←op1n+1[n=0...14]op115←Ccount←count-1}資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V V清為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
SL Shift Left to Shift Buffer語(yǔ)法 SL op1,op2藉由多個(gè)來(lái)源運(yùn)算子op2,將使目的操作數(shù)op1向左移動(dòng)。最后結(jié)果最低位將被填0,最高位移到進(jìn)位和SB。假設(shè)op2是立即地址#imm4,移動(dòng)值只有0到15是被允許的。當(dāng)使用GPR當(dāng)做計(jì)數(shù)控制(op2),移動(dòng)的計(jì)數(shù)可以由-128到127。假設(shè)字節(jié)緩存器op2的內(nèi)容為負(fù),此指令和SR,op1和-op2相同。
運(yùn)算 count←op2C←0V←0SB←0if(count<0){SR op1,-count;Do shift right with-countend}WHILE(count>0){C←op115SBn←SBn-1[n=1...15]SB0←op115op1n←op1n-1[n=1...15]op10←0count←count-1}資料型態(tài) WORD
狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 如果在移位過程中有任何其值為1的位被移出,V將被設(shè)為1,否則則設(shè)為0V 假設(shè)任何移動(dòng)動(dòng)作的周期進(jìn)位旗標(biāo)1被移出,則V設(shè)為1,否則設(shè)為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
SLOSB Shift Left and Logic OR with Shift Buffer語(yǔ)法 SLOSBop1,op2藉由多個(gè)來(lái)源運(yùn)算子op2,將目的操作數(shù)op1向左移動(dòng)。移動(dòng)緩沖器的最低位將被填為0。在移動(dòng)的動(dòng)作后,移動(dòng)操作數(shù)op1會(huì)和移動(dòng)緩沖器(SB)做邏輯OR的運(yùn)算并回存到op1。假設(shè)op2是立即地址#imm4,移動(dòng)值只有0到15是被允許。當(dāng)使用字節(jié)GPR當(dāng)作計(jì)數(shù)控制(op2),移動(dòng)計(jì)數(shù)器可以是-128到127。假設(shè)字節(jié)緩存器op2為負(fù),指令和SR,op1和-op2相同。此動(dòng)作用來(lái)做更精度的移動(dòng)動(dòng)作。
運(yùn)算 count←op2C←0if(count<0){SROSB op1,-count;Do shift right with-countend}WHILE(count>0){C←op115op1n←op1n-1[n=1...15]op10←0count←count-1}op1=op1 v SB資料型態(tài) WORD描述狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假設(shè)任何移動(dòng)動(dòng)作的周期進(jìn)位旗標(biāo)1被移出,則V設(shè)為1,否則設(shè)為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
SR Shift Right to Shift Buffer語(yǔ)法 SR op1,op2藉由多個(gè)來(lái)源運(yùn)算子op2,將移動(dòng)目的字組操作數(shù)op1右移到移動(dòng)緩沖器(SB)。于是結(jié)果的最高位被填零。因?yàn)槲挥乙票硎居杏嘞?,溢位旗?biāo)被回轉(zhuǎn)旗標(biāo)志置換掉。此旗標(biāo)和進(jìn)位旗標(biāo)幫助使用者決定是否余下位失大于、少于或是相等最高位的二分之一。假設(shè)op2是立即地址#imm4,移動(dòng)數(shù)只有介于0到15是被允許的。當(dāng)使用字節(jié)GPR當(dāng)作計(jì)數(shù)控制(op2),移動(dòng)計(jì)數(shù)可以由-128到127。假設(shè)字節(jié)op2的內(nèi)容為負(fù),指令和SL,op1和op2相同。
運(yùn)算 count←op2C←0V←0SB←0if(count<0){SL op1,-count;Do shift left with-countend}WHILE(count>0){V←C v VC←op10op1n←op1n+1[n=0...14]SBn←SBn+1[n=0...14]op115←0SB15←C
count←count-1}資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假設(shè)任何移動(dòng)動(dòng)作的周期進(jìn)位旗標(biāo)1被移出,則V設(shè)為1,否則設(shè)為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
SROSB Shift Right and Logic OR with Shift Buffer語(yǔ)法 SROSBop1,op2藉由多個(gè)來(lái)源運(yùn)算子op2,將目的操作數(shù)op1向右移動(dòng)。在移動(dòng)的動(dòng)作后,移動(dòng)操作數(shù)op1會(huì)和移動(dòng)緩沖器(SB)做邏輯OR的運(yùn)算并回存到op1。于是結(jié)果的最高位被填零。從位右移表示有余下,溢位旗標(biāo)被回轉(zhuǎn)旗標(biāo)志置換掉。此旗標(biāo)和進(jìn)位旗標(biāo)幫助使用者決定是否余下位損失大于、少于或是相等最右邊位的二分之1。此動(dòng)作用來(lái)做倍精度的移動(dòng)動(dòng)作。假設(shè)op2為字節(jié)緩存器op2才能為負(fù),此指令和SR,op1和-op2相等。
運(yùn)算 count←op2C←0V←0if(count<0){SLOSB op1,-count;Do shift left with-countend}WHILE(count>0){V←C v VC←op10op1n←op1n+1[n=0...14]op115←0count←count-1}op1←op1 v SB資料型態(tài) WORD
狀態(tài)旗標(biāo)Z 假如運(yùn)算后其值為0,則Z設(shè)成1,否則設(shè)為0V 假設(shè)任何移動(dòng)動(dòng)作的周期進(jìn)位旗標(biāo)1被移出,則V設(shè)為1,否則設(shè)為0C 假設(shè)op1的最低位1被移出,則進(jìn)位旗標(biāo)將被設(shè)定,否則就清除。當(dāng)移動(dòng)的計(jì)數(shù)為0時(shí)也會(huì)被清除。
N 假設(shè)結(jié)果的最高位被設(shè)定,則N設(shè)成1,否則設(shè)為0地址種類
位運(yùn)算指令BAND Bit AND語(yǔ)法 BAND op1,op2單一位的op1和op2作邏輯上的AND運(yùn)算,并將其結(jié)果儲(chǔ)存于op1。
運(yùn)算 op1=op1^op2資料型態(tài) BIT狀態(tài)旗標(biāo)Z 兩個(gè)位做邏輯上的NORC 兩個(gè)位做邏輯上的ANDN 兩個(gè)位做邏輯上的XORV 兩個(gè)位做邏輯上的OR地址種類
注意事項(xiàng)Z.z bitoff.bitpos (bitoff0~255,bitpos0~15)
BCLR Bit Clear語(yǔ)法 BCLR op1清除op1上的資料,這個(gè)指令使用在計(jì)算機(jī)外設(shè)設(shè)備及系統(tǒng)的控制上。
運(yùn)算 op1=0資料型態(tài) BIT狀態(tài)旗標(biāo)Z 包含先前狀態(tài)特定位的負(fù)邏輯C C清為0N 包含先前狀態(tài)的特定位V V清為0地址種類
BCMP Bit Compare語(yǔ)法 BCMP op1,op2Op1及op2的單一位比較。比較結(jié)果并不會(huì)被記錄下來(lái),只有狀態(tài)旗標(biāo)會(huì)更新。
運(yùn)算 op1<compare>op2資料型態(tài) BIT狀態(tài)旗標(biāo)Z 兩個(gè)位做邏輯上的NORC 兩個(gè)位做邏輯上的ANDN 兩個(gè)位做邏輯上的XORV 兩個(gè)位做邏輯上的OR地址種類
BMOV Bit to Bit Move語(yǔ)法 BMOV op1,op2將位op2上的單一位移到位op1上。
運(yùn)算 op1=op2資料型態(tài) BIT狀態(tài)旗標(biāo)Z 包含先前狀態(tài)特定位的負(fù)邏輯C C清為0N 包含先前狀態(tài)的特定位V V清為0地址種類
BMOVN Bit to Bit Move and Negate語(yǔ)法 BMOVN op1,op2將位op2的補(bǔ)碼放入位op1中。
運(yùn)算 op1=﹁op2資料型態(tài) BIT狀態(tài)旗標(biāo)Z 包含先前狀態(tài)特定位的負(fù)邏輯C C清為0N 包含先前狀態(tài)的特定位V V清為0地址種類
BOR Bit Logical OR語(yǔ)法 BOR op1,op2將位op2的資料做邏輯上的OR運(yùn)算后儲(chǔ)存在位op1中。
運(yùn)算 op1=op1 v op2資料型態(tài) BIT狀態(tài)旗標(biāo)Z 兩個(gè)位做邏輯上的NORC 兩個(gè)位做邏輯上的ANDN 兩個(gè)位做邏輯上的XORV 兩個(gè)位做邏輯上的OR地址種類
BSET Bit Set語(yǔ)法 BSET op1將位op1的資料設(shè)為1。
運(yùn)算 op1=1資料型態(tài) BIT狀態(tài)旗標(biāo)Z 包含先前狀態(tài)特定位的負(fù)邏輯C C清為0N 包含先前狀態(tài)的特定位V V清為0地址種類
BXOR Bit Logical XOR語(yǔ)法 BXOR op1,op2將位op2及位op1做邏輯上的XOR運(yùn)算,并將結(jié)果儲(chǔ)存在位op1上。
運(yùn)算 op1=op1op2資料型態(tài) BIT狀態(tài)旗標(biāo)Z 兩個(gè)位做邏輯上的NORC 兩個(gè)位做邏輯上的ANDN 兩個(gè)位做邏輯上的XORV 兩個(gè)位做邏輯上的OR地址種類
程序分支指令A(yù)CALL Absolute Conditional Call語(yǔ)法 ACALL cc,addr當(dāng)cc狀態(tài)為真,執(zhí)行時(shí)會(huì)跳到物理內(nèi)存位置addr。PC的值將會(huì)被堆入堆棧中,其值會(huì)回傳到程序的地址上。當(dāng)狀態(tài)不為真,將不會(huì)有任何動(dòng)作,并執(zhí)行下一個(gè)指令。
運(yùn)算 if(cc)thenSP=SP-2(SP)=PCPC=addrelse next instruction狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
SCALL Far Segmented Call語(yǔ)法 SCALL seg,addr此為無(wú)條件分支指令,seg與地址addr形成24位的實(shí)體地址。CS和PC的值會(huì)被堆到堆棧中。運(yùn)算子seg指定給CS,運(yùn)算子addr指定給PC。執(zhí)行時(shí),將會(huì)跳到新的CS和PC。而RETS這個(gè)指令被用來(lái)返回到呼叫的程序。
運(yùn)算 SP=SP-2(SP)=PCSP=SP-2(SP)=CSCS=segPC=addrelse next instruction狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
注意事項(xiàng)MM MM為目的地址的16位立即尋址SS區(qū)段數(shù)目8-位(0~255)
ICALL Indirect Conditional Call Subroutine語(yǔ)法 ICALL cc,[Rn]當(dāng)cc狀態(tài)為真,將會(huì)跳到第二個(gè)運(yùn)算子[Rn]的內(nèi)容所指到的間接位置。PC會(huì)推到堆棧中。當(dāng)狀態(tài)不為真,將不會(huì)有動(dòng)作而下個(gè)指令會(huì)執(zhí)行。指令RET被用來(lái)回到呼叫程序。要注意的是,目的地址是被Rn所指的內(nèi)存內(nèi)容,而不是指Rn本身。
運(yùn)算 if op1 thenSP=SP-2(SP)=PCPC=((Rn))else next instruction狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
RCALL Relative Call Subroutine語(yǔ)法 RCALL rel分支跳到PC的位置加上相對(duì)位移(rel)。rel是包含正負(fù)號(hào)的2’s補(bǔ)碼并計(jì)算字之間的相對(duì)位移,PC被推到堆棧中。目的地址計(jì)算的PC值是跟在指令RCALL后的指令地址。
運(yùn)算 SP=SP-2(SP)=PCPC=PC+rel*2else next instruction狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
JB Relative Jump if Bit Set語(yǔ)法 JB op1,op2假設(shè)op1位被設(shè)定,執(zhí)行時(shí)將會(huì)跳到程序計(jì)數(shù)器PC再加上特定位移op2。位移量是二的補(bǔ)碼包含正負(fù)計(jì)算相對(duì)位移。目的地址計(jì)算的PC值是跟在指令JB后的指令地址。假設(shè)特定位被清除,在指令JB后的下一個(gè)指令會(huì)被執(zhí)行。
運(yùn)算 if op1 thenPC=PC+op2else next instruction資料型態(tài) BIT狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
注意事項(xiàng)ZZ8位的bitoffz4位的位地址rr相對(duì)值(含正負(fù))
JBC Relative Jump if Bit Set & Clear Bit語(yǔ)法 JBC op1,op2這指令被用來(lái)實(shí)現(xiàn)訊號(hào)的算法Test,Set和Jump。假設(shè)op1位為1,程序執(zhí)行跳躍到程序計(jì)數(shù)器再加特定位移op2。此位移量為二的補(bǔ)碼包含正負(fù)計(jì)算相對(duì)位移,op1位將被清除。目的地址計(jì)算的PC值是跟在指令JBC后的指令地址。假設(shè)特定位被清除,在指令JBC后的指令被執(zhí)行。
運(yùn)算 if op1 thenop1=0PC=PC+op2else next instruction資料型態(tài) BIT狀態(tài)旗標(biāo)Z 包含先前狀態(tài)特定位的負(fù)邏輯C C清為0N 包含先前狀態(tài)的特定位V V清為0地址種類
JNB Relative Jump if Bit Clear語(yǔ)法 JNB op1,op2假設(shè)op1位被清除,程序執(zhí)行將會(huì)分支到程序計(jì)數(shù)器PC再加上特定位移op2。位移量為二的補(bǔ)碼包含正負(fù)計(jì)算相對(duì)位移。目的地址計(jì)算的PC值是跟在指令JNB后的指令地址。假設(shè)特定位被設(shè)定,在指令JNB后的指令將持續(xù)被正常執(zhí)行。
運(yùn)算 if op1=0 thenPC=PC+op2else next instruction資料型態(tài) BIT狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
JNBS Relative Jump if Bit Clear and Set Bit語(yǔ)法 JNBS op1,op2假設(shè)op1位被清除,程序在程序計(jì)數(shù)器PC加特定位移op2的位置繼續(xù)執(zhí)行。位移量為的補(bǔ)碼含正負(fù)計(jì)算相對(duì)位移,位op1被設(shè)定。目的地址計(jì)算的PC值是跟在指令JNBC后的指令地址。假設(shè)特定位被設(shè)定,指令JNBC后的指令將持續(xù)正常執(zhí)行。
運(yùn)算 if op1=0 thenop1=1PC=PC+op2else next instruction資料型態(tài) BIT狀態(tài)旗標(biāo)Z 包含先前狀態(tài)特殊位的負(fù)邏輯C 通常被清除N 包含先前狀態(tài)的特殊位V 通常被清除地址種類
AJMP Absolute conditional Jump語(yǔ)法 AJMP op1,op2假設(shè)op1為真,將發(fā)生分支跳躍到實(shí)體地址op2。若不為真,在指令A(yù)JMP后的指令將被正常執(zhí)行。
運(yùn)算 if op1=1 thenPC=op2else next instruction狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
IJMP Indirect conditional Jump語(yǔ)法 IJMP op1,op2假設(shè)op1為真,將發(fā)生分支跳躍到實(shí)體地址op2。若不為真,將不會(huì)有動(dòng)作發(fā)生且在指令I(lǐng)JMP后的指令將被正常執(zhí)行。
運(yùn)算 if op1=1 thenPC=op2else next instruction描述狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
RJMP Relative conditional Jump語(yǔ)法 RJMP op1,op2假設(shè)op1為真,程序?qū)⒃诔绦蛴?jì)數(shù)器PC再加特定位移op2的位置繼續(xù)執(zhí)行。位移量為二的補(bǔ)碼包含正負(fù)計(jì)算相對(duì)位移。目的地址計(jì)算的PC值是跟在指令RJMP后的指令地址。若特定情況不為真,在指令RJMP后的指令將持續(xù)正常執(zhí)行。
運(yùn)算 if op1=1 thenPC=PC+op2*2else next instruction狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
SJMP Far Segmented Jump語(yǔ)法 SJMP op1,op2無(wú)條件的將程序計(jì)數(shù)器地址跳到op1op2所形成的24位實(shí)體地址上運(yùn)算CS=op1PC=op2狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
RET Return from Subroutine語(yǔ)法 RET回到主程序。當(dāng)PC執(zhí)行完子程序時(shí),執(zhí)行RET指令,PC將從系統(tǒng)堆棧取出并且從原指令CALL的下一個(gè)指令繼續(xù)執(zhí)行程序。
運(yùn)算 PC=(SP)SP=SP+2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
RETI Return from Interrupt Routine語(yǔ)法 RETI由中斷程序返回。程序計(jì)數(shù)器(PC)由系統(tǒng)堆棧中取出。SOCR內(nèi)的SEG旗標(biāo)用以檢視是否處于區(qū)段模式(segment mode)。若是處于區(qū)段模式,額外的字節(jié)會(huì)被取出至CS。在中斷之后會(huì)回到中斷指令的下一個(gè)指令繼續(xù)執(zhí)行。
運(yùn)算 PSR=(SP)SP=SP+2if(SOCR.NSEG=0){CS=(SP)SP=SP+2}PC=(SP)SP=SP+2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
RETS Return from Far Segmented Call語(yǔ)法 RETS由遠(yuǎn)程子程序返回。程序計(jì)數(shù)器(PC)由系統(tǒng)堆棧取出,一個(gè)額外的字節(jié)也會(huì)被取出至CS。程序會(huì)由SCALL指令后的下一個(gè)指令繼續(xù)執(zhí)行。
運(yùn)算 CS=(SP)SP=SP+2PC=(SP)SP=SP+2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 不受影響C 不受影響N 不受影響V 不受影響地址種類
比較指令CMP Integer Compare語(yǔ)法 CMP op1,op2藉由2的補(bǔ)碼二進(jìn)制的op1減去op2達(dá)到二數(shù)比較的運(yùn)算。狀態(tài)旗標(biāo)是根據(jù)減法規(guī)則來(lái)設(shè)定,且操作數(shù)保持不變。
運(yùn)算 op1<compare>op2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 若結(jié)果為0,設(shè)為1,否則設(shè)為0。
C 若產(chǎn)生借位,設(shè)為1,否則設(shè)為0。
N 若最高位為1,設(shè)為1,否則設(shè)為0。
V 若發(fā)生溢位,及該資料型態(tài)無(wú)法表示該結(jié)果,設(shè)為1,否則設(shè)為0。
地址種類
CMPB Integer Byte Compare語(yǔ)法 CMPB op1,op2藉由2的補(bǔ)碼二進(jìn)制的op1減去op2達(dá)到二數(shù)比較的運(yùn)算。狀態(tài)旗標(biāo)是根據(jù)減法規(guī)則來(lái)設(shè)定,且操作數(shù)保持不變。
運(yùn)算 op1<compare>op2資料型態(tài) BYTE狀態(tài)旗標(biāo)Z 若結(jié)果為0,設(shè)為1,否則設(shè)為0。
C 若產(chǎn)生借位,設(shè)為1,否則設(shè)為0。
N 若最高位為1,設(shè)為1,否則設(shè)為0。
V 若發(fā)生溢位,及該資料型態(tài)無(wú)法表示該結(jié)果,設(shè)為1,否則設(shè)為0。
地址種類
CMPD1 Integer Compare and decrement by 1語(yǔ)法 CMPD1 op1,op2這個(gè)指令是用來(lái)增加循環(huán)的性能與彈性的。藉由二的補(bǔ)碼二進(jìn)制的op1減去op2達(dá)到二數(shù)比較的運(yùn)算。減法運(yùn)算完成后,op1會(huì)減去1。
運(yùn)算 op1<compare>op2op1=op1-1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 若結(jié)果為0,設(shè)為1,否則設(shè)為0。
C 若產(chǎn)生借位,設(shè)為1,否則設(shè)為0。
N 若最高位為1,設(shè)為1,否則設(shè)為0。
V 若發(fā)生溢位,及該資料型態(tài)無(wú)法表示該結(jié)果,設(shè)為1,否則設(shè)為0。
地址種類
CMPD2 Integer Compare and decrement by 2語(yǔ)法 CMPD2 op1,op2這個(gè)指令是用來(lái)增加循環(huán)的性能與彈性的。藉由二的補(bǔ)碼二進(jìn)制的op1減去op2達(dá)到二數(shù)比較的運(yùn)算。減法運(yùn)算完成后,op1會(huì)減去2。
運(yùn)算op1<compare>op2op1=op1-2資料型態(tài) WORD狀態(tài)旗標(biāo)Z 若結(jié)果為0,設(shè)為1,否則設(shè)為0。
C 若產(chǎn)生借位,設(shè)為1,否則設(shè)為0。
N 若最高位為1,設(shè)為1,否則設(shè)為0。
V 若發(fā)生溢位,及該資料型態(tài)無(wú)法表示該結(jié)果,設(shè)為1,否則設(shè)為0。
地址種類
CMPI1 Integer Compare and increment by 1語(yǔ)法 CMPI1 op1,op2這個(gè)指令是用來(lái)增加循環(huán)的性能與彈性的。藉由二的補(bǔ)碼二進(jìn)制的op1減去op2達(dá)到二數(shù)比較的運(yùn)算。減法運(yùn)算完成后,op1會(huì)加1。
運(yùn)算op1<compare>op2op1=op1+1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 若結(jié)果為0,設(shè)為1,否則設(shè)為0。
C 若產(chǎn)生借位,設(shè)為1,否則設(shè)為0。
N 若最高位為1,設(shè)為1,否則設(shè)為0。
V 若發(fā)生溢位,及該資料型態(tài)無(wú)法表示該結(jié)果,設(shè)為1,否則設(shè)為0。
地址種類
CMPI2 Integer Compare and increment by 2語(yǔ)法 CMPI2 op1,op2這個(gè)指令是用來(lái)增加循環(huán)的性能與彈性的。藉由二的補(bǔ)碼二進(jìn)制的op1減去op2達(dá)到二數(shù)比較的運(yùn)算。減法運(yùn)算完成后,op1會(huì)加2。
運(yùn)算op1<compare>op2op1=op1+2資料型態(tài)WORD狀態(tài)旗標(biāo)Z 若結(jié)果為0,設(shè)為1,否則設(shè)為0。
C 若產(chǎn)生借位,設(shè)為1,否則設(shè)為0。
N 若最高位為1,設(shè)為1,否則設(shè)為0。
V 若發(fā)生溢位,及該資料型態(tài)無(wú)法表示該結(jié)果,設(shè)為1,否則設(shè)為0。
地址種類
數(shù)據(jù)移轉(zhuǎn)指令EXCH Exchange Two Register Data語(yǔ)法 EXCH op1,op2將op1跟op2得資料做交換。
運(yùn)算temp=op2op2=op1op1=temp資料型態(tài) WORD狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
MOV Move Data語(yǔ)法 MOV op1,op2將op2的資料移動(dòng)到op1中。
運(yùn)算 op1=op2資料型態(tài) WORD狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
MOVB Move Byte Data語(yǔ)法 MOVB op1,op2將op2的資料移動(dòng)到op1中。
運(yùn)算 op1=op2資料型態(tài) BYTE狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
MOVSE Move Byte Data to Word with Sign Extended語(yǔ)法 MOVSE op1,op2將op2中的位資料移動(dòng)并做標(biāo)記到op1中。
運(yùn)算 op1=op2資料型態(tài) BYTE→WORD狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
MOVZE Move Byte Data to Word with Zero Extended語(yǔ)法 MOVZE op1,op2將op2中的位資料移動(dòng)op1中并將op2歸零。
運(yùn)算 op1=op2資料型態(tài) BYTE→WORD狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
MISC指令EDS Exponential Derivation for Signed Operand語(yǔ)法 EDS op1找到op1的第一個(gè)非符號(hào)的位即為其最顯著的位并開始往下計(jì)數(shù)到最低的位,而位的數(shù)目將儲(chǔ)存于SE緩存器,這個(gè)指令并不會(huì)改變op1的數(shù)值。
運(yùn)算 temp=op1count=0sbit=temp15WHILE(sbit=temp15 && count<16){temp=temp<<1count=count+1}SE=count-1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如op1為0,則Z設(shè)成1,否則Z設(shè)為0C C清為0N N清為0V V清為0地址種類
EDU Exponential Derivation for Unsigned Operand語(yǔ)法 EDU op1找到op1的第一個(gè)”1”的位即從其最左邊最高的位并開始往右尋找到最低的位,而位值為0的數(shù)目將儲(chǔ)存于SE緩存器。
運(yùn)算 temp=op1count=0WHILE(!(temp&0x8000)&& count<16){temp=temp<<1count=count+1}SE=count資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如op1為0,則Z設(shè)成1,反之,則Z設(shè)為0C C清為0N N清為0V V清為0地址種類
BEDS Block Exponent Derivation for Signed Operand語(yǔ)法 BEDS op1這個(gè)指令的目的是在延伸在浮點(diǎn)數(shù)中組合許多數(shù)字的羃,當(dāng)執(zhí)行一連串的數(shù)字之后,此指令可以有效的在廣大的數(shù)目中找到真正的值,此指令在op1中找到的第一個(gè)非符號(hào)的位即為其最高的位并開始往下計(jì)數(shù)到最低的位,位數(shù)目的結(jié)果會(huì)與SE做比較,如果結(jié)果小于SE界會(huì)將結(jié)果儲(chǔ)存于SE中,為保證程序可以正確的進(jìn)行運(yùn)算,在運(yùn)算前需將16儲(chǔ)存在SE緩存器中,而這個(gè)指令并不會(huì)改變op1的值。
運(yùn)算 temp=op1count=0sbit=temp15WHILE(sbit=temp15&& count<16){temp=temp<<1count=count+1}if(SE>(count-1))SE=count-1資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如op2為0,則Z設(shè)成1,否則Z設(shè)為0C C清為0N N清為0V V清為0
地址種類
BEDU Block Exponent Derivation for Unsigned Operand語(yǔ)法 BEDU op1這個(gè)指令的目的是在延伸在浮點(diǎn)數(shù)中組合許多數(shù)字的羃,當(dāng)執(zhí)行一連串的數(shù)字之后,此指令可以有效的在廣大的數(shù)目中找到真正的值,找到op1的第一個(gè)”1”的位即為其最顯著的位并開始往下計(jì)數(shù)到最低的位,位數(shù)目的結(jié)果會(huì)與SE做比較,如果結(jié)果小于SE界會(huì)將結(jié)果儲(chǔ)存于SE中,為保證程序可以正確的進(jìn)行運(yùn)算,在運(yùn)算前需將16儲(chǔ)存在SE緩存器中,而這個(gè)指令并不會(huì)改變op1的值。
運(yùn)算 temp=op1count=0WHILE(!(temp&0x8000)&& count<16){temp=temp<<1count=count+1}if(SE>count)SE=count資料型態(tài) WORD狀態(tài)旗標(biāo)Z 假如op2為0,則Z設(shè)成1,否則Z設(shè)為0C C清為0N N清為0V V清為0
地址種類
CRIT Start Critical Instructions Sequence語(yǔ)法 CRIT op1開啟一連串的指令序列。硬件的中斷將會(huì)被阻文件op1個(gè)指令,CRIT指令的目的是解決多任務(wù)時(shí)關(guān)鍵區(qū)(critical section)的問題。
運(yùn)算 count=op1Disable interruptsWHILE(count?。?){execute next instructioncount=count-1}Enable interrupts狀態(tài)旗標(biāo)Z 不會(huì)影響C 不會(huì)影響N 不會(huì)影響V 不會(huì)影響地址種類
IGNDS Ignore DS Address Calculation語(yǔ)法 IGNDS op1開始不連結(jié)DS與資料地址上的一連串計(jì)算指令。mem地址的計(jì)算將不再與DS0/DS1結(jié)合,請(qǐng)參考1-3-2章。并且在op1個(gè)指令間,硬件的中斷將不允許發(fā)生。
運(yùn)算 count=op1Disable interruptsWHILE(count?。?){Execute next instruction with no DS0/DS1 calculationcount=count-1}Enable interrupts狀態(tài)旗標(biāo)Z 不會(huì)影響C 不會(huì)影響N 不會(huì)影響V 不會(huì)影響地址種類
RESET Software Reset語(yǔ)法 RESET這個(gè)指令是讓DMCU重置,所有的緩存器會(huì)被重置到初始設(shè)定值,而內(nèi)存內(nèi)容不會(huì)改變。
運(yùn)算 完全的重置狀態(tài)旗標(biāo)Z 不會(huì)影響C 不會(huì)影響N 不會(huì)影響V 不會(huì)影響地址種類
LINK Allocate Stack Frame語(yǔ)法 LINK op1這個(gè)指令將根據(jù)op1配置堆棧大小,將FP的數(shù)據(jù)放進(jìn)堆棧中,并更新目前的堆棧位置并以op1為重置要件,之后堆棧架構(gòu)的配置被完成,這個(gè)指令可支持最大255個(gè)word大小的堆棧架構(gòu)。
運(yùn)算 SP=SP-2;(SP)=FPFP=SPSP=SP-op1*2狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
格式說明tt8位的常數(shù)資料
NOP No Operation語(yǔ)法 NOP這個(gè)指令執(zhí)行一個(gè)完全無(wú)動(dòng)作的指令。
運(yùn)算 無(wú)狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
POP Pop One Word from Stack語(yǔ)法 POP op1自堆棧頂端取出數(shù)據(jù)存入op1中然后將SP加2。若op1是常用的緩存器則此指令相當(dāng)?shù)扔贛OV指令,若op1是SFR,其緩存器地址為00~7F范圍內(nèi)才可使用此指令。
運(yùn)算 op1=(SP)SP=SP+2資料型態(tài) WORD狀態(tài)旗標(biāo)任何情況皆不會(huì)影響執(zhí)行若op1為GPR,則此指令的應(yīng)用相當(dāng)?shù)扔趨R編語(yǔ)言中MOV的動(dòng)作,其指令如下MOV Rn,[SP++]若op1為SFR(00~7F),則其地址種類如下地址種類
注意事項(xiàng)rrrrrrr緩存器地址00~7F
PUSH Push One Word onto Stack語(yǔ)法 PUSH op1將堆棧減2之后,將op1內(nèi)的數(shù)據(jù)移動(dòng)到堆棧中,若op1是常用的緩存器則此指令相當(dāng)?shù)扔贛OV指令,若op1是SFR,其緩存器地址為00~7F范圍內(nèi)才可使用此指令。
運(yùn)算 SP=SP-2(SP)=op1資料型態(tài) WORD狀態(tài)旗標(biāo)任何情況皆不會(huì)影響執(zhí)行若op1為GPR,則此指令的應(yīng)用相當(dāng)?shù)扔趨R編語(yǔ)言中MOV的動(dòng)作,其指令如下MOV [--SP],op1若op1為SFR(00~7F),則其地址種類如下地址種類
注意事項(xiàng)rrrrrrr緩存器地址00~7F
REP Repeat the Next Instruction語(yǔ)法 REP op1執(zhí)行op1次下一個(gè)指令。這下一個(gè)指令不能是分支,條件分支或call/return指令。若這個(gè)位置沒有任何有效指令,則會(huì)有一個(gè)IREP的例外產(chǎn)生。這個(gè)重復(fù)指令至少會(huì)執(zhí)行一次(當(dāng)op1=0),因此執(zhí)行的次數(shù)為op1+1次。
重復(fù)指令只能于正常處理模式內(nèi)使用。在例外或中斷程序下,這個(gè)指令是不能使用的。當(dāng)這個(gè)重復(fù)指令在中斷或例外內(nèi)執(zhí)行,則當(dāng)該中斷或例外被執(zhí)行時(shí),SRC會(huì)保存其值。由服務(wù)例程返回后,CIRQ位在PSR 0位置時(shí),SRC會(huì)再次被使用,且繼續(xù)重復(fù)執(zhí)行指令。
相同的限制在重復(fù)使用的指令上,如下表所示
如果這些指令在REP之后被使用,將會(huì)產(chǎn)生IREP。
運(yùn)算 SRC=op1+1DO{Execute next instructionif(SRC>0)SRC=SRC-1}WHILE(SRC>0)ENDWHILE
狀態(tài)旗標(biāo)Z 不會(huì)影響C 不會(huì)影響N 不會(huì)影響V 不會(huì)影響地址種類
REPB Repeat a Block of Instructions語(yǔ)法 REPB op1,op2執(zhí)行op1次下一個(gè)指令。這下一個(gè)指令不能是分支,條件分支或call/return指令。若這個(gè)位置沒有任何指令,則會(huì)有一個(gè)IREP的例外產(chǎn)生。這個(gè)重復(fù)指令至少會(huì)執(zhí)行一次(當(dāng)op1=0),因此執(zhí)行的次數(shù)為op1+1次。
重復(fù)指令只能于正常處理模式內(nèi)使用。在例外或中斷程序下,這個(gè)指令是不能使用的。當(dāng)這個(gè)重復(fù)指令在中斷或例外內(nèi)執(zhí)行,則當(dāng)該中斷或例外被執(zhí)行時(shí),SRC會(huì)保存其值。由服務(wù)例程返回后,CIRQ位在PSR 0位置時(shí),SRC會(huì)再次被使用,且繼續(xù)重復(fù)執(zhí)行指令。
運(yùn)算 RC=op1+1 //Repeat counter RC is a 16-bit counterRS=Next instruction address//Start of the blockRE=op2//End of the blockDO{Execute next instruction block until(PC=RE)if(PC=RE and RC>0){//do a 16-bit compareRC=RC-1PC=RS}}while(RC>0)END WHILE狀態(tài)旗標(biāo)Z 不會(huì)影響
C 不會(huì)影響N 不會(huì)影響V 不會(huì)影響地址種類
格式說明ee ee經(jīng)過繁鎖編碼后之16位的立即目的地址##用來(lái)表示重復(fù)記數(shù)的8位立即尋址
TRAP Software Trap語(yǔ)法 TRAP op1產(chǎn)生運(yùn)算子op1的中斷號(hào)碼的中斷,這意味程序?qū)⑻猎撝袛嗵?hào)碼的向量表地址,此程序可以由軟件呼叫或是硬件呼叫,此為軟件仿真硬件中斷,中斷的優(yōu)先結(jié)構(gòu)不被改變,RETI負(fù)責(zé)在中止或中斷完成后返回暫停的程序,CS將被push并且NSEG在SOCR中將被設(shè)定。
運(yùn)算 SP=SP-2(SP)=PCIf(SOCR.NSEG=0)THENSP=SP-2(SP)=CSCS=1END IFSP=SP-2(SP)=PSRPC=zero_extend(op1*4)狀態(tài)旗標(biāo)Z 不會(huì)影響C 不會(huì)影響N 不會(huì)影響V 不會(huì)影響地址種類
UNLINK De-allocate Stack Frame語(yǔ)法 UNLINK指令de-allocates是一種堆棧架構(gòu),由一連串的子程序所完成,這種堆棧架構(gòu)由LINK指令來(lái)分派,而UNLINK指令則用來(lái)調(diào)整執(zhí)行LINK指令前讓FP和SP回到堆棧中。
運(yùn)算 SP=FPFP=(SP)SP=SP+2;狀態(tài)旗標(biāo)任何情況皆不會(huì)影響地址種類
權(quán)利要求
1.一種整合式數(shù)據(jù)處理器,其特征在于,包含一運(yùn)算單元,是負(fù)責(zé)執(zhí)行數(shù)據(jù)演算的主要核心單元,該運(yùn)算單元連接有一共享數(shù)據(jù)總線及一Y數(shù)據(jù)總線,其中該共享數(shù)據(jù)總線連接一X地址產(chǎn)生器、一數(shù)據(jù)擷取單元及一緩存器單元,而該Y數(shù)據(jù)總線是連接至一內(nèi)部Y內(nèi)存;一內(nèi)存并行總線接口,是連接至前述數(shù)據(jù)擷取單元與一指示擷取單元,該內(nèi)存并行總線接口是連接一內(nèi)部程序內(nèi)存、一內(nèi)部X內(nèi)存、一外部?jī)?nèi)存及外圍裝置,該內(nèi)存并行總線接口可利用管線式運(yùn)算方式同步處理數(shù)據(jù)傳輸及擷取指令,以提高該處理器的運(yùn)算平行度;又前述內(nèi)存并行總線接口是包含一數(shù)據(jù)傳輸單元及一中斷控制器,以該中斷處理器于中斷要求發(fā)生時(shí)負(fù)責(zé)處理;一Y地址產(chǎn)生器,是連接至前述緩存器單元及內(nèi)部Y內(nèi)存。
2.如權(quán)利要求第1項(xiàng)所述整合式數(shù)據(jù)處理器,其特征在于,該內(nèi)存并行總線接口所執(zhí)行的管線式運(yùn)算方式是包含有指令擷取、譯碼、執(zhí)行及回寫四階段,其中讀出/寫入的動(dòng)作是分布在不同階段。
3.如權(quán)利要求第2項(xiàng)所述整合式數(shù)據(jù)處理器,該四階段包含第一階段指令是由內(nèi)存或由指令緩沖器中取出;第二階段譯碼該指令,可同時(shí)計(jì)算操作數(shù)位置并自內(nèi)存中擷取出操作數(shù);第三階段前述運(yùn)算單元依據(jù)指令類別對(duì)該操作數(shù)執(zhí)行計(jì)算;第四階段將前一階段的計(jì)算結(jié)果寫入至一目標(biāo)內(nèi)存地址。
4.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該指令擷取單元是連接一指令譯碼/控制單元,該指令譯碼/控制單元是針對(duì)指令擷取單元擷取到的編碼指令進(jìn)行譯碼動(dòng)作,并產(chǎn)生管線式運(yùn)算控制指令。
5.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該運(yùn)算單元于同一周期中,可向該內(nèi)部X內(nèi)存及內(nèi)部Y內(nèi)存中取得兩操作數(shù),以提供乘法累加演算所須。
6.如權(quán)利要求第5項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該X地址產(chǎn)生器及Y地址產(chǎn)生器是可同時(shí)產(chǎn)生兩地址,藉以因應(yīng)乘法累加(MAC)演算。
7.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該X地址產(chǎn)生器及Y地址產(chǎn)生器是支持線性尋址及環(huán)式緩沖尋址。
8.如權(quán)利要求第7項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該X地址產(chǎn)生器及是更支持位交換。
9.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該緩存器單元包含一般緩存器、累加緩存器、索引緩存器、框指針器及堆棧指針器。
10.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該緩存器單元包含特殊緩存器,該特殊緩存器包含系統(tǒng)選項(xiàng)控制緩存器、程序狀態(tài)緩存器及堆棧溢出/下溢緩存器。
11.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該運(yùn)算單元中是包含一乘法累加單元,該乘法累加單元是于單一周期中完成乘法及累加運(yùn)算,其中該乘法累加單元接收來(lái)自緩存器所指引的兩筆16bit的數(shù)據(jù),于單一周期中執(zhí)行乘法運(yùn)算,其結(jié)果是經(jīng)由1-bit的移位緩存器執(zhí)行移位運(yùn)算,再送入至一40bit的加法器,與一累加器的前一次輸出結(jié)果相加。
12.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該中斷控制器(52)包含有中斷控制緩存器群,該中斷控制緩存器群是可設(shè)定中斷擱置、中斷等級(jí)及中斷要求的優(yōu)先級(jí)。
13.如權(quán)利要求第1項(xiàng)所述的整合式數(shù)據(jù)處理器,其特征在于,該數(shù)據(jù)傳輸單元包含有四組信道,各信道是對(duì)應(yīng)一數(shù)據(jù)傳輸單元控制緩存器。
全文摘要
本發(fā)明是為一種整合式數(shù)據(jù)處理器,是融合微處理器(MCU)及數(shù)字信號(hào)處理器(DSP)兩者功能,使用其獨(dú)創(chuàng)的指令群及管線式(pipeline)平行處理架構(gòu),其中管線式平行處理是刻意令讀出/寫入動(dòng)作于不同階段執(zhí)行,以在單一周期(single cycle)里即完成一指令的執(zhí)行,可自內(nèi)存中取出一操作數(shù)(operand)并將執(zhí)行完畢的計(jì)算結(jié)果寫回至內(nèi)存中,以提升該處理器的作業(yè)效率。
文檔編號(hào)G06F9/38GK1916884SQ20051009320
公開日2007年2月21日 申請(qǐng)日期2005年8月19日 優(yōu)先權(quán)日2005年8月19日
發(fā)明者施養(yǎng)明, 貢培良 申請(qǐng)人:駿億電子股份有限公司