當前位置:首頁 » 打標機器 » 為什麼編譯機器碼

為什麼編譯機器碼

發布時間: 2021-02-23 04:25:41

『壹』 高級語言編譯成的機器碼和匯編成的機器碼有什麼不同,為什麼高級語言可以通用而匯編的不可以

高級語言來編譯生成的機器碼總源體來說是冗長、效率低些;由匯編語言匯編生成的機器碼總體說是簡潔、高效。
所謂的通用是源程序的可移植性,高級語言的源程序對於不同的體系結構的計算機是基本一致的,只需用相應的編譯器重新編譯下就可以運行;而匯編語言源程序是直接與cpu的體系相對應的,要在別的體系結構的機器上運行,需要重新編寫源程序。

『貳』 小白求助,編譯是什麼,為什麼需要編譯

人與機器交流(即人讓計算機按照人的意願做事)依賴於語言
語言的層次是:自然語言->高級編程語言->匯編語言->機器碼
人最熟悉的肯定是自然語言(就是你平時說的話)。
而計算機的cpu只認識二進制的機器碼,機器碼指導計算機做什麼操作(如邏輯運算)。
高級編程語言跟自然語言的關系更近些,對人來說相當於自然語言的白痴版,如java中的對象與類的概念可能對應於現實世界的某種事物,如C語言中的函數可能對應了一個功能,比如列印文件,經過簡單的訓練,人也能大概的讀懂。
匯編語言和機器碼更接近些,每個匯編指令一般都會對應一條機器碼,而高級編程語言中的一個語句(如if else什麼的)可能會對應多條匯編指令,匯編指令一般就是算術運算(如add)、邏輯運算(如and)、數據傳送(如mov)、條件判斷、跳轉等,只能用這些簡單功能的匯編指令組合來完成一個復雜的功能。人看懂匯編就很吃力了,更別提用匯編來完成想要的功能,太吃力,這個過程還是交個編譯器比較好。
而機器碼對於一般的程序員來說,就是天書,也基本沒人願意去看。
自然語言最容易表述人們的要求,當用戶用自然語言表述了需要的功能後,從自然語言到高級語言的轉換過程由程序員來完成,而由高級編程語言到匯編、由匯編到機器碼的過程都由編譯器來完成,由編譯器完成的這個過程也就是編譯了。
高級編程語言的代碼經過編譯階段成為匯編代碼,匯編代碼經過匯編階段變成機器碼,機器碼文件經過鏈接階段變成可執行文件(.exe)。一般編譯是指的編譯階段和匯編階段的組合,編譯器的工作一般是編譯和鏈接。
這就是我的理解,希望你幫到你。

『叄』 請問c語言的源程序被編譯後的代碼是機器碼嗎

嚴格來講沒有機器碼這種說法,與機器直接打交道的底層語言是二進制代碼,C語言和版java語言編譯後的文件都是權二進制代碼,即可執行代碼。

可執行代碼的運行需要一個環境,這就是操作系統,它管理計算機所有的資源,你所說的機器實際上是指機器的資源。

『肆』 C語言代碼編譯成的是機器碼,那麼怎麼實現可移植性呢

C語言的來可移植性不是源體現在生成的2進制文件上面,而是體現在源代碼級別的,只要重新編譯就能運行。
一是,因為大部分系統都實現了C的標准運行庫。
二是,它對機器指令進行了抽象。用if,for等語句代替了多條機器指令。

像匯編這種就不太可移植的,它一條語句對應一條機器指令,不同CPU支持的指令集是不完全一樣的。

『伍』 Android 程序為什麼不直接編譯成機器碼

編譯單元無法確定要訪問的邏輯地址,也就無法轉為機器碼,
必須由鏈接過程分配地址。 先編譯後鏈接,
應該是易於編譯器的實現和擴展並且能夠增加靈活性和多文件項目的編譯效率

『陸』 為什麼程序代碼被編譯成機器碼就不能跨平台運行

