組合語言編譯實驗指導

2021-03-04 01:20:10 字數 3894 閱讀 7409

實驗一源程式的輸入和掃瞄

學時數:2

[實驗內容]:

1、 編制乙個源程式的輸入、掃瞄程式,從檔案中每次讀入一行到輸入緩衝區(可以用字元陣列實現);然後從緩衝區中依次取出字元顯示在螢幕上。

2、從檔案每次讀入一行到輸入緩衝區的功能(可以用字元陣列實現)用乙個子程式實現。

[實驗目的]:

1、通過自己編制乙個源程式的輸入、掃瞄程式,熟悉並了解從檔案中讀入資料到輸入緩衝區的過程。

[實驗步驟]:

1、準備: 用tc、vc++等開發工具;確定被處理的語言的語法特點(可使用現成語言如pascal、c等)。編好程式,寫好實驗報告。

2、上機:輸入源程式,修改、除錯,執行。

[程式設計思想]:

採用乙個子程式實現的形式。

(1)程式判斷原始檔是否為null,如果是,則輸出錯誤提示!如果不是,則進入迴圈。

(2)呼叫子程式readbuffer(),每次讀入乙個字元給字元變數,如果字元變數的內容不是回車符,則把字元變數的內容存入陣列buffer(),然後讀入下一字元,再判斷再存入陣列,直到一行全存入陣列,然後返回主程式,用輸出語句輸出剛才存入陣列的一行字元;

(3)如果沒有到檔案尾,則重複第(2)步,直到檔案結束,則退出主程式,完成任務!

[程式要求]:

1)例如首先輸入以下一段c語言的源程式,並以a.c的檔名儲存到磁碟中,然後執行自己編制的輸入、掃瞄程式,所得到的輸出應與輸入的原始檔a.c中內容相同。

例如: 輸入的a.c檔案內容:

main()

自編源程式:輸入、掃瞄程式源**(僅供參考):

//程式開始:

# include

# include

# include

//宣告標頭檔案

inti;

file*fp;

charbuffer[256];

//宣告變數

intreadbuffer() //讀字元子程式開始

return1;

} //子程式結束

main() //main()開始

while(!feof(fp))

printf("\n");

getch();

}fclose(fp);

getch();

} //main()結束

//程式結束

2)改變原始檔e:\\a.c內容為:

main()

執行自編的輸入掃瞄程式,檢查輸出結果必須與上面輸入的原始檔中的**相同。

[實驗報告]:

1、寫出除錯程式出現的問題及解決的方法。

2、寫實驗報告及程式清單。

3、報告給出測試的結果。

4、實驗小結

實驗二無符號數的有限自動機的實現

學時數:4

[實驗內容]:

無符號數的有限自動機的實現。利用狀態表和有限自動機的執行原理編制程式,使得程式能夠識別乙個輸入串是否為乙個無符號定點實數。

[實驗題目]:

1、理解有限自動機的作用;進一步理解自動機理論。

2、 用狀態圖和狀態表表示有限自動機;

3、以程式實現有限自動機的執行過程;掌握文法轉換成自動機的技術及有窮自動機實現的方法。

[實驗要求]:

1. 設計要求:利用狀態圖或狀態表相關理論,利用有限自動機理論。

2. 功能要求:輸入乙個單行無空格的字串(以「#」號結束),如果該字串是乙個合法的輸入,則顯示「接受」,否則顯示「不接受」。

3. 輸入/輸出示例(以無符號定點實數為例):

(1) 輸入:「3.14」,輸出:「接受」;

(2) 輸入:「3.1.4」,輸出:「不接受」;

(3) 輸入:「3ab」,輸出:「不接受」。

[實驗提示]:

1、無符號數的bnf描述如下:

1.《無符號數》 d 《餘留無符號數》 | . 《十進位制數》 | e 《指數部分》

2.《餘留無符號數》 d 《餘留無符號數》 | . 《十進位制數》 | e 《指數部分》 | ε

3.《十進位制小數》 d 《餘留十進位制小數》

4.《餘留十進位制小數》 e 《指數部分》 | d 《餘留十進位制小數》 | ε

5.《指數部分》 d 《餘留整指數數》 | + 《整指數》 | - 《整指數》

6.《整指數》 d 《餘留整指數數》

7.《餘留整指數數》 d 《餘留整指數數》 | ε

2、將g[《無符號數》]文法轉換成有限自動機見圖1。

圖13、構造狀態矩陣;將有限自動機的狀態s1 s2 ……sn及輸入的字a1 a2 ……am 構成乙個n*m的矩陣。

1)根據狀態矩陣設計出乙個詞法分析程式識別無符號數。

