編譯原理macro有什麼用
① 輕松匯編怎麼用
一步 基本的編輯功能
這里是介紹基本的編輯功能,就像在介紹Windows自帶的記事本。 文件菜單: 新建:新建一個文件,快捷鍵為 Ctrl+N ; 保存:保存當前文件,快捷鍵為 Ctrl+S ; 打開:打開一個文件,快捷鍵為 Ctrl+O ; 退出:退出輕松匯編 ; 另存為: 把正在編輯的文件存為另外一個文件 ; 最近使用過的文件:在這里紀錄了您最近使用過的文件,可以快速打開。如果 您不希望別人看到您編輯過什麼程序,可以點擊「清空全部紀錄」。 編輯菜單: 全選:選定正在編輯的全部內容,快捷鍵為 Ctrl+A; 復制:復制選定的內容到剪貼板,快捷鍵為 Ctrl+C; 剪切:復制選定的內容到剪貼板,並刪除所選定的內容,快捷鍵為 Ctrl+X; 粘貼:把剪貼板中的內容復制到編輯窗口,快捷鍵為 Ctrl+P; 刪除:刪除選定內容,快捷鍵為 Del; 撤消:撤消上一步操作,快捷鍵為 Ctrl+Z,但是注意只能撤消一次。 查找菜單: 查找:在所編輯的文件中查找字元串,快捷鍵為 Ctrl+F; 替換:在所編輯的文件中把一個字元串替換為另一個,快捷鍵為 Ctrl+R; 查找下一個:從當前游標起,查找下一個,快捷鍵為 F3;
第二步 編寫一個匯編程序
編寫第一個匯編程序。 打開輕松匯編就自動為您新建了一個模板,直接在上面添加數據定義和代碼就可以了。 一般來說,都是先寫堆棧段。輸入「stacks segment stack」,用空格隔開關鍵字。然後按下回車鍵換行——您會看到,輕松匯編自動把剛才輸入的那一行程序的格式整理好了。 第二行應該是堆棧的大小了,應該輸入「db 128 p(0)」,輸入「bd 128 p(0)」試試,會怎樣?在換行時沒有整理格式。如果您輸入的匯編程序有拼寫錯誤,輕松匯編會檢測出來,並且拒絕整理錯誤行的格式,這時候您就可以避免這類簡單而又隱蔽的錯誤。當然,如果您確定您輸入的是正確的,而輕松匯編沒有整理格式,或整理的格式不好看,請告訴我這個錯誤,不勝感激,聯系方式見左側小字。在您編程的過程中,左側的導航欄會隨時更新您的語法信息,可以通過導航欄來快速定位您的語法元素。 接著,把您所想要寫的程序寫完,進行下一步:編譯、運行一個程序。 如果是以前寫的程序,在輕松匯編中打開後,點擊:運行-整理格式,輕松匯編會對整個程序格式進行整理。
第三步 編譯、運行一個匯編程序
把您剛才寫的那個匯編程序編譯、運行一下,熟悉操作。 點擊:運行-生成目標文件,輕松匯編就會自動生成目標文件,另外,根據您的設定(如何設定,請參見第四步),還會生成其他的文件。默認是生成交叉文件和映像文件,點擊右上角的按鈕就可以看到這兩個文件(這兩個文件的作用,請參見疑難解答)。 如果有語法錯誤,編譯會失敗,錯誤信息會顯示在下面的窗口中,點擊錯誤信息,錯誤行就會突出顯示出來。 點擊:運行-運行,輕松匯編就會會自動完成編譯、鏈接、運行當前程序。在程序運行時是全屏方式,結束後變成窗口方式,不會退出。 點擊:運行-調試,輕松匯編就會自動完成編譯、鏈接、調試的工作,使用的是TD作為調試工具。 就這些了,因為在輕松匯編下編譯、運行一個程序確實簡單。 在匯編時還有其他的可能,那麼,請進行第四步:讓匯編變的更輕松。
第四步 讓匯編變得更輕松
對輕松匯編進行個人設置,讓它更符合您的習慣。 在輕松匯編中根據初學者的特點,提供了很有特色的功能,如果您不喜歡的話,可以關掉它,對於運行的參數,同樣也是通過設置來改變的。下面我們一一介紹: 在設置窗體中: 格式設定:在這里的下拉框中有三個選項,全部大寫、全部小寫和不處理, 選定後的結果分別是在進行格式處理時對格式化結果的處理。 自動整理格式:選定後在換行的時候會對原來行進行格式整理,如果沒有選定就不整理格式。 採用調試模式:選定後在編譯時包括參數/zi,在鏈接時包括參數/v,這樣生成的可執行文件比較大,包含了用TD調試時所需要的信息,可以實現源代碼調試;如不選定,不能實現源代碼調試,在調試的時候不太方便。推薦選定該選項。 編譯生成Com文件:選定該選項後在鏈接時包括參數/t,如果你寫的是一個com文件的匯編代碼,那麼就可以選定以生成一個com後綴的文件。在選定該選項後調試時不能實現源代碼調試,所以最好在編寫、調試的時候不選定,最後調試通過後再選定該選項生成com文件。如果不選定,即使是com文件的匯編代碼也是可以編譯通過,只不過生成的是一個Exe文件。推薦不選定。 自定義參數:就是自己提供TASM和TLink的參數了,如果你對TASM了解比較多,可以實現其他的參數功能,但是對於一般的學習者,並不需要自定義參數,以免造成程序運行時出問題。 程序格式:在這里控制格式整理的方式,您可以自己設置後看看效果。不過推薦用默認方式。 顯示導航欄:選中後顯示導航欄,否則不顯示。 顯示錯誤欄:選中後顯示錯誤欄,否則不顯示。推薦選中,因為不選中的話,有錯誤它也不會自動顯示的。
編輯本段三,疑 難 解 答
交叉文件和映像文件是什麼?
交叉文件和映像文件是編譯過程和結果的詳細顯示。其中交叉文件是在第二遍掃描中建立的,映像文件是對可執行文件的說明,所以只有生成了可執行文件,才會有映像文件,但是只要不發生嚴重錯誤,就有交叉文件。 學會閱讀交叉文件對於理解匯編原理更加重要,交叉文件說明如下: 1、編譯後的機器代碼和匯編語言的對應關系。 在交叉文件的主體部分,就是說明編譯後的機器代碼和匯編語言的對應關系的,分為三列,第一列是編譯後機器代碼在內存中的地址,第二列是編譯後的機器代碼,第三列就是你寫的匯編語言和注釋。要注意的是,在交叉文件中的數字全部都是用十六進製表示的,沒有十進製表示的數字。 下面是一段交叉文件的原文: 000E B1 02 MOV CL,2 ;把2送到CL中 0010 F6 E9 IMUL CL ;CL中的數值和AL中數值相乘 0012 FE C0 INC AL ;AL中的數值加1 在第一列是對應指令在內存的地址,第一條指令「MOV CL,2」的起始地址是000E,佔了兩個位元組(B1 02),所以第二條指令的起始地址是0010。 在第二列是編譯後的機器指令,第一條指令「MOV CL,2」編譯後的機器代碼是「B1 02」,其中B1表示:1)是MOV指令;2)定址方式是立即數定址;3)使用的是CL寄存器。02表示操作數是02H,十六進制數2。第二、三條指令也是以此類推,查看一下指令格式就可以了。編譯後的可執行文件里寫的就是第二列的內容,您可以用UlTra Edit等十六進制編輯器打開看一看。 第三列就是被編譯的匯編指令。 2.宏擴展情況。 在存在著宏擴展的部分,都用「1」標出,如下所示: 0024 E8 0035 CALL PINISET MOUTPUT CLINE ;輸出CLINE 0027 BA 0001 R 1 MOV DX,OFFSET CLINE 002A B4 09 1 MOV AH,09H 002C CD 21 1 INT 021H 在這段程序中,事先定義了宏MOUTPUT: MOUTPUT MACRO PSTR ;輸出PSTR MOV DX,OFFSET PSTR MOV AH,09H INT 021H ENDM 而CLINE是一個數據。 您可以看到,宏被擴展成的三條指令都用「1」標出來了。 3.錯誤列表。 在交叉文件的匯編語言的錯誤行的上面標出了錯誤原因、錯誤行、和錯誤類別,在交叉文件的最後,還列出了總的錯誤數。 4.段、子程序、宏、變數的清單。 在交叉文件的最後部分是對匯編程序中所有的段、子程序、宏、變數的清單,列出了它們的起始地址、值、類型等特徵。 學會閱讀交叉文件,可以對了解指令格式、編譯原理有很大的幫助,而且通過閱讀交叉文件,可以了解實際的宏擴展情況,有利於程序排錯。
為什麼語法錯誤的提示信息是亂七八糟?
輕松匯編調用的是TASM 5.0作為內核編譯匯編程序的,錯誤信息也是通過TASM 5.0來截獲的。為了簡便安裝,把TASM 5.0功能實現所需要的最少的幾個文件附帶安裝了,它們是TASM.Exe,TLink.Exe,TD.Exe,RTM.Exe。 其中,TASM.Exe的版本是4.1,TLink.Exe的版本是7.1.30.1。如果發生了上述情況,很可能是被替換成了不同的版本,您可以再其他地方拷貝一個相同版本的過來。或者重新安裝輕松匯編。現在網上很多TASM5就是輕松匯編所調用的。
為什麼運行結果和匯編源代碼不一致呢?
在有些情況下,會發生這種問題:修改了源代碼以後再運行程序,運行的結果卻是修改以前的,似乎修改的沒有效果! 解決這個問題的辦法是在修改源代碼以後,都要先編譯(Ctrl+F9),在編譯通過後,再鏈接(F9),然後再運行或調試,否則修改就沒有效果。 之所以會這樣,是因為在輕松匯編中,編譯只負責把匯編的源代碼編譯成目標文件(*.obj),而鏈接只負責把已有的目標文件鏈接成可執行文件(*.exe),而運行只負責運行已經存在的可執行文件,調試也只負責調試已經存在的可執行文件。這是符合在命令行下寫匯編程序的規則的。 在這種情況下,如果你先打開一個匯編程序,第一次編譯、鏈接、運行或調試,都很正常。接著,你修改了源代碼,再運行,結果肯定是修改以前的,因為可執行文件還是按修改前的源代碼生成的,鏈接一遍再運行,結果還是修改以前的,因為目標文件是按修改以前的源代碼生成的,那由此生成的可執行文件自然也是按修改以前的代碼生成的了。所以必須重新編譯一遍再重新鏈接一遍,然後再運行或調試,就沒問題了。
② C語言中的每條可執行語句和非可執行語句最終都是將是背轉換成二進制的機器指令為什麼是錯的
諸如括弧、注釋等非可執行語句並不會轉化為機器指令,所以是錯的。解決方法如下:
1、首先,編寫For循環第一句。