是不是所有的高級編程語言都能編譯成彙編語言?

EzAMC




程序源碼被翻譯成機器碼之後才能被電腦執行。通過彙編和反彙編,彙編語言和機器碼可以相互轉換。我的回答中就只說機器碼了。按照執行方式大致可將程序語言分成三類:

  • 編譯方式 將源代碼翻譯成機器碼後執行的方式。這種方式執行速度快,但對操作系統有依存性。
  • 混合方式 將源代碼翻譯成中間碼(如,字節碼)後,在有各OS上的虛擬機翻譯成其他語言或命令執行。或者,使用實時編譯(JIT)轉換成機器碼後執行。
  • 解釋方式 將源代碼逐行翻譯成其他語言或命令後,加載該語言或命令的機器碼並執行相應的處理。該方式執行速度慢,但編碼靈活,不用編譯直接執行比較方便。



三種方式中以混合方式最為複雜難懂,下面著重說說混合方式

混合方式的例子

出於跨平臺的需要,Java採用了混合方式,Java源代碼先通過編譯,被翻譯成字節碼。字節碼不含有跟OS有關的信息。因此,編譯後的Java包可以在不同的系統上執行。Java為不同的OS準備了不同的JVM(Java虛擬機)。JVM上有解釋器,可將字節碼逐行翻譯成由JVM提供的各種函數庫,並將以機器碼形式存在的函數庫加載到JVM的內存中並執行。由於解釋方式的速度較慢,Java為循環或使用頻度高的代碼提供了JIT(Just In Time)的編譯器。JIT可以把大段的代碼一次性翻譯成機器碼執行,速度上要比純粹的解釋器高很多。



電腦執行的所有程序都必須是由機器碼編成的。如果僅僅看程序語言的編譯結果,混合方式和解釋方式都可以看成沒有被編譯成機器碼也就是彙編語言


日衝信息 黃


有些是:高級語言—>彙編—>機器碼,而有些是直接轉成機器碼,沒有轉匯編的過程。但現代編譯器(Compiler)都不是直接轉成機器碼,而是轉成一種中間鏈接碼(這種碼是所有操作系統都認知的碼),然後在具體機器應用時,再將其轉成操作系統的機器碼,進而運行。這樣就解決了多操作系統兼容一種碼的問題。


YingBai910


彙編有彙編的編譯器!java也有java的編譯器!

最終都會編譯成機器碼,指令 供CPU調度!

所謂反彙編 無非就是把機器語言轉換為彙編語言代碼!還有一種就是反編譯 把編譯後程序集反編譯成高級語言代碼,已方便閱讀!

每個語言都有自己的優勢和適應場景!單片機編程用匯編和C比較多,運行快,消耗硬件資源低!它可以直接操作內存地址,比較接近硬件資源!

原我的回答對你有所幫助!


麗波霏霏


編譯性語言最終都會編譯成二進制執行,彙編語言講二進制指定為簡單的人類可識別助記符,所以是可直接反彙編的。

解釋性語言大多依託於虛擬機這樣的環境,或者運行引擎,引擎和虛擬機有自己的指令集,最終反編譯出來的是環境和虛擬機的反彙編助記符


kid7157887


ⅤB,Ⅴⅰsual Basⅰc 產生中間代碼,與解釋執行的模塊捆綁成EXE文件。顯然並不是PC的彙編代碼。


溫情憶鴻564


原因是你對編程這件事知道的太少了!


景151276607


通常編譯成機器碼。


分享到:


相關文章: