{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

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

cocopeakcocopeak 回答6 收藏1
問題描述:否則為什么會有反匯編一說。
收藏問題

6條回答

warmcheng

warmcheng

回答于2022-06-22 19:06



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

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



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

混合方式的例子

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



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

評論0 贊同0
  •  加載中...
stormjun

stormjun

回答于2022-06-22 19:06

不是的,只要能轉換成相應機器碼就行。

評論0 贊同0
  •  加載中...
princekin

princekin

回答于2022-06-22 19:06

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

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

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

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

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

評論0 贊同0
  •  加載中...
blair

blair

回答于2022-06-22 19:06

通常編譯成機器碼。

評論0 贊同0
  •  加載中...
lookSomeone

lookSomeone

回答于2022-06-22 19:06

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

評論0 贊同0
  •  加載中...
iKcamp

iKcamp

回答于2022-06-22 19:06

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

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

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<