導航:首頁 > 源碼編譯 > 編譯程序的結果是匯編

編譯程序的結果是匯編

發布時間:2023-02-11 05:34:34

編譯器為什麼會生成匯編語言而不是機器語言

計算機只能識別二進制代碼,所以機器指令是由二進制代碼組成的,即你所說的機器語言。所謂匯編語言,只是一種符號,用來方便人們使用,否則你看到的都是一串串的01011011之類的信息,一眼就認出它是什麼指令非常困難,而用匯編語言這種符號,一看就知道是什麼指令了。這種符號語言用助記符來表示操作碼,用符號或符號地址來表示操作數或數地址,它與機器指令是一一對應的。(樓上各位表述的所謂「步驟」論是不確切的)
所以,並不是你說的「生成匯編語言而不是機器語言」,生成的是機器語言,你在調試器或反匯編程序中看到的匯編語言代碼只是由反匯編程序把機器指令翻譯成你看得懂的符號--匯編語言--而已。(比如你在OD或IDA中可以看到每行匯編指令前面都有機器碼,如push ebp的機器碼是55h,單看55,你不是熟手的話可能還不知道它是什麼指令,後面給你顯示出符號"push ebp",你一下子就明白了,這就是一一對應的關系,連"55"都是為了讓你看的方便,否則應是01010101,即8個電子元件的電源開、關狀態)
同樣的道理,你在十六進制編輯器(如winhex、HexWorkShop等軟體)中看到的是十六進制每行16位元組排列的,那也是經過把二進制代碼每位元組轉換成十六進制顯示給你看的。

關於平台問題,當然會有影響,不同的CPU有不同的指令系統,就連同一廠家的CPU指令系統都不同,比如Intel公司的CPU,從最早的到現在的,指令不斷增多,什麼MMX、SSE等等新指令集不斷出現,更不要說不同廠家的CPU了。當然它們之間也有很多兼容的指令集。

㈡ C#語言經編譯後得到的是匯編指令機器指令本機指令CIL中間語言指令

C#是解釋型語言,不是編譯型語言。
只要不是"直接編譯成機器指令並直接運行機器指令執行檔"的編譯語言,就屬於解釋語言。
Java,C#、VB.net等的源碼先編譯成位元組碼,再由虛擬機「解釋」執行位元組碼。

因此 C#語言經編譯後得到的是CIL中間語言指令 即位元組碼

呵呵 滿意就選滿意回答啊

㈢ 為什麼編譯器後端生成的是匯編而不是c語言

編譯器後端生成的應該是機器語言,也就是二進制語言。
匯編語言和機器語言一一對應,所以有時調試顯示的是匯編而已。
至於為什麼是機器語言而不是C,是因為編譯的目標是給機器運行用的,機器只能"看懂"機器語言。

㈣ 編譯程序把源代碼編譯為的目標代碼是什麼代碼是不是匯編

這個問題比較復雜,其實來說,編譯器可以翻譯高級語言為任何低級語言或機器語言。像JAVA,.NET的編譯器是編譯結果是中間代碼(可以理解為一種低級語言),由相應解釋器執行;像C之類的編譯以後可以是根據不同平台相應的機器碼,就是01組成的編碼,由對應平台的計算機直接執行;除此以外,gcc等也可以將C編譯為匯編輸出!

建議學習《編譯原理》這門課程,你會有更深的理解。

㈤ 請問匯編程序, 解釋程序, 編譯程序分別指

1、匯編程序

把匯編語言書寫的程序翻譯成與之等價的機器語言程序的翻譯程序。匯編程序輸入的是用匯編語言書寫的源程序,輸出的是用機器語言表示的目標程序。匯編語言是為特定計算機或計算機系列設計的一種面向機器的語言,由匯編執行指令和匯編偽指令組成。

採用匯編語言編寫程序雖不如高級程序設計語言簡便、直觀,但是匯編出的目標程序佔用內存較少、運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。

2、解釋程序

解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。因此,解釋程序並不產生目標程序,這是它和編譯程序的主要區別。

3、編譯程序

編譯程序也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。

它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

(5)編譯程序的結果是匯編擴展閱讀:

工作過程

1、匯編程序

輸入匯編語言源程序。檢查語法的正確性,如果正確,則將源程序翻譯成等價的二進制或浮動二進制的機器語言程序,並根據用戶的需要輸出源程序和目標程序的對照清單;如果語法有錯,則輸出錯誤信息,指明錯誤的部位、類型和編號。最後,對已匯編出的目標程序進行善後處理。

2、解釋程序

