回覆列表
-
1 # 麗波霏霏
-
2 # kid7157887
編譯性語言最終都會編譯成二進位制執行,組合語言講二進位制指定為簡單的人類可識別助記符,所以是可直接反彙編的。
解釋性語言大多依託於虛擬機器這樣的環境,或者執行引擎,引擎和虛擬機器有自己的指令集,最終反編譯出來的是環境和虛擬機器的反彙編助記符
-
3 # 日衝資訊 黃
程式原始碼被翻譯成機器碼之後才能被電腦執行。透過彙編和反彙編,組合語言和機器碼可以相互轉換。我的回答中就只說機器碼了。按照執行方式大致可將程式語言分成三類:
編譯方式 將原始碼翻譯成機器碼後執行的方式。這種方式執行速度快,但對作業系統有依存性。 混合方式 將原始碼翻譯成中間碼(如,位元組碼)後,在有各OS上的虛擬機器翻譯成其他語言或命令執行。或者,使用實時編譯(JIT)轉換成機器碼後執行。 解釋方式 將原始碼逐行翻譯成其他語言或命令後,載入該語言或命令的機器碼並執行相應的處理。該方式執行速度慢,但編碼靈活,不用編譯直接執行比較方便。三種方式中以混合方式最為複雜難懂,下面著重說說混合方式
混合方式的例子出於跨平臺的需要,Java採用了混合方式,Java原始碼先透過編譯,被翻譯成位元組碼。位元組碼不含有跟OS有關的資訊。因此,編譯後的Java包可以在不同的系統上執行。Java為不同的OS準備了不同的JVM(Java虛擬機器)。JVM上有直譯器,可將位元組碼逐行翻譯成由JVM提供的各種函式庫,並將以機器碼形式存在的函式庫載入到JVM的記憶體中並執行。由於解釋方式的速度較慢,Java為迴圈或使用頻度高的程式碼提供了JIT(Just In Time)的編譯器。JIT可以把大段的程式碼一次性翻譯成機器碼執行,速度上要比純粹的直譯器高很多。
電腦執行的所有程式都必須是由機器碼編成的。如果僅僅看程式語言的編譯結果,混合方式和解釋方式都可以看成沒有被編譯成機器碼也就是組合語言。
彙編有彙編的編譯器!java也有java的編譯器!
最終都會編譯成機器碼,指令 供CPU排程!
所謂反彙編 無非就是把機器語言轉換為組合語言程式碼!還有一種就是反編譯 把編譯後程序集反編譯成高階語言程式碼,已方便閱讀!
每個語言都有自己的優勢和適應場景!微控制器程式設計用匯編和C比較多,執行快,消耗硬體資源低!它可以直接操作記憶體地址,比較接近硬體資源!