當前位置:首頁 » 編程軟體 » 匯編編譯器

匯編編譯器

發布時間: 2022-01-12 10:51:35

A. 匯編語言編譯器是怎麼編寫的

編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款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等動態語言
虎書中也有描述。當然看自己功力了

B. 匯編器和編譯器有什麼區別

匯編器(Assembler)是將匯編語言翻譯為機器語言的程序。一般而言,匯編生成的是目標代碼,需要經鏈接器(Linker)生成可執行代碼才可以執行。
匯編語言是一種以處理器指令系統為基礎的低級語言,採用助記符表達指令操作碼,採用標識符表示指令操作數。作為一門語言,對應於高級語言的編譯器,需要一個「匯編器」來把匯編語言原文件匯編成機器可執行的代碼。常用的高級語言編譯器有Microsoft公司的MASM系列和Borland公司的TASM系列編譯器,還有一些小公司推出的或者免費的匯編軟體包等。

編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。一個現代編譯器的主要工作流程:源代碼 (source code) → 預處理器 (preprocessor) → 編譯器 (compiler) → 目標代碼 (object code) → 鏈接器(Linker) → 可執行程序 (executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言,而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)

C. 匯編語言編譯器是怎麼來的

第一個軟體,顯然是用機器語言寫的。

當用機器語言寫成了文字處理軟體,才能用屏幕、鍵盤打字。

當用機器語言寫成了編譯軟體,才能把打好的字,編譯成機器碼。

D. 匯編語言的編譯器是用什麼語言寫的,為什麼

直接用指令碼寫出第一個匯編語言編譯器,然後就可以用匯編語言寫新的編譯器,其實很多語言都可以寫匯編編譯器

比如第一個C語言編譯器可能是用匯編寫的,但是以後的C編譯器都可以用C語言來寫,神奇吧,哈哈

E. 匯編編譯器,

如果你只是為了學習的話,推薦試試 em8086.

調試本身推薦試試 turbo debugger

匯編語言就是這樣的,並不是為了方便學習而設計的。

F. 請問學x86匯編語言用什麼編譯器

編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦

一般開發編譯器的話。有兩條路選擇
1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板
詞法語法都可以使用這些工具自己生成
然後自己編寫生成的中間碼和生成的機器碼就可以了
一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣

2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器
lcc-這個是ANSI C99標準的編譯器是開源的
或者nasm,watcom等編譯器到上不少開源的編譯器

總的來說。高級語言編譯器比較難寫
如果想快速寫出一個的話
可以採用第一種做法。利用工具生成語法詞法模板
先寫一個簡單的匯編編譯器比較簡單
開源的有nasm,jwasm(支持masm語法開源的編譯器)

fasm(這款編譯器是自舉的.就是自己可以編譯自己),

剩下的就是自己做好語言規則關鍵字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等動態語言
虎書中也有描述。當然看自己功力了

G. 匯編語言的編譯器是運行在什麼平台上

機器可以識別的是高低電平,將高低電平用 0,1 來對應表達,就是二進制代碼
二進制代碼肯定是不便於記憶的,因此,為了便於記憶,將可以執行一項功能的二進制代碼段用一個符號來代替,就產生了匯編語言。
那麼匯編的過程,就是將這個符號還原成二進制代碼的過程。

這個過程,可以由人工來做,由機器來做...

那麼,我們的電腦上來完成這個過程的,就是傳說中的編譯器。

這個匯編的編譯器是怎麼做成的?是直接用二進制代碼0和1寫的嗎?
編譯器本身就是一個可執行程序。
編寫這個可程序,和編寫通常程序的過程相同,所以隨意用什麼語言來寫。然後再通過編譯,生成可執行程序。

那這個二進制的0、1是以什麼形式存放的,存放在哪裡?
可執行程序是什麼形式的,取決於操作系統。
存放形式,取決於存儲器的物理性質,可以肯定的是存放在存儲器。

如果用我們的電腦,怎麼輸入這些0、1,讓電腦識別?
用我們的電腦,需要通過輸入設備來輸入,通常為鍵盤、滑鼠...
過去就像樓上說的,也有用紙帶、撥碼開關或者其他什麼的。

----------------------------------------------
其實我就是想弄明白硬體和軟體是怎麼鍥和的,操作系統這個巨大的軟體可以直接在電腦硬體上運行,那其他軟體為什麼一定要在操作系統上才能運行呢?

其他的軟體不是一定要在操作系統上才能運行。只是,操作系統使軟體的運行不必考慮硬體的差別,也就是說,針對操作系統平台所編寫的程序可以適用於該操作系統可以運行的所有硬體平台,而不必針對每一個不同的硬體都編寫一個程序。

