專利名稱:基于用戶描述的匯編器及其實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)技術(shù)領(lǐng)域的系統(tǒng)及其實(shí)現(xiàn)方法,具體是一種基于用戶 描述的匯編器及其實(shí)現(xiàn)方法。
技術(shù)背景匯編器是編譯系統(tǒng)中重要的組成部分,其主要功能是將用匯編語言編寫的源 程序轉(zhuǎn)換成二進(jìn)制形式的目標(biāo)文件。匯編器的輸入為匯編語言程序,這些程序可 以是編譯器的輸出結(jié)果,也可能是手寫的匯編語言程序。匯編器的輸出為二進(jìn)制 的目標(biāo)文件?,F(xiàn)有的匯編器的設(shè)計(jì)與實(shí)現(xiàn)中,對(duì)于不同的指令集體系結(jié)構(gòu)(以下簡稱ISA) 就要開發(fā)不同的匯編器以滿足不同處理器的要求,這樣使得開發(fā)新的處理器的時(shí) 候,就要重新開發(fā)與之相應(yīng)的匯編器。當(dāng)前,匯編器一般隨相應(yīng)的處理器的開發(fā) 而協(xié)同開發(fā)。不同的處理器在指令字長,指令編碼方式,寄存器設(shè)置等方面都有 所不同,使得匯編器在實(shí)現(xiàn)和結(jié)構(gòu)上有很大的不同。另外,因?yàn)樵O(shè)計(jì)思想的差異 也會(huì)產(chǎn)生的匯編器在實(shí)現(xiàn)和方法上的不同。處理器的配置不同以及設(shè)計(jì)思想的不 同而造成了不同ISA的匯編器在結(jié)構(gòu)和實(shí)現(xiàn)方法上的差異性。由于這種差異性的 存在,對(duì)每一種新的ISA或者對(duì)原有的ISA進(jìn)行改進(jìn)和擴(kuò)展時(shí),就要同時(shí)開發(fā)與 之相適應(yīng)的匯編器。匯編器的開發(fā)一般具有較高的復(fù)雜度和較大的工作量,需要 花費(fèi)較長的時(shí)間和較多的精力。在整個(gè)編譯系統(tǒng)中,匯編器是必不可缺的部分, 所以開發(fā)一種可以根據(jù)用戶對(duì)某一種ISA的描述而即時(shí)產(chǎn)生相應(yīng)的匯編功能的 匯編器,以顯著的縮短開發(fā)周期,減少工作量和精力的投入,對(duì)處理器以及其相 應(yīng)編譯系統(tǒng)的開發(fā)就具有至關(guān)重要的意義。經(jīng)對(duì)現(xiàn)有技術(shù)的文獻(xiàn)檢索發(fā)現(xiàn),坦斯利卡公司于2000年2月4號(hào)向中國專 利局申請(qǐng)的專利"用于設(shè)計(jì)可配置的處理器的自動(dòng)處理器產(chǎn)生系統(tǒng)及其方法"(專 利申請(qǐng)?zhí)朇N00812731)中提到了基于坦斯利卡公司的配置方法的可配置匯編器, 該項(xiàng)技術(shù)使用坦斯利卡公司開發(fā)的指令集體系定義語言對(duì)匯編器進(jìn)行配置,這種
方法也可以實(shí)現(xiàn)針對(duì)不同的ISA生成相應(yīng)的匯編裝置。但使用者使用該公司的可 配置匯編器時(shí),必先學(xué)會(huì)使用其指令集體系描述語言,要生成功能比較完備的指 令集體系,需要先花去不小的工作量,以便較為熟練的掌握這種指令集體系定義 語言。而且這種語言在對(duì)ISA描述時(shí)比較抽象,不易被用戶所掌握,不具備描述 指令集體系結(jié)構(gòu)的簡潔性和直觀性。同時(shí),坦斯利卡公司的相關(guān)專利中,根據(jù)其 定義語言的ISA將會(huì)生成相應(yīng)的代碼文件,然后加入到與ISA信息無關(guān)的代碼文 件中去編譯,最后生成匯編器。這樣,每次生成不同ISA的匯編器就要重新編譯 一次,使得在開發(fā)過程中花費(fèi)了比較多的時(shí)間在編譯過程上。尤其在對(duì)ISA做修 改的時(shí)候, 一點(diǎn)微小的修改都要花費(fèi)大量的時(shí)間進(jìn)行編譯。這種方法無疑增加了 開發(fā)過程的負(fù)擔(dān)。綜上,該技術(shù)所述的可配置匯編器,其提供給用戶的描述方法 過于復(fù)雜和抽象,不易掌握;每次生成不同ISA的匯編器就要重新編譯一次,花 費(fèi)了較多的編譯時(shí)間
發(fā)明內(nèi)容
本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提出了一種基于用戶描述的匯編器及其實(shí)現(xiàn)方 法,使其可以方便、直觀的根據(jù)用戶對(duì)ISA描述,并且無需重復(fù)編譯而即時(shí)的生 成相應(yīng)的匯編功能的匯編器,以大大減少開發(fā)與新的指令集體系結(jié)構(gòu)相對(duì)應(yīng)的匯 編器的開發(fā)時(shí)間和開發(fā)難度。
本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的本發(fā)明所述的基于用戶描述的匯編器,包括ISA描述模塊,結(jié)構(gòu)化信息自 動(dòng)配置模塊,ISA信息庫管理模塊,以及匯編功能處理模塊。所述ISA描述模塊 讀入用戶描述的指令集體系結(jié)構(gòu)信息,并從用戶的描述信息中提取出ISA數(shù)據(jù)至 結(jié)構(gòu)化信息自動(dòng)配置模塊;所述結(jié)構(gòu)化信息自動(dòng)配置模塊將數(shù)據(jù)組織成結(jié)構(gòu)化的 ISA信息并輸出至ISA信息庫管理模塊;所述ISA信息庫管理模塊將該結(jié)構(gòu)化的 指令結(jié)構(gòu)信息存放入內(nèi)存中以完成ISA的定義,并將匯編過程中需要的ISA信息 傳遞給匯編功能處理模塊;所述匯編功能模塊讀入?yún)R編源文件,并從ISA信息庫 管理模塊得到需要的ISA信息,用于對(duì)匯編源文件的處理,最后生成相應(yīng)的二進(jìn) 制代碼文件。所述的ISA描述模塊中,用戶只需要將ISA信息按照規(guī)范填入規(guī)范化的表格 就可完成對(duì)ISA的描述,具體使用的表格包括指令類型表,助記符編碼表,后 綴編碼表,操作數(shù)編碼表, 一般目的寄存器編碼表和特殊目的寄存器表。其中 所述的指令類型表用于描述ISA的不同指令類型的信息;所述的助記符編碼表用 于描述屬于某一指令類型的指令助記符的二進(jìn)制編碼信息;所述的后綴編碼表用 于描述屬于某一指令類型的指令所使用的后綴的二進(jìn)制編碼信息;所述的操作數(shù) 編碼表用于描述屬于某一指令類型的指令所使用的操作數(shù)的二進(jìn)制編碼信息;所 述的一般目的寄存器表用于描述該ISA使用的一般目的寄存器的信息;所述的特 殊目的寄存器表用于描述該ISA使用的特殊目的寄存器的信息;
所述的結(jié)構(gòu)化信息自動(dòng)配置模塊中,將含有ISA相關(guān)信息的基本結(jié)構(gòu)組織成 結(jié)構(gòu)化的定義,每一個(gè)ISA指令類型都將對(duì)應(yīng)一個(gè)指令結(jié)構(gòu),用于描述該類型指 令的所有信息。該類型指令的指令結(jié)構(gòu)中的操作碼屬性為一個(gè)操作碼結(jié)構(gòu),該操 作碼結(jié)構(gòu)的指令助記符名稱列表記錄了屬于該指令類型的所有指令助記符名稱, 指令助記符編碼列表按照指令助記符名稱列表中助記符的順序記錄了指令助記 符的編碼信息,后綴列表屬性對(duì)應(yīng)了一組指令操作數(shù)結(jié)構(gòu)用來記錄該指令類型所 使用的后綴信息。指令結(jié)構(gòu)的操作數(shù)屬性對(duì)應(yīng)了一組指令操作數(shù)結(jié)構(gòu)用來記錄該 指令類型所使用的操作數(shù)信息。所用的二進(jìn)制編碼信息都保存在指令編碼通用結(jié) 構(gòu)中。
所述的ISA信息庫管理模i央,包括ISA定義子模塊和指令集體系搜索子模塊。 所述的ISA定義子模塊跟據(jù)由結(jié)構(gòu)化信息自動(dòng)配置模塊傳輸來的ISA代碼信息的 大小和結(jié)構(gòu),動(dòng)態(tài)申請(qǐng)內(nèi)存以存放這些代碼信息,并根據(jù)上段所述的本發(fā)明定義 的通用的ISA結(jié)構(gòu)方法中的ISA定義方法實(shí)現(xiàn)對(duì)ISA的定義;所述的指令集體系 搜索子模塊按照匯編功能處理模塊的需要搜索內(nèi)存中的定義的ISA,并將需要的 信息輸出給匯編功能處理模塊。
所述的匯編功能處理模塊,用于對(duì)匯編源文件執(zhí)行實(shí)際的匯編功能,這個(gè)模 塊不包含ISA的相關(guān)信息,在其執(zhí)行匯編過程中,ISA的相關(guān)信息將通過向ISA 信息庫管理模塊獲得。該模塊從匯編源文件中讀入讀取匯編指令,并通知ISA 信息庫管理模塊搜索內(nèi)存中的ISA的定義,從中提取需要的信息,按照上述的本 發(fā)明定義的通用的ISA結(jié)構(gòu)方法中的ISA解析的方法將匯編指令解析出來,并完 成二進(jìn)制指令代碼的編碼,最后輸出二進(jìn)制指令代碼文件。
本發(fā)明所述的基于用戶的匯編器的實(shí)現(xiàn)方法,包括以下步驟-
第一步,編譯本發(fā)明所述的基于用戶描述的匯編器的源程序;第二步,用戶使用本發(fā)明定義的一種簡潔,易行并且直觀的對(duì)ISA的描述方法對(duì)ISA進(jìn)行描述,用戶只需要將ISA信息按照規(guī)范填入規(guī)范化的表格就可完成對(duì)ISA的描述;第三步,將用戶對(duì)ISA的描述中的相關(guān)數(shù)據(jù)提取出來;第四步,將提取出來的ISA相關(guān)數(shù)據(jù)組織成一種高度通用的,可擴(kuò)展的,能 夠提供良好的接口以滿足指令的擴(kuò)展需求,同時(shí)有利于高效的匯編器指令解析和 編碼的結(jié)構(gòu)化的ISA信息結(jié)構(gòu);第五步,將組織后的ISA信息,按照其大小和結(jié)構(gòu),動(dòng)態(tài)的存放入內(nèi)存中, 采用步驟四中所述的基于基本結(jié)構(gòu)的指令定義的方法完成對(duì)ISA的定義;第六步,讀取匯編源代碼并對(duì)每條匯編指令做逐一的匯編處理,從匯編指令中獲取相關(guān)的ISA線索信息;第七步,根據(jù)線索信息從內(nèi)存中的ISA定義中提取需要的ISA信息; 第八步,根據(jù)ISA信息,采用步驟四中所述的基于基本結(jié)構(gòu)和指令定義的指 令解析的方法完成對(duì)匯編指令的解析并最終完成對(duì)二進(jìn)制指令的編碼;第九步,完成匯編源代碼中所有的匯編指令的處理,輸出二進(jìn)制代碼文件; 第十步,若要重新生成新的ISA的匯編器,則轉(zhuǎn)至第二步重新開始,即可完 成相應(yīng)的匯編功能,無需重新編譯。第二步所述的規(guī)范化的表格,包括指令類型表,助記符編碼表,后綴編碼 表,操作數(shù)編碼表, 一般目的寄存器編碼表和特殊目的寄存器表。 一套指令集體 系結(jié)構(gòu)描述只有一個(gè)指令類型表, 一個(gè)一般目的寄存器表, 一個(gè)特殊目的寄存器 表。指令類型表中的每一個(gè)指令類型將對(duì)應(yīng)一個(gè)助記符編碼表,一個(gè)后綴編碼表, 一個(gè)操作數(shù)編碼表,用來描述該類型的指令的操作碼和操作數(shù)的信息。其中指令類型表用于描述ISA的不同指令類型的信息,包括指令類型的名稱,該類型指令所帶的操作數(shù)的數(shù)量,能使用的后綴數(shù)目,指令類型的標(biāo)識(shí),操作數(shù) 的類型,該指令類型使用的前綴六個(gè)屬性。助記符編碼表用于描述屬于某一指令類型的指令助記符的二進(jìn)制編碼信息,包括助記符名稱,每段助記符編碼起始位置,每段的編碼的長度,助記符編碼
被分割的段數(shù),助記符的編碼五個(gè)屬性。后綴編碼表用于描述屬于某一指令類型的指令所使用的后綴的二進(jìn)制編碼 信息,包括后綴名稱,每段后綴編碼起始位置,每段的編碼的長度,后綴編 碼被分割的段數(shù),后綴的編碼,該后綴所屬的類型六個(gè)屬性。操作數(shù)編碼表用于描述屬于某一指令類型的指令所使用的操作數(shù)的二進(jìn)制 編碼信息,包括操作數(shù)的類型名稱,每段操作數(shù)編碼起始位置,每段的編碼的 長度,助記符編碼被分割的段數(shù),操作數(shù)的編碼,立即數(shù)的值是否為相對(duì)于當(dāng)前 指令的偏移量標(biāo)識(shí),立即數(shù)的重定位的類型,立即數(shù)的特殊處理方式八個(gè)屬性。 立即數(shù)的值是否為相對(duì)于當(dāng)前指令的偏移量標(biāo)識(shí),立即數(shù)的重定位的類型,立即 數(shù)的特殊處理方式都和立即數(shù)的重定位有關(guān),當(dāng)操作數(shù)為寄存器時(shí),這三項(xiàng)無效。一般目的寄存器表用于描述該ISA使用的一般目的寄存器的信息,包括寄 存器的標(biāo)識(shí)名,寄存器的起始編號(hào),寄存器的終止編號(hào),寄存器別名對(duì)應(yīng)關(guān)系描 述四個(gè)屬性構(gòu)成。特殊目的寄存器表用于描述該ISA使用的特殊目的寄存器的信息,包括特 殊目的寄存器的名稱,每段特殊目的寄存器編碼起始位置,每段的編碼的長度, 特殊目的寄存器編碼被分割的段數(shù),特殊目的寄存器的編碼五個(gè)屬性構(gòu)成。第四步所述的結(jié)構(gòu)化的ISA信息結(jié)構(gòu)采用一種通用的可擴(kuò)展ISA的結(jié)構(gòu)方法,主要用于ISA的定義和ISA指令的解析。該方法包括一組用于指令定義和指令解析的基本結(jié)構(gòu),基于上述基本結(jié)構(gòu)的指令定義的方法(即第五步中采用的方 法),和基于上述基本結(jié)構(gòu)和指令定義的指令解析的方法(即第八步中采用的方 法)。在第四步中,數(shù)據(jù)將被組織成上述基本結(jié)構(gòu)。所述用于指令定義和指令解析的基本結(jié)構(gòu)包括指令結(jié)構(gòu),指令編碼的通用 結(jié)構(gòu),指令操作碼結(jié)構(gòu)和指令操作數(shù)結(jié)構(gòu),其中指令結(jié)構(gòu)描述了屬于同樣類型的指令的全部信息。它包括指令類型,操作 碼,操作數(shù)組,操作數(shù)數(shù)量,格式描述五個(gè)基本屬性。其中,操作碼屬性為指令 操作碼結(jié)構(gòu),操作數(shù)組屬性為指令操作數(shù)結(jié)構(gòu)的數(shù)組。指令編碼通用結(jié)構(gòu)描述和記錄了域的位置以及域?qū)?yīng)的具體機(jī)器編碼。它包 含了四個(gè)屬性域開始位置數(shù)組,域長度數(shù)組,域分段數(shù)量和域值。指令操作碼結(jié)構(gòu)用于描述指令操作碼信息,其屬性包括前綴名稱,指令助
記符名稱列表,指令助記符編碼列表,指令助記符名稱列表長度,后綴列表,后 綴類型個(gè)數(shù)。其中,指令助記符編碼列表為指令編碼的通用數(shù)據(jù)結(jié)構(gòu)的數(shù)組,后 綴列表為指令操作數(shù)結(jié)構(gòu)的數(shù)組,用于描述后綴這種特殊的操作數(shù)。指令操作數(shù)結(jié)構(gòu)描述包括寄存器操作數(shù),立即數(shù)操作數(shù),特殊操作數(shù)和尋址 方式等操作數(shù)的信息,其屬性包括類型定義,操作數(shù)名稱列表,操作數(shù)編碼列 表,復(fù)合操作數(shù)指針,重定位類型,相對(duì)跳轉(zhuǎn)標(biāo)志。其中,操作數(shù)編碼列表為指 令編碼的通用數(shù)據(jù)結(jié)構(gòu)的數(shù)組。第五步所述的基于基本結(jié)構(gòu)的指令定義的方法,是指將含有ISA相關(guān)信息 的基本結(jié)構(gòu)組織成結(jié)構(gòu)化的定義。在該方法中,每一個(gè)ISA指令類型都將對(duì)應(yīng)一 個(gè)指令結(jié)構(gòu),用于描述該類型指令的所有信息。該類型指令的指令結(jié)構(gòu)中的操作 碼屬性為一個(gè)操作碼結(jié)構(gòu),該操作碼結(jié)構(gòu)的指令助記符名稱列表記錄了屬于該指 令類型的所有指令助記符名稱,指令助記符編碼列表按照指令助記符名稱列表中 助記符的順序記錄了指令助記符的編碼信息,后綴列表屬性對(duì)應(yīng)了一組指令操作 數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的后綴信息。指令結(jié)構(gòu)的操作數(shù)屬性對(duì)應(yīng)了一 組指令操作數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的操作數(shù)信息。所用的二進(jìn)制編碼 信息(包括指令助記符,后綴,操作數(shù)),都保存在指令編碼通用結(jié)構(gòu)中。第八步所述的基于基本結(jié)構(gòu)和指令定義的指令解析的方法,是指對(duì)于每一 條匯編指令,詞法分析其操作碼(包含指令助記符和后綴),操作數(shù),并將分析得 到的信息填充入基于基本結(jié)構(gòu)的指令解析結(jié)構(gòu)中去。該結(jié)構(gòu)使用一個(gè)指令結(jié)構(gòu), 將該匯編指令的操作碼信息填充入指令結(jié)構(gòu)的操作碼屬性所對(duì)應(yīng)的操作碼結(jié)構(gòu) 中去,同時(shí)將該匯編指令的操作數(shù)信息填充入指令結(jié)構(gòu)的操作數(shù)屬性所對(duì)應(yīng)的一 組操作數(shù)結(jié)構(gòu)中去。根據(jù)指令助記符和操作數(shù)找到與該指令相符合的指令類型, 根據(jù)指令類型查找符合該指令類型的指令定義表并確定操作碼操作數(shù)的具體編 碼定義(以通用編碼結(jié)構(gòu)存放),填充入指令解析結(jié)構(gòu)中去。依次掃描數(shù)據(jù)域編 碼中的通用編碼結(jié)構(gòu)完成最后的指令編碼。第十步所述的重新生成新的ISA的匯編器,其方法為基于用戶描述的ISA 信息存放在內(nèi)存中,從而在生成新的匯編功能的匯編器時(shí),只需要把用戶描述的 相應(yīng)的ISA指令信息結(jié)構(gòu)化存放入內(nèi)存供匯編過程使用,即可完成相應(yīng)的匯編功 能,而無需通過重新編譯的方法生成匯編器,節(jié)省了開發(fā)過程中大量的編譯時(shí)間。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果本發(fā)明采用用戶填寫規(guī)范化的 表格描述相關(guān)指令集體系結(jié)構(gòu),這種方法簡單,易行,并且直觀,只要了解ISA 架構(gòu)的信息,無需掌握復(fù)雜的描述語言,就可以方便的描述ISA。這些規(guī)范化的 表格具有高度的通用性,滿足現(xiàn)今各種指令集體系結(jié)構(gòu)的描述要求。本發(fā)明采用了一種通用的可擴(kuò)展的ISA結(jié)構(gòu),最大限度的支持現(xiàn)有的指令集體系結(jié)構(gòu)的需求和設(shè)計(jì)思想,滿足各種指令集體系結(jié)構(gòu)的匯編器的開發(fā)需要,使得匯編器的開發(fā)時(shí)間和開發(fā)的勞動(dòng)量大大下降。同時(shí),在新的ISA匯編器的生成過程中,采用免 編譯的方法,節(jié)省了開發(fā)過程中大量的開發(fā)時(shí)間。
圖1基于用戶描述的匯編器的結(jié)構(gòu)示意圖;圖2用于描述ISA的規(guī)范劃的表格的結(jié)構(gòu)示意圖;圖3通用的可擴(kuò)展ISA的結(jié)構(gòu)方法中的基本結(jié)構(gòu)的結(jié)構(gòu)示意圖;圖4通用的可擴(kuò)展ISA的結(jié)構(gòu)方法中的指令定義的方法的示意圖;圖5通用的可擴(kuò)展ISA的結(jié)構(gòu)方法中的指令解析的方法的示意圖;具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的實(shí)施例作詳細(xì)說明本實(shí)施例在以本發(fā)明技術(shù)方案 為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過程,但本發(fā)明的保護(hù) 范圍不限于下述的實(shí)施例。如圖1所示,本發(fā)明實(shí)施例匯編器包括ISA描述模塊,結(jié)構(gòu)化信息自動(dòng)配置模塊,ISA信息庫管理模塊,以及匯編功能處理模塊。其中ISA信息庫管理模 塊又包括ISA定義子模塊,和指令集體系搜索子模塊。ISA描述模塊將讀入用戶描述的指令集體系結(jié)構(gòu)信息,并輸出從中提取出的 相關(guān)數(shù)據(jù)至結(jié)構(gòu)化信息自動(dòng)配置模塊;結(jié)構(gòu)化信息自動(dòng)配置模塊將數(shù)據(jù)組織成結(jié) 構(gòu)化的ISA信息并輸出至ISA信息庫管理模塊;ISA信息庫管理模塊中的ISA定 義子模塊將該結(jié)構(gòu)化的指令結(jié)構(gòu)信息存放入內(nèi)存中,指令集體系搜索子模塊在內(nèi) 存中的ISA定義信息中搜索匯編過程中需要的ISA信息,并傳遞給匯編功能處理 模塊;匯編功能模塊讀入?yún)R編源文件,并從指令集體系庫管理模塊得到需要的 ISA信息,用于對(duì)匯編源文件的處理,最后生成相應(yīng)的二進(jìn)制代碼文件。下面結(jié)合附圖2 5 ,以本發(fā)明的裝置和方法在開發(fā)ARM處理器的匯編指令 集匯編器的應(yīng)用為例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。ARM處理器具 有32位的ARM指令集和16位的Thumb指令集,本實(shí)例中采用32位的ARM指令 集開發(fā)其相應(yīng)匯編功能的匯編器。過程敘述如下首先編譯本發(fā)明所述的基于用戶描述的匯編器的源程序,生成這部分源程序 不包含具體的ISA信息。如圖2所示為用戶對(duì)ISA進(jìn)行描述時(shí)所填寫的規(guī)范劃的表格及這些表格之間 的關(guān)系。用戶需要將一個(gè)ISA的相關(guān)信息按照如下方式填寫入這些表格中去。這 些表格包括指令類型表,助記符編碼表,后綴編碼表,操作數(shù)編碼表, 一般目 的寄存器編碼表和特殊目的寄存器表。一套指令集體系結(jié)構(gòu)描述只有一個(gè)指令類 型表, 一個(gè)一般目的寄存器表, 一個(gè)特殊目的寄存器表。指令類型表中的每一個(gè) 指令類型將對(duì)應(yīng)一個(gè)助記符編碼表, 一個(gè)后綴編碼表, 一個(gè)操作數(shù)編碼表,用來 描述該類型的指令的操作碼和操作數(shù)的信息。32位ARM指令多種不同的指令類型,相同指令類型的指令帶有相同數(shù)目和 類型操作數(shù),相同的指令字長,并且其操作符和操作數(shù)具有相同編碼位置。將這 些指令類型的信息填寫入指令類型表,該表格包含六個(gè)屬性,描述了指令類型的 名稱,該類型指令所帶的操作數(shù)的數(shù)量,能使用的后綴數(shù)目,指令類型的標(biāo)識(shí), 操作數(shù)的類型,該指令類型使用的前綴等指令類型方面的信息。ARM指令集的每一個(gè)指令類型的指令的具體信息,將由用戶填寫到相應(yīng)的一 個(gè)助記符編碼表, 一個(gè)后綴編碼表和一個(gè)操作數(shù)編碼表中。其中,助記符編碼表 記錄了屬于該類型的每條指令的助記符的二進(jìn)制編碼信息,包括每段助記符編碼 起始位置,每段的編碼的長度,助記符編碼被分割的段數(shù),助記符的編碼。后綴 編碼表記錄了屬于該類型的指令所使用的后綴的二進(jìn)制編碼信息,包括每段后綴 編碼起始位置,每段的編碼的長度,后綴編碼被分割的段數(shù),后綴的編碼,該后 綴所屬的類型。操作數(shù)編碼表記錄了屬于該類型的指令的操作數(shù)的編碼信息,包 括每段操作數(shù)編碼起始位置,每段的編碼的長度,助記符編碼被分割的段數(shù),操 作數(shù)的編碼,立即數(shù)的值是否為相對(duì)于當(dāng)前指令的偏移量標(biāo)識(shí),立即數(shù)的重定位 的類型,立即數(shù)的特殊處理方式。立即數(shù)的值是否為相對(duì)于當(dāng)前指令的偏移量標(biāo) 識(shí),立即數(shù)的重定位的類型,立即數(shù)的特殊處理方式都和立即數(shù)的重定位有關(guān), 當(dāng)操作數(shù)為寄存器時(shí),這三項(xiàng)無效。
ARM指令集中使用了一些一般目的寄存器,和特殊目的寄存器,用戶需要將 這些寄存器的信息填寫到一般目的寄存器表和特殊目的寄存器表,用于表示這些 寄存器的信息。其中, 一般目的寄存器表包含了寄存器的標(biāo)識(shí)名,寄存器的起始 編號(hào),寄存器的終止編號(hào),寄存器別名對(duì)應(yīng)關(guān)系描述等信息。而特殊目的寄存器 表則描述了特殊目的寄存器的二進(jìn)制編碼信息,包括編碼起始位置,每段的編碼 的長度,特殊目的寄存器編碼被分割的段數(shù),特殊目的寄存器的編碼。ISA描述模塊將讀入描述ISA的上述表格的信息,并提取出相關(guān)的ISA數(shù)據(jù) 輸送至結(jié)構(gòu)化信息自動(dòng)配置模塊。結(jié)構(gòu)化信息自動(dòng)配置模塊將這些數(shù)據(jù)組織成結(jié)構(gòu)化的ISA代碼信息。這些 ISA代碼信息為本發(fā)明采用的一種通用的可擴(kuò)展ISA的結(jié)構(gòu)方法中的基本結(jié)構(gòu)。 這種通用的可擴(kuò)展ISA的結(jié)構(gòu)方法,用于ISA的定義和ISA指令的解析。該方法 包括一組用于指令定義和指令解析的基本結(jié)構(gòu),基于上述基本結(jié)構(gòu)的指令定義的 方法,和基于上述基本結(jié)構(gòu)和指令定義的指令解析的方法。其中,指令定義方法 和指令解析方法將在接下來的過程中使用。如圖3,上述的基本結(jié)構(gòu),包括指令結(jié)構(gòu),指令編碼的通用結(jié)構(gòu),指令操 作碼結(jié)構(gòu)和指令操作數(shù)結(jié)構(gòu)。指令結(jié)構(gòu)描述了屬于同樣類型的指令的全部信息:指令類型的名稱,操作碼, 操作數(shù)組,操作數(shù)數(shù)量,格式描述。其中,操作碼為指令操作碼結(jié)構(gòu),操作數(shù)組 為指令操作數(shù)結(jié)構(gòu)的集合,格式描述將描述操作數(shù)的排布格式。指令編碼通用結(jié)構(gòu)描述和記錄了指令的各個(gè)部分所使用在二進(jìn)制編碼中的 域的位置以及域?qū)?yīng)的具體機(jī)器編碼。包括域開始位置數(shù)組,域長度數(shù)組,域分 段數(shù)量和域值。指令操作碼結(jié)構(gòu)用于描述指令操作碼信息,包括指令助記符名稱列表,指令助記符編碼列表,指令助記符名稱列表長度,后綴列表,后綴類型個(gè)數(shù)。其中, 指令助記符編碼列表為指令編碼的通用數(shù)據(jù)結(jié)構(gòu)的集合,后綴列表為指令操作數(shù) 結(jié)構(gòu)的集合,用于描述后綴這種特殊的操作數(shù)。指令操作數(shù)結(jié)構(gòu)描述包括寄存器操作數(shù),立即數(shù)操作數(shù),特殊操作數(shù)和尋址方式等操作數(shù)的信息,包括操作數(shù)類型定義,操作數(shù)名稱列表,操作數(shù)編碼列 表,復(fù)合操作數(shù)指針,重定位類型,相對(duì)跳轉(zhuǎn)標(biāo)志。其中,類型定義標(biāo)明寄存器,
立即數(shù),后綴和符合操作數(shù)等類;操作數(shù)名稱列表在操作數(shù)為后綴時(shí),該項(xiàng)為羅 列了某一類型的后綴的名稱的集合,當(dāng)操作數(shù)為立即數(shù)或寄存器時(shí),該信息僅有 一項(xiàng),標(biāo)示其為寄存器或者立即數(shù);操作數(shù)編碼列表為指令編碼的通用數(shù)據(jù)結(jié)構(gòu) 的數(shù)組;重定位類型僅當(dāng)操作數(shù)為立即數(shù)時(shí)有效,標(biāo)識(shí)立即數(shù)的重定位類型;相 對(duì)跳轉(zhuǎn)標(biāo)志在操作數(shù)為立即數(shù)時(shí),標(biāo)識(shí)立即數(shù)的值是于為相對(duì)于當(dāng)前地址的偏移 量。結(jié)構(gòu)化信息自動(dòng)配置模塊將含有結(jié)構(gòu)化的ISA信息的基本結(jié)構(gòu)逐一傳送給 ISA信息管理模塊,由該模塊的ISA定義子模塊跟據(jù)由結(jié)構(gòu)化信息自動(dòng)配置模塊 傳輸來的ISA代碼信息的大小和結(jié)構(gòu),動(dòng)態(tài)申請(qǐng)內(nèi)存以存放這些代碼信息,并根 據(jù)前述的本發(fā)明定義的通用的ISA結(jié)構(gòu)方法中的ISA定義方法實(shí)現(xiàn)對(duì)ISA的定 義。如圖4所示,ISA定義方法為通用的可擴(kuò)展ISA的結(jié)構(gòu)方法中基于基本結(jié)構(gòu) 的指令定義的方法。將含有ISA相關(guān)信息的基本結(jié)構(gòu)組織成結(jié)構(gòu)化的定義。在該 方法中,每一個(gè)ISA指令類型都將對(duì)應(yīng)一個(gè)指令結(jié)構(gòu),用于描述該類型指令的所 有信息。該類型指令的指令結(jié)構(gòu)中的操作碼屬性為一個(gè)操作碼結(jié)構(gòu),該操作碼結(jié) 構(gòu)的指令助記符名稱列表記錄了屬于該指令類型的所有指令助記符名稱,指令助 記符編碼列表按照指令助記符名稱列表中助記符的順序記錄了指令助記符的編 碼信息,后綴列表屬性對(duì)應(yīng)了一組指令操作數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的 后綴信息。指令結(jié)構(gòu)的操作數(shù)屬性對(duì)應(yīng)了一組指令操作數(shù)結(jié)構(gòu)用來記錄該指令類 型所使用的操作數(shù)信息。所用的二進(jìn)制編碼信息(包括指令助記符,后綴,操作 數(shù)),都保存在指令編碼通用結(jié)構(gòu)中。匯編功能處理模塊從匯編源文件中讀入讀取匯編指令,并通知ISA信息庫管 理模塊,ISA信息庫管理模塊的指令集體系搜索子模塊從內(nèi)存中的ISA定義中提 取需要的信息,按照前述的通用的ISA結(jié)構(gòu)方法中的ISA解析的方法將匯編指令 解析出來,并完成二進(jìn)制指令代碼的編碼,最后輸出二進(jìn)制指令代碼文件。如圖5所示,對(duì)匯編指令進(jìn)行解析所采用的方法,為通用的可擴(kuò)展ISA的結(jié) 構(gòu)方法中基于基本結(jié)構(gòu)和指令定義的指令解析的方法。在該方法中,對(duì)于每一條 匯編指令,詞法分析其操作碼(包含指令助記符和后綴),操作數(shù),并將分析得到 的信息填充入基于基本結(jié)構(gòu)的指令解析結(jié)構(gòu)中去。該結(jié)構(gòu)使用一個(gè)指令結(jié)構(gòu),將
該匯編指令的操作碼信息填充入指令結(jié)構(gòu)的操作碼屬性所對(duì)應(yīng)的操作碼結(jié)構(gòu)中 去,同時(shí)將該匯編指令的操作數(shù)信息填充入指令結(jié)構(gòu)的操作數(shù)屬性所對(duì)應(yīng)的一組 操作數(shù)結(jié)構(gòu)中去。根據(jù)指令助記符和操作數(shù)找到與該指令相符合的指令類型,根 據(jù)指令類型查找符合該指令類型的指令定義表并確定操作碼操作數(shù)的具體編碼 定義(以通用編碼結(jié)構(gòu)存放),填充入指令解析結(jié)構(gòu)中去。依次掃描數(shù)據(jù)域編碼 中的通用編碼結(jié)構(gòu)完成最后的指令編碼。生成源文件的二進(jìn)制指令代碼文件后,ARM指令集的匯編功能就此完成。 若要重新生成新的ISA的匯編器,用戶只需要將新的ISA信息填寫成相應(yīng)的 規(guī)范化的表格,交給ISA描述模塊,重復(fù)上述過程即可完成相應(yīng)的匯編功能。從 而無需重新編譯而生成相應(yīng)的匯編器。有上可以看出,本發(fā)明提出了一種基于用戶對(duì)指令集體系結(jié)構(gòu)進(jìn)行描述,從 而得到相應(yīng)匯編功能的匯編器。它使用一種面向用戶的高度抽象的通用指令集體 系結(jié)構(gòu)的描述方法,這種方法簡單,易行,并且直觀,無需掌握復(fù)雜的描述語言, 就可以方便的生成所需的匯編器。它還采用一種高度通用的可擴(kuò)展的,能夠提供 良好的接口以滿足指令的擴(kuò)展需求,同時(shí)有利于高效的匯編器指令解析和編碼的 指令集體系數(shù)據(jù)結(jié)構(gòu),使得本發(fā)明最大限度的支持現(xiàn)有的指令集體系結(jié)構(gòu)的需求 和設(shè)計(jì)思想,滿足各種指令集體系結(jié)構(gòu)的匯編器的開發(fā)需要。同時(shí),本發(fā)明還支 持一種免編譯的匯編器的生成方法,使得匯編器程序在編譯結(jié)束之后的運(yùn)行過程 中,就可以接收由用戶描述指令集體系結(jié)構(gòu)而得到的信息,完成匯編器的功能, 從而省去了每生成一個(gè)匯編器就要重新編譯一次的麻煩。
權(quán)利要求
1.一種基于用戶描述的匯編器,包括ISA描述模塊、結(jié)構(gòu)化信息自動(dòng)配置模塊、ISA信息庫管理模塊以及匯編功能處理模塊,其特征在于所述ISA描述模塊讀入用戶描述的指令集體系結(jié)構(gòu)信息,并從用戶的描述信息中提取出指令集體系結(jié)構(gòu)數(shù)據(jù)至結(jié)構(gòu)化信息自動(dòng)配置模塊,用戶只需要將指令集體系結(jié)構(gòu)信息按照規(guī)范填入規(guī)范化的表格就能完成對(duì)指令集體系結(jié)構(gòu)的描述;所述結(jié)構(gòu)化信息自動(dòng)配置模塊將數(shù)據(jù)組織成結(jié)構(gòu)化的指令集體系結(jié)構(gòu)信息并輸出至ISA信息庫管理模塊;所述ISA信息庫管理模塊將該結(jié)構(gòu)化的指令結(jié)構(gòu)信息存放入內(nèi)存中以完成指令集體系結(jié)構(gòu)的定義,并將匯編過程中需要的ISA信息傳遞給匯編功能處理模塊;所述匯編功能模塊讀入?yún)R編源文件,并從ISA信息庫管理模塊得到需要的指令集體系結(jié)構(gòu)信息,用于對(duì)匯編源文件的處理,最后生成相應(yīng)的二進(jìn)制代碼文件。
2. 根據(jù)權(quán)利要求1所述的基于用戶描述的匯編器,其特征是,所述的ISA 描述模塊使用的信息包括指令類型表、助記符編碼表、后綴編碼表、操作數(shù)編 碼表、 一般目的寄存器編碼表和特殊目的寄存器表,其中所述的指令類型表用于描述指令集體系結(jié)構(gòu)的不同指令類型的信息; 所述的助記符編碼表用于描述屬于某一指令類型的指令助記符的二進(jìn)制編 碼信息;所述的后綴編碼表用于描述屬于某一指令類型的指令所使用的后綴的二進(jìn) 制編碼信息;所述的操作數(shù)編碼表用于描述屬于某一指令類型的指令所使用的操作數(shù)的 二進(jìn)制編碼信息;所述的一般目的寄存器表用于描述該指令集體系結(jié)構(gòu)使用的一般目的寄存 器的信息;所述的特殊目的寄存器表用于描述該指令集體系結(jié)構(gòu)使用的特殊目的寄存 器的信息。
3. 根據(jù)權(quán)利要求1所述的基于用戶描述的匯編器,其特征是,所述的結(jié)構(gòu) 化信息自動(dòng)配置模塊,其輸出的結(jié)構(gòu)化的ISA代碼信息,將含有指令集體系結(jié)構(gòu) 相關(guān)信息的基本結(jié)構(gòu)組織成結(jié)構(gòu)化的定義,每一個(gè)指令集體系結(jié)構(gòu)指令類型都將 對(duì)應(yīng)一個(gè)指令結(jié)構(gòu),用于描述該類型指令的所有信息,該類型指令的指令結(jié)構(gòu)中 的操作碼屬性為一個(gè)操作碼結(jié)構(gòu),該操作碼結(jié)構(gòu)的指令助記符名稱列表記錄了屬 于該指令類型的所有指令助記符名稱,指令助記符編碼列表按照指令助記符名稱 列表中助記符的順序記錄了指令助記符的編碼信息,后綴列表屬性對(duì)應(yīng)了一組指 令操作數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的后綴信息,指令結(jié)構(gòu)的操作數(shù)屬性對(duì) 應(yīng)了一組指令操作數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的操作數(shù)信息,所用的二進(jìn) 制編碼信息都保存在指令編碼通用結(jié)構(gòu)中。
4. 根據(jù)權(quán)利要求1所述的基于用戶描述的匯編器,其特征是,所述的ISA 信息庫管理模塊包括ISA定義子模塊和指令集體系搜索子模塊,所述的ISA定義 子模塊跟據(jù)由結(jié)構(gòu)化信息自動(dòng)配置模塊傳輸來的指令集體系結(jié)構(gòu)代碼信息的大 小和結(jié)構(gòu),動(dòng)態(tài)申請(qǐng)內(nèi)存以存放這些代碼信息,采用基于基本結(jié)構(gòu)的指令定義的 方法實(shí)現(xiàn)對(duì)指令集體系結(jié)構(gòu)的定義;所述的指令集體系搜索子模塊按照匯編功能 處理模塊的需要搜索內(nèi)存中定義的指令集體系結(jié)構(gòu),并將需要的信息輸出給匯編功能處理模塊。
5. 根據(jù)權(quán)利要求1所述的基于用戶描述的匯編器,其特征是,所述的匯編 功能處理模塊不包含指令集體系結(jié)構(gòu)的相關(guān)信息,在其執(zhí)行匯編過程中,指令集 體系結(jié)構(gòu)的相關(guān)信息通過向ISA信息庫管理模塊獲得,該模塊從匯編源文件中讀 入讀取匯編指令,并通知ISA信息庫管理模塊搜索內(nèi)存中的指令集體系結(jié)構(gòu)的定 義,從中提取需要的信息,采用結(jié)構(gòu)化的ISA信息結(jié)構(gòu)中的基于基本結(jié)構(gòu)和指令 定義的指令解析的方法將匯編指令解析出來,并完成二進(jìn)制指令代碼的編碼,最 后輸出二進(jìn)制指令代碼文件。
6. —種基于用戶描述的匯編器的實(shí)現(xiàn)方法,其特征在于,包括以下步驟 第一步,編譯所述的基于用戶描述的匯編器的源程序;第二步,用戶使用對(duì)指令集體系結(jié)構(gòu)的描述方法對(duì)指令集體系結(jié)構(gòu)進(jìn)行描 述,用戶只需要將指令集體系結(jié)構(gòu)信息按照規(guī)范填入規(guī)范化的表格就能完成對(duì)ISA的描述;第三步,將用戶對(duì)指令集體系結(jié)構(gòu)的描述中的相關(guān)數(shù)據(jù)提取出來; 第四步,將提取出來的指令集體系結(jié)構(gòu)相關(guān)數(shù)據(jù)組織成一種結(jié)構(gòu)化的ISA 信息結(jié)構(gòu),所述的結(jié)構(gòu)化的ISA信息結(jié)構(gòu)包括 一組用于指令定義和指令解析的 基本結(jié)構(gòu),基于上述基本結(jié)構(gòu)的指令定義的方法,和基于上述基本結(jié)構(gòu)和指令定 義的指令解析的方法,在第四步中,數(shù)據(jù)將被組織成上述基本結(jié)構(gòu);第五步,將組織后的指令集體系結(jié)構(gòu)信息,按照其大小和結(jié)構(gòu),動(dòng)態(tài)的存放 入內(nèi)存中,采用步驟四中所述的基于基本結(jié)構(gòu)的指令定義的方法完成對(duì)指令集體 系結(jié)構(gòu)的定義;第六步,讀取匯編源代碼并對(duì)每條匯編指令做逐一的匯編處理,從匯編指令 中獲取相關(guān)的指令集體系結(jié)構(gòu)線索信息;第七步,根據(jù)線索信息從內(nèi)存中的指令集體系結(jié)構(gòu)定義中提取需要的指令集 體系結(jié)構(gòu)信息;第八步,根據(jù)指令集體系結(jié)構(gòu)信息,采用步驟四中所述的基于基本結(jié)構(gòu)和指 令定義的指令解析的方法完成對(duì)匯編指令的解析并最終完成對(duì)二進(jìn)制指令的編 碼;第九步,完成匯編源代碼中所有的匯編指令的處理,輸出二進(jìn)制代碼文件; 第十歩,若要重新生成新的指令集體系結(jié)構(gòu)的匯編器,轉(zhuǎn)至第二步重新開始,即完成相應(yīng)的匯編功能,無需重新編譯。
7.根據(jù)權(quán)利要求6所述的基于用戶描述的匯編器的實(shí)現(xiàn)方法,其特征是,第二步所述的對(duì)指令集體系結(jié)構(gòu)的描述方法,具體使用的規(guī)范化的表格包括指令類型表、助記符編碼表、后綴編碼表、操作數(shù)編碼表、 一般目的寄存器編碼表和特殊目的寄存器表,其中-所述的指令類型表用于描述指令集體系結(jié)構(gòu)的不同指令類型的信息; 所述的助記符編碼表用于描述屬于某一指令類型的指令助記符的二進(jìn)制編碼信息;所述的后綴編碼表用于描述屬于某一指令類型的指令所使用的后綴的二進(jìn) 制編碼信息;所述的操作數(shù)編碼表用于描述屬于某一指令類型的指令所使用的操作數(shù)的 二進(jìn)制編碼信息;所述的一般目的寄存器表用于描述該指令集體系結(jié)構(gòu)使用的一般目的寄存 器的信息;所述的特殊目的寄存器表用于描述該指令集體系結(jié)構(gòu)使用的特殊目的寄存 器的信息。
8. 根據(jù)權(quán)利要求6或7所述的基于用戶描述的匯編器的實(shí)現(xiàn)方法,其特征是, 所述的對(duì)指令集體系結(jié)構(gòu)的描述方法,是指 一套指令集體系結(jié)構(gòu)描述只有一個(gè) 指令類型表、 一個(gè)一般目的寄存器表、 一個(gè)特殊目的寄存器表,指令類型表中的 每一個(gè)指令類型將對(duì)應(yīng)一個(gè)助記符編碼表, 一個(gè)后綴編碼表, 一個(gè)操作數(shù)編碼表, 用來描述該類型的指令的操作碼和操作數(shù)的信息;所述的指令類型表包括:指令類型的名稱、該類型指令所帶的操作數(shù)的數(shù)量、 能使用的后綴數(shù)目、指令類型的標(biāo)識(shí)、操作數(shù)的類型、該指令類型使用的前綴六 個(gè)屬性;所述的助記符編碼表包括助記符名稱、每段助記符編碼起始位置、每段的 編碼的長度、助記符編碼被分割的段數(shù)、助記符的編碼五個(gè)屬性;所述的后綴編碼表包括后綴名稱、每段后綴編碼起始位置、每段的編碼的 長度、后綴編碼被分割的段數(shù)、后綴的編碼、該后綴所屬的類型六個(gè)屬性;所述的操作數(shù)編碼表包括操作數(shù)的類型名稱、每段操作數(shù)編碼起始位置、 每段的編碼的長度、助記符編碼被分割的段數(shù)、操作數(shù)的編碼、立即數(shù)的值是否 為相對(duì)于當(dāng)前指令的偏移量標(biāo)識(shí)、立即數(shù)的重定位的類型、立即數(shù)的特殊處理方 式八個(gè)屬性,其中立即數(shù)的值是否為相對(duì)于當(dāng)前指令的偏移量標(biāo)識(shí),立即數(shù)的重 定位的類型,立即數(shù)的特殊處理方式都和立即數(shù)的重定位有關(guān),當(dāng)操作數(shù)為寄存 器時(shí),這三項(xiàng)無效;所述的一般目的寄存器表包括寄存器的標(biāo)識(shí)名、寄存器的起始編號(hào)、寄存 器的終止編號(hào)、寄存器別名對(duì)應(yīng)關(guān)系描述四個(gè)屬性構(gòu)成;所述的特殊目的寄存器表包括特殊目的寄存器的名稱、每段特殊目的寄存 器編碼起始位置、每段的編碼的長度、特殊目的寄存器編碼被分割的段數(shù)、特殊 目的寄存器的編碼五個(gè)屬性構(gòu)成。
9. 根據(jù)權(quán)利要求6所述的基于用戶描述的匯編器的實(shí)現(xiàn)方法,其特征是, 所述的用于指令定義和指令解析的基本結(jié)構(gòu),包括指令結(jié)構(gòu)、指令編碼的通用 結(jié)構(gòu)、指令操作碼結(jié)構(gòu)和指令操作數(shù)結(jié)構(gòu), 所述的指令結(jié)構(gòu)描述了屬于同樣類型的指令的全部信息,它包括:指令類型、 操作碼、操作數(shù)組、操作數(shù)數(shù)量、格式描述五個(gè)基本屬性,其中操作碼屬性為 指令操作碼結(jié)構(gòu),操作數(shù)組屬性為指令操作數(shù)結(jié)構(gòu)的數(shù)組;所述的指令編碼通用結(jié)構(gòu)描述和記錄了域的位置以及域?qū)?yīng)的具體機(jī)器編 碼,它包含了四個(gè)屬性域開始位置數(shù)組、域長度數(shù)組、域分段數(shù)量和域值;所述的指令操作碼結(jié)構(gòu)用于描述指令操作碼信息,其屬性包括前綴名稱、 指令助記符名稱列表、指令助記符編碼列表、指令助記符名稱列表長度、后綴列 表、后綴類型個(gè)數(shù),其中指令助記符編碼列表為指令編碼的通用數(shù)據(jù)結(jié)構(gòu)的數(shù) 組,后綴列表為指令操作數(shù)結(jié)構(gòu)的數(shù)組,用于描述后綴這種特殊的操作數(shù);所述的指令操作數(shù)結(jié)構(gòu)描述包括寄存器操作數(shù)、立即數(shù)操作數(shù)、特殊操作數(shù) 和尋址方式操作數(shù)的信息,其屬性包括類型定義、操作數(shù)名稱列表、操作數(shù)編 碼列表、復(fù)合操作數(shù)指針、重定位類型、相對(duì)跳轉(zhuǎn)標(biāo)志,其中操作數(shù)編碼列表 為指令編碼的通用數(shù)據(jù)結(jié)構(gòu)的數(shù)組;所述的基于基本結(jié)構(gòu)的指令定義的方法,是指將含有指令集體系結(jié)構(gòu)相關(guān) 信息的基本結(jié)構(gòu)組織成結(jié)構(gòu)化的定義,每一個(gè)指令集體系結(jié)構(gòu)指令類型都將對(duì)應(yīng) 一個(gè)指令結(jié)構(gòu),用于描述該類型指令的所有信息,該類型指令的指令結(jié)構(gòu)中的操 作碼屬性為一個(gè)操作碼結(jié)構(gòu),該操作碼結(jié)構(gòu)的指令助記符名稱列表記錄了屬于該 指令類型的所有指令助記符名稱,指令助記符編碼列表按照指令助記符名稱列表 中助記符的順序記錄了指令助記符的編碼信息,后綴列表屬性對(duì)應(yīng)了一組指令操 作數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的后綴信息,指令結(jié)構(gòu)的操作數(shù)屬性對(duì)應(yīng)了 一組指令操作數(shù)結(jié)構(gòu)用來記錄該指令類型所使用的操作數(shù)信息,所用的二進(jìn)制編 碼信息都保存在指令編碼通用結(jié)構(gòu)中;所述的基于基本結(jié)構(gòu)和指令定義的指令解析的方法,是指對(duì)于每一條匯編 指令,詞法分析其操作碼、操作數(shù),并將分析得到的信息填充入基于基本結(jié)構(gòu)的 指令解析結(jié)構(gòu)中去,該結(jié)構(gòu)使用一個(gè)指令結(jié)構(gòu),將該匯編指令的操作碼信息填充 入指令結(jié)構(gòu)的操作碼屬性所對(duì)應(yīng)的操作碼結(jié)構(gòu)中去,同時(shí)將該匯編指令的操作數(shù) 信息填充入指令結(jié)構(gòu)的操作數(shù)屬性所對(duì)應(yīng)的一組操作數(shù)結(jié)構(gòu)中去,根據(jù)指令助記 符和操作數(shù)找到與該指令相符合的指令類型,根據(jù)指令類型查找符合該指令類型 的指令定義表并確定操作碼操作數(shù)的具體編碼定義,填充入指令解析結(jié)構(gòu)中去, 依次掃描數(shù)據(jù)域編碼中的通用編碼結(jié)構(gòu)完成最后的指令編碼。
10.根據(jù)權(quán)利要求6所述的基于用戶描述的匯編器的實(shí)現(xiàn)方法,其特征是, 所述的重新生成新的指令集體系結(jié)構(gòu)的匯編器,其方法為基于用戶描述的指令 集體系結(jié)構(gòu)信息存放在內(nèi)存中,從而在生成新的匯編功能的匯編器時(shí),只要把用 戶描述的相應(yīng)的指令集體系結(jié)構(gòu)指令信息結(jié)構(gòu)化存放入內(nèi)存供匯編過程使用,即 完成相應(yīng)的匯編功能,而無需通過重新編譯的方法生成匯編器。
全文摘要
一種計(jì)算機(jī)技術(shù)領(lǐng)域的基于用戶描述的匯編器及其實(shí)現(xiàn)方法,其中ISA描述模塊讀入用戶描述的指令集體系結(jié)構(gòu)信息,并從用戶的描述信息中提取出ISA數(shù)據(jù)至結(jié)構(gòu)化信息自動(dòng)配置模塊;結(jié)構(gòu)化信息自動(dòng)配置模塊將數(shù)據(jù)組織成結(jié)構(gòu)化的ISA信息并輸出至ISA信息庫管理模塊;ISA信息庫管理模塊將該結(jié)構(gòu)化的指令結(jié)構(gòu)信息存放入內(nèi)存中,并將匯編過程中需要的ISA信息傳遞給匯編功能處理模塊;匯編功能模塊讀入?yún)R編源文件,并從ISA信息庫管理模塊得到需要的ISA信息,用于對(duì)匯編源文件的處理,最后生成相應(yīng)的二進(jìn)制代碼文件。本發(fā)明還提供上述的匯編器的生成方法,可方便、直觀的根據(jù)用戶對(duì)ISA描述,且無需重復(fù)編譯而即時(shí)的生成相應(yīng)的匯編功能的匯編器。
文檔編號(hào)G06F9/45GK101118498SQ200710045888
公開日2008年2月6日 申請(qǐng)日期2007年9月13日 優(yōu)先權(quán)日2007年9月13日
發(fā)明者劉佩林, 耀 鄒, 強(qiáng) 馬 申請(qǐng)人:上海交通大學(xué)