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