匯編語言的編譯
1. 匯編語言編譯器是怎麼編寫的
編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦
一般開發編譯器的話。有兩條路選擇
1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板
詞法語法都可以使用這些工具自己生成
然後自己編寫生成的中間碼和生成的機器碼就可以了
一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣
2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器
lcc-這個是ANSI C99標準的編譯器是開源的
或者nasm,watcom等編譯器到www.sf.net上不少開源的編譯器
總的來說。高級語言編譯器比較難寫
如果想快速寫出一個的話
可以採用第一種做法。利用工具生成語法詞法模板
先寫一個簡單的匯編編譯器比較簡單
開源的有nasm,jwasm(支持masm語法開源的編譯器)
http://www.japheth.de/JWasm.html
fasm(這款編譯器是自舉的.就是自己可以編譯自己),
http://flatassembler.net/
剩下的就是自己做好語言規則關鍵字map
引用高手的話。語言map做好了你的編譯器也做好一半了
剩下的都是機械性的工作了。
生成x86或者arm指令。
優化工作這個很難解釋.根據你所需要的做吧
畢竟可以做出一個無錯,又XX的編譯器已經很難得
你可以選擇使用現有的編譯器開發自己的編譯器
然後等到你的編譯器支持相當數量指令和成熟度的時候
使用自己的語法重新寫一遍編譯器.
這樣你就可以用自己的編譯器開發自己的編譯器了(是不是很邪惡?)
另外舉幾個例子
Delphi的編譯器是C++ Builder開發的。
而C++ Builder的IDE是Delphi開發的
C++ Builder的編譯器是C++ Builder開發的-這個就是編譯器自舉了。。Delphi和C++ Builder共享一個後端化優化器。
Delphi 早期的版本的編譯器是tasm直接編譯的。可見Anders的匯編功力多強悍(Anders也就是後來VJ++,C#,.NET工程的核心架構師.最關鍵的靈魂級人物)
VC++的編譯器是VC++開發的。很明顯這都說明了編譯器自舉
自己開發自己。如果一個編譯器可以做到自己編譯自己。那基本上就可以實現任何功能了。
關於編譯器開發的書籍可以看一下
龍書《編譯原理(第二版)》
虎書《現代編譯原理-C語言描述》
鯨書《高級編譯器設計與實現》
建議從鯨書看起。然後是龍書
再來是虎書--虎書裡面描述了許多現代編譯器(正如其名)技術
例如面向對象啦,優化,垃圾回收等等.
鯨書看完基本上就可以實現一個簡單的Tiny C編譯器了
然後在龍書鞏固,讀一下語言規范,自己看一些開源的匯編編譯器代碼
自己就可以嘗試做一個匯編語言編譯器了.等到技術提高了
在嘗試做一些高級語法識別,參考LCC代碼做一下ANSI C99的
C語言編譯器。再來就看你自己的興趣和領悟度拉
如果想支持C++的話就得要對編譯器做許多方便的研究
類似Java那種跨平台或者Ruby,Python等動態語言
虎書中也有描述。當然看自己功力了
2. 怎麼編譯匯編語言程序
計算機硬體系統只懂自己的指令程序,而不懂其他語言程序。因此,想用匯編語言或高級語言,則必須有這樣一程序,它將用匯編語言或高級語言寫成的程序轉換成等價的機器語言程序,我們稱這種程序(轉換)為翻譯程序(Translator),把匯編語言的翻譯程序稱為匯編程序( Assembler ),把高級語言的翻譯程序稱為編譯程序( Comiler )。編譯程序也稱為編譯器,它的輸入對象稱為源程序( Source program ),輸出對象稱為目標程序( Object program )。
3. 匯編語言編譯器是怎麼來的
第一個軟體,顯然是用機器語言寫的。
當用機器語言寫成了文字處理軟體,才能用屏幕、鍵盤打字。
當用機器語言寫成了編譯軟體,才能把打好的字,編譯成機器碼。
4. 匯編語言編譯
1、編程語言包含匯編語言,匯編語言只是編程語言的一種。
2、編程語言:
編程語言(programming language),是用來定義計算機程序的形式語言。它是一種被標准化的交流技巧,用來向計算機發出指令。一種計算機語言讓程序員能夠准確地定義計算機所需要使用的數據,並精確地定義在不同情況下所應當採取的行動。
3、匯編語言:
匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應的,不同平台之間不可直接移植。
5. 匯編語言的源程序需要編譯嗎
匯編語言不是機器語言,肯定要先翻譯成機器語言(.obj文件),再連接成可執行文件才能被計算機執行。
如果是裸機,可以不用連接。
6. 什麼是匯編、匯編語言、編譯三者有什麼區別和聯系
匯編是面向機器的程序設計語言;
編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0;
7. 匯編語言是用什麼軟體編譯的
《匯編語言》清華大學出版社 王爽版,這是比較全面的匯編教材,適合初學者。你以前學的是高級軟體編程,現在學匯編需要了解計算機的組成知識。編譯器就用masm 5.0就可以。是在dos下的。
8. 匯編語言的編譯
很顯然是路徑錯誤,設置正確的路徑即可。設置路徑:開始-->運行-->cmd (回車)
cd \(回車)
d:(回車)
cd D\TEMP\ABC\123(回車)(假如這是正確的路徑的話)
9. 匯編程序是怎麼編譯的
匯編語言是一種低級語言,匯編語言是匯編指令集、偽指令集和使用它們規則的統稱,使用具有一定含義的符號為助憶符,用指令助憶符、符號地址等組成的符號指令稱為匯編格式指令。
過程:
編輯:用編輯軟體(EDIT.EXE或記事本)形成源程序(.ASM)
匯編:用匯編程序(MASM.EXE)對源程序進行匯編,形成目標文件(.OBJ),格式如下:MASM LX.ASM;
連接:用連接程序(LINK.EXE)對目標程序進行連接,形成可執行文件(.EXE),格式如下:LINK LX.OBJ;
執行:如果結果在屏幕在顯示,則直接執行可執行文件。
調試:用調試程序(LINK.EXE)對可執行文件進行調試,格式如下:DEBUG LX.EXE
匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標號(Label)代替地址碼。匯編程序(如MASM)的原理實際上就是把匯編的代碼轉成電腦可以識別的二進制碼
10. 匯編語言的那個編譯鏈接 的詳細過程 每一步驟
LZ請跟著我的操作走
1.將寫好的匯編代碼保存為1.asm
2.將1.asm復制到c盤下
3.點開始(即左下標那個windows圖標),找到運行,或(附件中的命令提示符)
4.找到運行後,輸入cmd 或 command
5.進入後輸入cd c:\
6.輸入masm 1;(1後面有分號),然後回車
7.輸入link 1;然後回車
8.cls清屏然後回車
9.輸入1.exe,然後回車
10.完成
至於怎麼debug
步驟:
1-8同上
9.輸入debug 1.exe,然後回車
10.完成
至於debug 中的 'r' 'd' 't' 自己上網找大把
我的系統是win 7,
你的masm 和 link debug 要放在C:\Windows文件夾下
PS: 若有不明白的地方,可以追問