首先機器碼實際上就是一串的CPU的指令,比如說,把內存地址A的東西移到內存地址B,遞增一下回地址B的的東西。又或者說,把某個地址C的內容拷貝至某寄存器。所以實際上就是內容移動+少量的數值運算,全是基於內存進行的。
----------------------------------
那麼之所以同一套機器碼不能在不同的操作系統下運行的原因是:
不同的操作系統管理內存的方法不一樣咯。計算機開機時,內存是空的,操作系統決定了如何擺放內存。比如操作系統A可能把自己的Runtime內核放在地址的答前面XXXMB里。操作系統B可能願意把自己的內核放在別的地方。就算哪怕不同的操作系統把內核放在同一個位置,內核里頭的memory擺放也不一樣的。
所以同一套內容移動的機器碼,在不同的操作系統下自然產生了不同的效果。

『柒』 C語言編譯到機器碼的過程求詳細解說,不勝感激

從編碼到生成可執行的binary文件是有好幾個過程的:(默認已完成編碼)
1, 預編譯(預處理), 也就是替換工作, 先把代碼中的宏做替換, 條件編譯等會做處理,為編譯做作準備;
2,編譯,包括了語法的檢查,匯編代碼等中間代碼的生成,代碼優化,obj文件(也算是目標代碼)的生成,已經是有機器碼了;
3.庫的合成,這個不一定有,不是必須的;
4.鏈接, 連接器會按照一定的規則,比如根據連接腳步,把code組織起來,生成elf文件(elf可能不是一個所有通用的格式),這個時候已經可以執行了,裡面的可以執行的機器碼;
5,裁剪, 可以把elf文件中的非必需的段 strip,生成一個更精簡的elf文件;
6,binary的生成,obj命令可以把elf文件轉換成binary文件,binary文件燒錄到存儲器中可以直擊運行。

『捌』 java編譯後產生 位元組碼,還是 機器碼能不能簡單解釋一下

Java編譯後是位元組碼,C/C++以前全都是是機器碼。
電腦只能運行機器碼。版Java在運行的時候把位元組碼變權成機器碼。
C/C++在編譯的時候直接編譯成機器碼。

不過現在微軟的Visual Studio C++ 2005以後的C++也可以編譯成位元組碼,用CLR運行是轉換成機器碼(和Java差不多)。

『玖』 各種語言被編譯成機器碼,但是為什麼執行效率會不一樣

由於翻譯器不一樣, 所以 同樣功能的不同語言,翻譯出來的機器碼也是不一樣的。
除了匯編外, 任何語言都會產生冗餘的,不可避免。
有的翻譯出來的冗餘機器碼多一些,效率就低。有些高一些,效率就高。
簡單類比一下,同樣的英文, 在不同人翻譯後,得到的中文也可能是有區別的。

『拾』 操作系統是和CPU打交道的,那麼編譯器寫的程序為什麼還需要編譯。操作系統不能直接翻譯成機器碼么

操作系統同抄cpu打交道用的是機器碼,但是對我們來說他用的是自然語言即所說的高級語言,編譯器是的程序就是我們用高級語言寫的,要執行的時候還需要把他翻譯回機器碼,這個過程就是編譯。由於操作系統自身不帶有這種翻譯的功能,因此不能直接翻譯成機器碼,而且高級語言也分好多種,每種語言對應的翻譯方式也不一樣。

熱點內容
線切割怎麼導圖 發布:2021-03-15 14:26:06 瀏覽:709
1台皮秒機器多少錢 發布:2021-03-15 14:25:49 瀏覽:623
焊接法蘭如何根據口徑配螺栓 發布:2021-03-15 14:24:39 瀏覽:883
印章雕刻機小型多少錢 發布:2021-03-15 14:22:33 瀏覽:395
切割機三五零木工貝片多少錢 發布:2021-03-15 14:22:30 瀏覽:432
加工盜磚片什麼櫸好 發布:2021-03-15 14:16:57 瀏覽:320
北洋機器局製造的銀元什麼樣 發布:2021-03-15 14:16:52 瀏覽:662
未來小七機器人怎麼更新 發布:2021-03-15 14:16:33 瀏覽:622
rexroth加工中心亂刀怎麼自動調整 發布:2021-03-15 14:15:05 瀏覽:450
機械鍵盤的鍵帽怎麼選 發布:2021-03-15 14:15:02 瀏覽:506