機器碼編譯
Java編譯後是位元組碼,C/C++以前全都是是機器碼。
電腦只能運行機器碼。Java在運行的時候把位元組碼變成機器碼。
C/C++在編譯的時候直接編譯成機器碼。
不過現在微軟的Visual Studio C++ 2005以後的C++也可以編譯成位元組碼,用CLR運行是轉換成機器碼(和Java差不多)。
⑵ 將下列程序代碼手工編譯為用十六進制數表示的機器碼.(可查51指令碼表),什麼是十六進製表示的機器碼
5:LJMPMAIN
6:ORG0030H
7:MAIN:
C:0x0000020030LJMPMAIN(C:0030)
C:0x000300NOP
C:0x000400NOP
C:0x000500NOP
C:0x000600NOP
C:0x000700NOP
C:0x000800NOP
C:0x000900NOP
C:0x000A00NOP
C:0x000B00NOP
C:0x000C00NOP
C:0x000D00NOP
C:0x000E00NOP
C:0x000F00NOP
C:0x001000NOP
C:0x001100NOP
C:0x001200NOP
C:0x001300NOP
C:0x001400NOP
C:0x001500NOP
C:0x001600NOP
C:0x001700NOP
C:0x001800NOP
C:0x001900NOP
C:0x001A00NOP
C:0x001B00NOP
C:0x001C00NOP
C:0x001D00NOP
C:0x001E00NOP
C:0x001F00NOP
C:0x002000NOP
C:0x002100NOP
C:0x002200NOP
C:0x002300NOP
C:0x002400NOP
C:0x002500NOP
C:0x002600NOP
C:0x002700NOP
C:0x002800NOP
C:0x002900NOP
C:0x002A00NOP
C:0x002B00NOP
C:0x002C00NOP
C:0x002D00NOP
C:0x002E00NOP
C:0x002F00NOP
8:MOVA,BCD1
C:0x0030E530MOVA,0x30
9:ADDA,BCD2
C:0x00322540ADDA,0x40
10:DAA
C:0x0034D4DAA
11:MOVBCD1,A
C:0x0035F530MOV0x30,A
12:MOVA,BCD1+1
C:0x0037E531MOVA,0x31
13:ADDCA,BCD2+1
C:0x00393541ADDCA,0x41
14:DAA
C:0x003BD4DAA
15:MOVBCD1+1,A
C:0x003CF531MOV0x31,A
16:SJMP$
C:0x003E80FESJMPC:003E
C:0x004000NOP
⑶ c語言代碼編譯成的是機器碼,那麼怎麼實現可移植性呢
C語言寫的代碼編譯成了機器碼,與編譯器有關,與當前的電腦的CPU沒有關系
有個概念叫交叉編譯,我們做嵌入式的,就靠這個工作了
也就是在PC上編譯的機器碼,下載到其他的晶元裡面,讓它在這個晶元里運行
只要其他的電腦也支持同樣的編譯器產生的機器碼,就可以一致到它上面
⑷ LINUX怎麼編譯本地機器碼
請先去看看 Linux 相關基礎。
Linux 其實總的來說,全都是第三方函數庫,根本就沒有官方函數庫。
為啥?因為 Linux 就是一個內核,所有的函數庫,程序都是運行在內核上的程序,都是可以換的。
⑸ 編譯時選擇機器碼,能反編譯出來嗎
可以說絕大部分的程序是不能反編譯的,因為同樣的機器碼,可以由多種不同的高級語言的程序代碼生成,所謂殊途同歸,不管外表看起來多麼不同的代碼,編譯後生成的機器碼也可能完全一樣的
⑹ 請問高級語言為什麼不直接編譯成機器碼,而編譯成匯編代碼
2.Que:? ACK:1)其中有一個好處是方便優化,因為,編譯器也是工具,也是機器,畢竟是機器生成的程序,不可以非常 完美的,而匯編是機器指令的助記符,一個匯編指令就對應一條機器指令(特殊指令除外)調試起來肯定會比 機器指令方便的方便,這樣優化起來也方便。 2)高級語言只需要編譯成匯編代碼就可以了,匯編代碼到機器碼的轉換是由硬體實現即可,有必要用軟體實 現這樣分層可以有效地減弱編譯器編寫的復雜性,提高了效率.就像網路通訊的實現需要分成很多層一樣,主要 目的就是為了從人腦可分析的粒度來減弱復雜性. 3)如果把高級語言的源代碼直接編譯成機器碼的話,那要做高級語言到機器碼之間的映射,如果這樣做的 話,每個寫編譯器的都必須熟練機器碼。這個不是在做重復勞動么。
⑺ 後綴為exe的文件本身是機器碼嗎C++編譯過的程序是機器碼么。但是java好像也能做出exe程序。
c++編譯產生二進制可執行文件,
java編譯生成可執行位元組碼,也可生成二進制可執行文件。
解釋性生成位元組碼,點擊就可執行,這就像系統的批處理一樣,只不過功能簡單,執行方便。java強大。原理一樣。
編譯器必須編譯才可執行。
⑻ 請問c語言的源程序被編譯後的代碼是機器碼嗎
首先語言和被編譯成的代碼沒有直接關系。有把Java編譯成機器碼的編譯器也有把C語言編譯成Java位元組碼的編譯器。
機器碼只是CPU直接認讀的編碼,不等於和硬體打交道的。操作硬體是你通過程序操作CPU做到的。操作系統只不過是別人寫的程序而已,說到底還是程序。
⑼ 怎麼用機器碼寫程序
機器碼就是0和1,現在人不這么做了
以前的人是用打孔機做的
用匯編或是C語言吧
⑽ C語言編譯到機器碼的過程求詳細解說,不勝感激
從編碼到生成可執行的binary文件是有好幾個過程的:(默認已完成編碼)
1, 預編譯(預處理), 也就是替換工作, 先把代碼中的宏做替換, 條件編譯等會做處理,為編譯做作準備;
2,編譯,包括了語法的檢查,匯編代碼等中間代碼的生成,代碼優化,obj文件(也算是目標代碼)的生成,已經是有機器碼了;
3.庫的合成,這個不一定有,不是必須的;
4.鏈接, 連接器會按照一定的規則,比如根據連接腳步,把code組織起來,生成elf文件(elf可能不是一個所有通用的格式),這個時候已經可以執行了,裡面的可以執行的機器碼;
5,裁剪, 可以把elf文件中的非必需的段 strip,生成一個更精簡的elf文件;
6,binary的生成,obj命令可以把elf文件轉換成binary文件,binary文件燒錄到存儲器中可以直擊運行。