是不是要調用系統裡面的一些庫文件啊?如果是,那windows怎麼不需要啊?它怎麼能只憑自己在安裝時所帶的那一套各種各樣的文件就能在裸機上運行了呢?

WINDOWS本身就是操作系統...

那個,你要實在想明白這個問題,就看看計算機組成原理還有軟體工程的相關內容吧。

H. 求匯編語言編譯器

微軟的是MASM32套裝,可以在Windows下使用。
NASM也是一個使用較多的匯編器,搜索「NASM"即可找到。但在Windows下使用一般要求搭配適當的連接器(連接程序Link),可以使用ALink等。

I. 用什麼樣的匯編語言編譯器好

學習時,建議不要使用別人做好的集成環境,而是使用單獨的匯編、連接和調試工具。

因為,匯編語言一般不是個人所學的第一門程序設計語言。使用單獨的匯編工具,有助於更清楚地了解語言程序的處理生成過程,更靈活地使用命令選項。這對達到學習匯編語言的學習目的---->更深入地了解計算機系統,有很大的幫助。

我推薦使用TASM 5.0
它全兼容MASM 6,且有所增強,甚至可以在一定程度上支持面向對象技術。
它最大的優勢是所配的調試程序:Turbo Debugger,功能強大,界面友好,易學易用,非常非常的棒。

如果你是在32位的操作系統如XP、WIN7等裡面用它,需要將TD的工作方式設成WIN 95兼容模式運行。
如果是在64位的系統中使用,則必須要安裝一個DOSBox ,在它提供的純DOS環境中運行。

至於匯編源程序的編輯器,可以使用的工具有很多選擇,比如UltraEdit就很不錯。

J. 匯編語言編譯器的TASM的用法

TASM是Borland公司推出的匯編編譯器,也是一種使用很廣泛的編譯器,和MASM相比,TASM的升級沒有這么頻繁。TASM早在1.0版本就有了對80386處理器指令的完全支持(MASM要到5.0版本才支持80386指令),1989年推出的1.01版本修正了1.0版的一些錯誤;早期的版本還有TASM 3.0和TASM 4.0,其中4.0版是TASM系列編譯器編寫DOS程序使用最廣泛的版本。
到目前為止,TASM的最後一個版本是5.0版,這個版本支持Win32編程,並單獨為Win32編程附帶有一整套的32位程序:32位的編譯器TASM32.EXE、鏈接器TLINK32.EXE和資源編譯器BRC32.EXE。與這些32位程序對應的16位工具在軟體包中依然存在,文件名為TASM.EXE,TLINK.EXE和BRC.EXE等。
TASM 5.0命令行的使用方法是:
TASM32 [選項] 源文件名[,[目標文件名],[列表文件名],[索引文件名]][;]
在Win32編程時TASM的常用選項如下表所示。
選 項
簡 介
/ml,/mx,/mu
對大小寫是否敏感:ml=全部敏感,mx=全局變數大小寫敏感,mu=不敏感,Win32編程中必須用ml選項
/m#
允許第#次編譯掃描時可以向前引用,一般使用/m2
/i路徑
設定include文字所在的路徑
/l,/la
lst文件的格式:/l為正常格式,/la為擴充格式
/zi,/zd,/zn
符號調試信息的控制:/zi為全部,/zd為僅有行號,/zn為不產生調試信息
TASM和MASM之間的導入庫和目標文件等不能通用,程序員無法用Microsoft的鏈接器來鏈接TASM產生的obj文件,反之亦然,這是因為TASM的庫文件和obj文件一直是OMF格式,與Microsoft使用的COFF格式不兼容

熱點內容
筆記本什麼配置能流暢運行cf 發布:2024-09-20 00:14:19 瀏覽:951
實測華為編譯器 發布:2024-09-19 23:50:52 瀏覽:821
linux匯總 發布:2024-09-19 23:46:39 瀏覽:452
阿里雲伺服器環境搭建教程 發布:2024-09-19 23:21:58 瀏覽:837
黃色文件夾圖標 發布:2024-09-19 23:19:22 瀏覽:684
mysql資料庫導出導入 發布:2024-09-19 23:00:47 瀏覽:183
lua腳本精靈 發布:2024-09-19 23:00:41 瀏覽:659
任務欄文件夾圖標 發布:2024-09-19 22:54:25 瀏覽:101
解壓來一波 發布:2024-09-19 22:46:36 瀏覽:933
mysqlpythonubuntu 發布:2024-09-19 22:46:27 瀏覽:501