51指令集匯編器的構(gòu)建方法探究_第1頁
51指令集匯編器的構(gòu)建方法探究_第2頁
51指令集匯編器的構(gòu)建方法探究_第3頁
51指令集匯編器的構(gòu)建方法探究_第4頁
51指令集匯編器的構(gòu)建方法探究_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、51指令集匯編器的構(gòu)建方法探究曹曉龍打李華2(1.貴州師范大學(xué)物理與電子科學(xué)學(xué)院,貴州貴陽550002; 2.貴州師范大學(xué)職業(yè)技術(shù)學(xué)院,貴州貴 陽 550014)摘要:本文主要討論了如何構(gòu)建一個51指令集匯編器,主要從如何處理源程序中宏匯編指 令、如何解決將指令中的標(biāo)號地址轉(zhuǎn)化為實際物理地址以及如何最終將一條指令匯編為其對 應(yīng)的機器碼等問題入手討論了可行的解決方法,且對最終如何產(chǎn)生機器碼給出了兩種可行的 方案。文中所討論的各個問題及其解決方法均以得到實際的驗證。關(guān)鍵詞:匯編;匯編器;51指令集study the method of building a 51 assemblercao xiao

2、 long ,li hua(1.school of physic and electrical science,guizhou normal university,guiyang 550002,china;2.school of technology,guizhou normal universityguiyang 550014,china;)abstract: how to build an assembler which based on 51 instruction set is discussed in this paper, and it involves how to deal w

3、ith macro assembler instruction,how to translate those label address into physic address and how to translate instructions into machine code finally, and there are two ways to produce corresponding machine codes in this paper, all of the problems discussed have been solved practically.key words: ass

4、emble; assembler; 51 instruction set棊金項h:貴州省科學(xué)技術(shù)基金(黔科合j字lks201011號)作者簡介:曹曉龍(1976-08),男,湖南省長沙市,漢族,碩士研究生,講師,主要研究方向為soc系統(tǒng)級 設(shè)計;李華(1971-12),女,貴州省貴陽市,漢族,碩士研究生,副教授,主要研究方向為軟件與理論近年來,隨著soc系統(tǒng)級設(shè)計技術(shù)的發(fā) 展,應(yīng)用這一技術(shù)進行soc產(chǎn)品設(shè)計開發(fā)的 早期驗證越來越多地被采用。soc設(shè)計早 己成為集成電路設(shè)計的發(fā)展潮流。為了培養(yǎng) 適應(yīng)于新形勢下的高級人才,各高校相繼開 設(shè)了相關(guān)的課程以配合市場需求。其中51單片機仍ih作為各高校重

5、點開設(shè)的基礎(chǔ)課 程2,該課程的特點強調(diào)理論與實踐緊密 結(jié)合的原則,因此,一般情況下都需要配套 一定的實驗設(shè)備。多數(shù)為實驗箱,隨著時間 的流逝,這些設(shè)備將會出現(xiàn)老化,h許多實 驗無法得到驗證的情形出現(xiàn)。這種情況將造 成一定的資源浪費和投入的開銷加大。另 外,也因為實驗場地和吋間的限制,使得學(xué) 生很難在短期內(nèi)迅速掌握該門課程。為解決 上述問題,可以采用構(gòu)建單片機仿真實驗平 臺的做法以緩解孑盾,節(jié)省教學(xué)實踐,提高 學(xué)生動手能力。因此可以利用一些軟件工具 以實現(xiàn)仿真實驗室的構(gòu)建,例如比較流行的 專用于單片機開發(fā)的proteus軟件即可實現(xiàn) 上述功能。而systemc是由synopsys公司與 cowa

6、re公司針對各方對系統(tǒng)級設(shè)計語言的 需求,合作開發(fā)的可以較好地實現(xiàn)硬件的 系統(tǒng)級設(shè)計語言。并且,它將是系統(tǒng)級芯片 設(shè)計語言的發(fā)展趨勢。對于一個以單片機為核心的仿真平臺 的實現(xiàn),需要解決許多問題,諸如單片機指 令集仿真器的實現(xiàn)、各種外設(shè)芯片的建模、 可執(zhí)行程序文件的生成及導(dǎo)入等問題。為了 保證平臺的完整性,需要平臺中包含能夠?qū)?現(xiàn)對源程序文件進行匯編或編譯功能的模 塊,木文將討論一種可行的匯編方法。1 end指令的處理51宏匯編指令end的作川是表征程序 的結(jié)束點,只冇那些在end z前的內(nèi)容才能 作為參與最終的匯編。對該指令的解決方法較為簡單,將end z前的內(nèi)容進行復(fù)制,從而產(chǎn)生一個只包含

