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

成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

問答專欄Q & A COLUMN

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

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

6條回答

warmcheng

warmcheng

回答于2022-06-22 19:06



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

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



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

混合方式的例子

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



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

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

stormjun

回答于2022-06-22 19:06

不是的,只要能轉(zhuǎn)換成相應(yīng)機器碼就行。

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

princekin

回答于2022-06-22 19:06

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

最終都會編譯成機器碼,指令 供CPU調(diào)度!

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

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

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

評論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

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

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

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

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

我的邀請列表

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