2)掃瞄無符號數,根據文法給出無符號數出錯的位置。

[實驗報告]:

1、寫出無符號數詞法分析的思想。

2、畫出演算法流程圖。

3、寫出除錯程式出現的問題及解決的方法。

4、列印實驗報告及程式清單。

5、報告給出測試的結果。

6、實驗小結

試驗示例:有限自動機的執行

程式功能:

利用狀態表和有限自動機的執行原理,識別乙個輸入串是否為乙個有效的無符號定點實數。

例:執行自編程式後

鍵盤輸入:1#

輸出顯示:接受

鍵盤輸入:3.14#

輸出顯示:接受

鍵盤輸入:3ab#

輸出顯示:不接受

鍵盤輸入:1.2.3

輸出顯示:不接受

輸入資料要求:不能有空格,以'#'結束(在本程式可以不用'#'結束)。

輸出:如果是無符號定點實數,顯示「接受」;否則顯示「不接受」。

實驗三詞法分析處理(查添符號表)

學時數:4

[實驗內容]:

1、 查添符號表(識別符號為以字母開頭的字母數字串)。

2、 讀識別符號若表中已有該識別符號,則取出其在表中的位置,輸出該識別符號極其編號;否則產生乙個新的編號,連同識別符號一起添入名錶;最後輸出識別符號表。

[實驗目的]:

1、 了解符號表的幾種結構,掌握符號表的訪問方法。

2、 了解編譯時如何對識別符號進行處理。

3、掌握詞法分析的處理方法。

[實驗要求]:

1、 從鍵盤上輸入識別符號,識別符號之間用逗號隔開,最後以分號結束(也可以用其他符號做結束標誌)。

如:arr,bet,x1,x2,y,addr1;

2、編號從100開始,最後輸出的識別符號不能有重複出現;

3、識別符號的長度必須小於或等於8個字元。

[實驗步驟]:

1、 根據識別符號的文法規則,畫出識別符號的狀態轉換圖。

2、 畫出讀取識別符號的程式框圖。

3、 寫出程式,上機除錯並輸出結果。

程式設計說明:(供參考)

1、變數陣列的說明:

1)定義乙個工作陣列a,該陣列有8個元素(識別符號長度為8)。

2)定義乙個識別符號表結構id,其中包含兩個成員:陣列name和變數addr。陣列name存放登記識別符號名字,長度為8個字元的陣列變數,記錄了識別符號的名字。

本程式只識別識別符號的前8個字元,超過8個字元的部分無效。變數addr則記錄識別符號編號,即該識別符號在符號表中所對應的位置。

3)如果工作陣列a中的元素為合法識別符號,則將其名字填入結構id中的name陣列,將其編號填入addr陣列。如果工作陣列a中元素為非法識別符號,錯誤標誌errty置1,顯示出錯資訊。

4)用變數k記錄讀入的識別符號個數。

5)用變數i記錄每個識別符號讀入的字元個數。

6)用變數errty記錄識別符號首字元為非字元的錯誤標誌。

工作陣列a中為非法識別符號,錯誤標誌errty置1,顯示出錯資訊。

7)用變數errty1記錄識別符號中有非字母數字字元的錯誤標誌。

2、程式框圖:yn

ynyynny n

[實驗報告]:

1、寫出查添符號表的設計思想。

組合語言實驗報告組合語言實驗指導書

實驗報告 實驗課程組合語言程式 學生代號信念 學號5215201314 專業班級網路間諜088班 2009年 12月 25日 實驗1 利用debug除錯組合語言程式段54 實驗3 初級程式的編寫與除錯實驗 二59 實驗5 分支程式實驗65 實驗6 迴圈程式實驗68 實驗7 子程式實驗69 實驗8 字...

組合語言實驗指導書

王勇劉輝 上海電力學院計算機系 2007年10月 目錄實驗一 debug命令實驗 1 實驗二字串傳遞實驗 7 實驗三迴圈程式實驗 15 實驗四多重迴圈實驗 21 實驗五分支程式實驗 28 實驗六子程式引數傳遞實驗 34 實驗七子程式巢狀實驗 37 實驗八中斷處理實驗 42 實驗九 bios中斷實驗 ...

組合語言程式設計實驗指導書

計算機工程教研室 實驗課程 組合語言程式設計 適用專業 電腦科學與技術專業 上海應用技術學院 2012年3月 目錄目錄 i 前言 1 上機實驗的要求和步驟 1 實驗報告的要求 2 組合語言上機操作簡介 3 編輯 3 彙編 3 連線 5 執行和除錯 5 實驗一資料定義和資料傳送 8 實驗二多項式運算 ...