7、end之前內(nèi)容的臨時性文件。2 equ以及data宏指令處理equ以及data指令的格式一致,equ指 令的功能是將一個數(shù)或者特定的匯編符號 賦予規(guī)定的字符名稱,而data則是將數(shù)據(jù) 地址或代碼地址賦了規(guī)定的字符名稱。例如 abb equ r1mov a, abb對這兩條命令的處理如下:1)處理源程序文件中的equ、data命令,為此定義如下格式的結(jié)構(gòu)體struct labstruint type;int line;char symbol20;char value20;該結(jié)構(gòu)體用于記錄源程序文件中的equ 以及data前所定義的符號,其屮type用于 記錄符號的類別,如0表示標(biāo)號或符號是由 e

8、qu定義的,1表示由data定義的,而2表 示其他。line表示符號所在的行,symbol 存儲符號木身,value是equ或data之后所 定義的被替換字符。2)掃描源程序文件,找出所有的equ 或data所定義的符號,存入結(jié)構(gòu)體labstru 數(shù)組中。3)再次掃描源程序文件,找岀指令屮 所有操作數(shù)為上述兩種符號定義的標(biāo)號或 符號操作數(shù)。4)檢杳符號定義是否有效,這將按照 equ和data正確的語法規(guī)則進行檢杳,例如 指令中出現(xiàn)的符號操作數(shù)如果是由equ定義 的,則該定義必須在該條指令z前等。這一 功能的實現(xiàn)需要借助于結(jié)構(gòu)體中的line信 息。如果當(dāng)前的line值小于符號中由equ 所定義的

9、符號所在的行值則表示錯誤的語 法格式。除此之外還需要檢查equ所定義符 號是否為特定匯編符號或一個數(shù)據(jù)等。5)將轉(zhuǎn)換后的結(jié)果指令寫入一個新的 臨吋文件,該文件的內(nèi)容不再包含equ或 data宏指令。例如 di equ accmov dl,#23將替換為:mov acc,#233指令符號地址替換將指令屮的符號數(shù)據(jù)經(jīng)過計算示替換 成對應(yīng)的地址數(shù)據(jù)。例如ajmp delaydelay: mov ro,ftoffh假設(shè)此時計算出delay的地址為80h, 那么經(jīng)過替換后上述指令將被修改為ajmp 80h具體步驟為:1)從上一步產(chǎn)生的臨時文件小讀取一 行到變屋s中,去掉多余的空格,設(shè)置地址 變雖addr

10、的初值為0.2)從s小分離出一條指令的各個部分, 包括標(biāo)號、操作符以及操作數(shù)等,為此可定 義如下結(jié)構(gòu)的數(shù)組:char parts510;根據(jù)51指令的結(jié)構(gòu),一條指令格式如 下:標(biāo)號:操作碼操作數(shù);注釋 其中操作數(shù)最多可有3個,最少沒冇操 作數(shù)。即一條指令最多有5個有意義的部分, 因為注釋是被濾掉的部分,因此不予考慮。 這一步可利用c提供的字符串分離函數(shù)實 現(xiàn),也可自行編寫程序?qū)崿F(xiàn)。3)若該行指令為org宏指令,則設(shè)置地 址變量的值為org后面的地址操作數(shù)4)若為db> dw或ds宏指令且這些宏指 令前含有定義的符號,則將符號與當(dāng)前地址 入列。為此也定義一個記錄該類符號的結(jié)構(gòu) 體struc

