6

我對學習彙編感興趣,特別是因爲我覺得多態代碼相當有趣,而且我對於應該學什麼感到困惑。需要學習哪種彙編語言

我聽說x86是最常見的學習或開始,但不是大多數應用程序(用Visual Studio編寫)在不同的彙編語言?或在一般中間語言或什麼?或者CIL或IL或其他什麼在運行時編譯進x86?

+0

你爲什麼想學這個?爲了深刻理解或者其他原因? –

回答

5

這取決於你想學什麼。 CIL是用軟件實現的名爲the CLR的理論機器(或虛擬機)的彙編語言。 CIL代碼然後通過即時編譯器編譯爲x86彙編或64位intel彙編。

如果你主要是在Visual Studio編程我建議學習CIL第一,原因如下:

1)CIL要簡單得多。自20世紀70年代以來,x86彙編已經有了進一步的發展,而且它確實表現出來。指令的數量非常巨大,您只需開始學習不相關的技術細節。

2)編寫結構良好的程序會更容易。如果你後來決定學習x86彙編,希望你會習慣這些習慣。

3)如果你想要在低級別上調整你的.NET程序,CIL將會更有用,因爲這是它們編譯的目的。這是你應該優化的最後一個地方。

原因學習的x86/x64系統:

1)它是真正的硬件的彙編語言。這意味着你學到的將是「真實的東西」。您還將學到很多關於實際硬件如何工作的信息。這並不意味着首先學習更簡單的語言可能並不容易。

2)該平臺具有寄存器,這是您不會了解CIL的功能。

3)該平臺沒有內置面向對象的功能,這意味着您將不得不學習如何自己實現這些功能。這是你可以通過C++學習的東西。

總而言之,我會推薦學習像Daniel Wolfe所建議的簡單語言,如CIL,JVM組裝或LC-3裝配。如果你還想學習x86彙編,你可以隨時做。以正確的順序學習可能比僅僅學習x86彙編更容易。

+0

通過JVM彙編,你的意思是Java Bytecode,對吧? – nbro

+0

我認爲我們可能會對同一事物使用不同的術語。我的意思是x86彙編語言的JVM等價物。我會使用字節碼來組裝版本(二進制)。 –

+0

我的意思是在編譯Java源代碼之後只有字節碼(指令如IRETURN,IADD等)。這個字節碼然後由JVM(Java虛擬機)解釋。 – nbro

1

IL不是彙編程序,是中級語言,是的,由.NET運行時編譯爲彙編程序。彙編程序(或機器代碼)是CPU說話的唯一語言。

.NET程序集不是在彙編程序中編寫或生成的,它們是非常不同的東西。

我覺得x86彙編應該沒啓動,如果你真的想給自己這一切痛苦或做這樣的努力;-)

2

如果你在學習彙編語言真正感興趣的,一本書,我會推薦的是Introduction to Computer Systems。作者教授他們自己發明的稱爲LC-3的計算機系統的彙編語言。自己學習這個平臺沒有任何價值,但它是一種大大簡化的機器語言。在你理解了一個更簡單的機器語言之後,你可以繼續學習更復雜的語言,比如x86。

1

什麼計算機芯片架構,你通常工作或喜歡工作最? 什麼平臺或O.S.你通常工作嗎?

在裝配中編程時,這些問題很重要。

PC & Windows?蘋果電腦 ? Unix?運行在PC(x86)上的Linux或BSD,運行在Solaris Sparc中的Linux或BSD?

有幾種學習彙編語言的方法。

通常,單個芯片架構只有一種彙編語言,而不像幾種高級編程語言。

另一個前面已經提到,就是用「虛擬機」之類的那些已經由以前的答案提及:JMV,dotNet的CIL或MSIL(其相同),P碼等

而且在那種情況並不重要你使用哪個平臺。

PC有ASM,但是,你也可以使用一個名爲NASM衍生物:

http://www.nasm.us/

http://en.wikipedia.org/wiki/Netwide_Assembler