由總控程序完成初始化工作。依次從源程序中取出一條語句進行語法檢查,如有錯,輸出錯誤信息;如果通過了語法檢查,則根據語句翻澤成相應的指令並執行它。檢查源程序是否已經全部解釋執行完畢,如果未完成則繼續解釋並執行下一條語句,直到全部語句都處理完畢。

3、編譯程序

先進行詞法分析與語法分析,然後生成中間代碼,接著對程序進行多種等價變換來代碼優化,最後生成目標代碼。

㈥ C++程序進行編譯後會生成C語言代碼還是匯編代碼

不是匯編輸出,更不是機器代碼,而是鏈接器輸出
當然不是機器代碼,否則這個程序就可以在無操作系統環境下跑,或是在windows下編譯出的exe能夠在unix上跑,這當然是不對的。
(當然有直接生成機器碼的編譯器,不過不是我們常見的)
實際上編譯出的程序是操作系統相關的,那是因為不同的操作系統的函數庫是不相同的。編譯器就是將程序與操作系統的函數庫鏈接(比如屏幕的顯示,鍵盤的輸入等)。當然只會有少量機器碼。

㈦ 什麼是匯編程序和編譯程序有什麼區別

首先,簡介一下計機原理,假如有一個由磁粉組成的硬碟,那麼改變磁粉的排列,並通電,將引發電流大小的變化,這就是計機的數據來源。
那麼,查看磁粉是難以看見的,間接的表示就是:用一個如winhex的軟體打開,裡面的十六進制數就間接說明了磁粉的排列物理狀況。同樣,手動改磁粉即使生效,也未必「有用」。正如你所想,沒錯,既然電腦這機器這么麻煩,但它有人買,因為有鍵盤。一台正常的電腦由「固化」「程序」(bios)硬體去啟用主板上的各個元件,再拿個硬碟放操作系統。自然有辦法寫入數據了。
好了,回歸正題,所謂匯編,就是可以從那些有效的十六進制數據得出的東東,比如「b4....」在某一場合表示mov ......,於是乎,對照主板商等給出的文檔,想進行編寫一個程序,那麼就「mov.......」什麼的對著「b4........」什麼的堆進扇區就行了。編譯程序,動詞來說的話,是一個動作,不是程序,匯編程序是一個程序,名詞來說的話,風馬牛不相干,因為根據上述原理,把匯編代碼或c代碼轉成有效的「磁粉」數據,這就是一個編譯的過程,結果出來的就是編譯程序。

㈧ 什麼是編譯程序和匯編程序

  1. 編譯程序是把用高級程序設計語言或計算機匯編語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序,屬於採用生成性實現途徑實現的翻譯程序。編譯程序以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出;編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

  2. 匯編程序是指把匯編語言書寫的程序翻譯成與之等價的機器語言程序的翻譯程序,是為特定計算機或計算機系列設計的一種面向機器的語言,由匯編執行指令和匯編偽指令組成。匯編程序輸入的是用匯編語言書寫的源程序,輸出的是用機器語言表示的目標程序。採用匯編語言編寫程序雖不如高級程序設計語言簡便、直觀,但是匯編出的目標程序佔用內存較少、運行效率較高,且能直接引用計算機的各種設備資源。它通常用於編寫系統的核心部分程序,或編寫需要耗費大量運行時間和實時性要求較高的程序段。匯編程序主要有簡單匯編程序、模塊匯編程序、條件匯編程序、宏匯編程序、高級匯編程序幾種。

閱讀全文

與編譯程序的結果是匯編相關的資料

熱點內容
加密兔f碼生成器免費 瀏覽:291
思科路由器命令明文加密 瀏覽:171
方舟生存進化伺服器如何改名字 瀏覽:892
央行數字貨幣app怎麼注冊 瀏覽:431
51單片機顯示時間 瀏覽:770
我的世界網易版怎麼壓縮地圖 瀏覽:682
qq小程序雲伺服器和 瀏覽:740
方舟伺服器怎麼玩才好玩 瀏覽:557
單片機的部件 瀏覽:621
編譯原理遍的過程 瀏覽:252
python讀取json字元串 瀏覽:62
ubuntu1404安裝php 瀏覽:634
lua能編譯嗎 瀏覽:118
思仙怎麼看伺服器 瀏覽:660
php微信圖片防盜鏈 瀏覽:800
安卓1怎麼讀音 瀏覽:297
農業app怎麼開通快捷支付 瀏覽:912
pythonredisdict 瀏覽:389
如何攻擊別人網賭伺服器 瀏覽:882
隱私與應用加密的圖案密碼 瀏覽:38