11、t instr_lab 一char string30;unsigncd int addr;并定義該結(jié)構(gòu)體類型的隊列。5)如杲是指令,則計算指令的長度也就 是指令占的字節(jié)數(shù)。計算的原則是根據(jù)指令 中操作數(shù)的類別進行。例如如果指令是立即 數(shù),則需要加一或加二,根據(jù)立即數(shù)的長度 而定,并以計算的結(jié)果修改addr的值。若 指令前含有符號,則將符號入隊。經(jīng)過上述幾步將產(chǎn)生一個符號隊列,隊列 存儲程序中所有的由db、dw、ds定義的符 號或指令前的標(biāo)號及其地址。下面的部分主 要是將這些符號替換成對應(yīng)的地址數(shù)據(jù)。6)修改指令小的由db等広指令定義的符 號地址為實際地址,從頭逐行讀取文件,如 果是符號操作數(shù),

12、并且是由db等宏指令定 義的,則將隊列中對應(yīng)項的地址部分加以替 換。7)處理指令中的標(biāo)號地址,此時需要按 照51的地址計算方法進行計算。具體為如果轉(zhuǎn)移指令是2字節(jié)的則用下面的公 式進行計算:re 1二地址差-2 rel=feh-地址差 如果是3字節(jié)指令則用re 1二地址差-3rel=fdh-地址差向前轉(zhuǎn)移向后轉(zhuǎn)移向前轉(zhuǎn)移向后轉(zhuǎn)移并將計算的結(jié)果替換指令中的符號操 作數(shù)并由此產(chǎn)生臨時文件,該文件小所有的 符號地址均已被實際地址所替換。4機器碼生成這里討論兩種簡單可行的實現(xiàn)方法4.1根據(jù)每條指令產(chǎn)生翻譯函數(shù)。定義如下結(jié)構(gòu)體struct instr_stru 一char opstr10;pf p;其中

13、opstr用于存儲指令中的助記符 號,例如mov, add等。而p是一個函數(shù)指 針,用于調(diào)用與助記符號對應(yīng)的函數(shù)。函數(shù) 指針為如下定義typedef int (*pf)();51指令集共冇40多種助記符號。為此 定義該結(jié)構(gòu)體數(shù)組cs以存儲每條指令助記 符號及其調(diào)用的函數(shù)。在每個函數(shù)內(nèi)部將按照指令的語法規(guī) 則檢杳,判斷操作數(shù)類型,獲得操作碼以及 操作數(shù)的值,并按16進制格式記錄。例如cs0. opstr為acai 1, p扌旨向 acall函數(shù)。若讀到的指令為acall 40h則將通過p 調(diào)用acall函數(shù)將得到acall指令的操作 碼。因51結(jié)構(gòu)簡單,指令條數(shù)不多,從而 按照該方法可以實現(xiàn)對5

14、1指令的匯編過程。4.2利用文件比較的過程實現(xiàn)匯編過程 1事先建立一個文件,文件中每一行記錄的 格式如下:操作符操作數(shù)類別/操作數(shù),操作 數(shù)類別/操作數(shù),操作數(shù)類別/操作數(shù)操 作碼指令字節(jié)數(shù)例如mov a,立即數(shù)格式的指令在文件 中表現(xiàn)為:mova, #c 74 2牡表示操作數(shù)為立即數(shù),而去掉mov與a 之間的空格則是為了處理的方便,示而的數(shù) 據(jù)74是該指令的操作碼以及指令的字節(jié)數(shù)。2從文件中讀取一行指令字串,并轉(zhuǎn)換 成對應(yīng)上面的格式,1.保留字串中的操作數(shù) 部分。例如mov a,ro轉(zhuǎn)化為mova, roi(umova, 60h轉(zhuǎn)化為inova, &addrmova,#23轉(zhuǎn)化為niova, tic接著將轉(zhuǎn)換后的指令字串與文件屮的 記錄逐行進行比較,如找到對應(yīng)項,則獲取 其后的操作碼以及根據(jù)指令字節(jié)數(shù)產(chǎn)生操 作數(shù)以牛成該條指令的16進制格式的代碼。例如mov a, #23將得到代碼74和23。 最后將得到的指令碼產(chǎn)生一定格式的 文件,如intel hex文件格式。5結(jié)論本文對常用的51指令集的匯編方法進 行了討論,文中所描述的算法已經(jīng)在實際中 經(jīng)過驗證,利用算法所產(chǎn)生的hex文件能夠 應(yīng)用到proteus等軟件屮,并得到預(yù)期的效 果。參考文獻1邵作之,劉莉娟.基于sys

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論