匯編和編譯
① 匯編器和編譯器有什麼區別
匯編器(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)
② 匯編和編譯程序的區別急
匯編程序是將匯編語言(低級語言)翻譯成二進制機器指令的程序
編譯程序是將高級語言(java,c++)翻譯成二進制機器指令的程序
③ 編譯和匯編的區別是什麼
1.定義區別
①編譯原理旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。
②匯編語言(assembly language)是一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。
2.處理方式區別
①編譯過程與解釋挺像,區別就在於編譯是將所有的源代碼指令一次性成翻目標代碼並執行。
②匯編過程就是把匯編指令一對一地翻譯成01機器碼的過程。而採用這種處理方式的語言只有一類:匯編語言。
3.特點區別
①編譯語言的特點就是不需要解釋器的參與,所以運行比較快,但是編譯好的程序只能在當前平台運行,是個局限性。
②匯編語言是當今世界上歷史最早,應用最廣,功能最強大,運行速度最快的編程語言。但是匯編語言開發工期長,可讀性差,並且不能跨平台編程。
④ 編譯後一定要匯編嗎
這種事情從理論層面來說:不一定要與匯編語言有什麼瓜葛。你完全可以讓你的編譯器直接編譯成機器碼。大部分C/C++編譯器(不是所有的)之所以先編譯成匯編語言,是為了解構。從C到匯編的「翻譯」相對容易(都算是抽象語言,有語義的),同時匯編語言的編譯器效率很高,可以生成質量非常高的機器碼。所以兩者結合,可以突出各自的優勢,減少復雜度。
但是如果有必要,當然也可以直接編寫產生機器碼的編譯器,實際上Java/C#這樣的半編譯語言和Js這樣的腳本語言,都沒有先轉換成匯編的這一步。前者是因為強大的虛擬機技術,直接把位元組碼轉換成機器碼執行了,後者是靈活的解釋器,實時把代碼轉換成機器碼執行,而完全沒有「編譯」這一步(當然如果深究的話,出於性能考慮,很多高性能的解釋器也會提前「預編譯」一部分代碼,但這是具體實現,不是宏觀概念)。
⑤ 什麼是匯編程序和編譯程序有什麼區別
首先,簡介一下計機原理,假如有一個由磁粉組成的硬碟,那麼改變磁粉的排列,並通電,將引發電流大小的變化,這就是計機的數據來源。
那麼,查看磁粉是難以看見的,間接的表示就是:用一個如winhex的軟體打開,裡面的十六進制數就間接說明了磁粉的排列物理狀況。同樣,手動改磁粉即使生效,也未必「有用」。正如你所想,沒錯,既然電腦這機器這么麻煩,但它有人買,因為有鍵盤。一台正常的電腦由「固化」「程序」(bios)硬體去啟用主板上的各個元件,再拿個硬碟放操作系統。自然有辦法寫入數據了。
好了,回歸正題,所謂匯編,就是可以從那些有效的十六進制數據得出的東東,比如「b4....」在某一場合表示mov ......,於是乎,對照主板商等給出的文檔,想進行編寫一個程序,那麼就「mov.......」什麼的對著「b4........」什麼的堆進扇區就行了。編譯程序,動詞來說的話,是一個動作,不是程序,匯編程序是一個程序,名詞來說的話,風馬牛不相干,因為根據上述原理,把匯編代碼或c代碼轉成有效的「磁粉」數據,這就是一個編譯的過程,結果出來的就是編譯程序。
⑥ 什麼是編譯程序和匯編程序
編譯程序是把用高級程序設計語言或計算機匯編語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序,屬於採用生成性實現途徑實現的翻譯程序。編譯程序以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出;編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。
匯編程序是指把匯編語言書寫的程序翻譯成與之等價的機器語言程序的翻譯程序,是為特定計算機或計算機系列設計的一種面向機器的語言,由匯編執行指令和匯編偽指令組成。匯編程序輸入的是用匯編語言書寫的源程序,輸出的是用機器語言表示的目標程序。採用匯編語言編寫程序雖不如高級程序設計語言簡便、直觀,但是匯編出的目標程序佔用內存較少、運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。匯編程序主要有簡單匯編程序、模塊匯編程序、條件匯編程序、宏匯編程序、高級匯編程序幾種。
⑦ 解釋 編譯和編譯 匯編的區別是什麼
解釋和編譯針對的是高級語言的。是高級語言轉換成機器代碼的方式。編譯指的是一次性將程序代碼給轉換成機器代碼,這樣做好處是編譯之後的可執行程序方便移植,可以優化程序代碼,並且執行效率要比解釋語言的高!解釋是指邊解釋邊運行,解釋一條語句便執行一條。顯然這樣的程序執行效率是比較低的。比如C/C++用的是編譯,而basic用的是解釋。JAVA既用到解釋,又用到編譯。而匯編是一種低級程序設計語言,直接操縱底層硬體。是在機器語言(0,1代碼串)的基礎上採用助記符的方式發展而來的。很多病毒都是通過匯編語言寫的。用匯編編寫的程序執行效率非常高!只是不方便寫程序。匯編語言是低級語言,沒有語法,就是一條條機器指令的助記符而已,所以匯編的時候不需要語法分析。編譯時把高級語言處理成機器指令的過程,編譯的時候需要做詞法分析和語法分析,然後是代碼生成。