我有兴趣学习汇编,特别是因为我发现多态代码相当有趣,而且我对我应该学习哪些内容感到困惑。
我听说x86
是最常见的学习或开始,但不是大多数应用程序(用Visual Studio编写)用不同的汇编语言?或者在普通中级语言中还是什么?或者CIL或IL或其他什么在运行时被编译到x86中?
答案 0 :(得分:5)
这取决于你想要学习的内容。 CIL是名为the CLR的理论机器(或虚拟机)的汇编语言,它是用软件实现的。然后,CIL代码由即时编译器编译为x86汇编或64位intel汇编。
如果您主要使用Visual Studio进行编程,我建议您首先学习CIL,原因如下:
1)CIL更简单。 x86汇编自20世纪70年代以来一直在发展,它确实表现出来。指令数量巨大,您必须学习不相关的技术细节才能开始使用。
2)编写结构良好的程序会更容易。如果你以后决定学习x86程序集,希望你会随身携带这些习惯。
3)如果您希望在低级别上对.NET程序进行性能调优,那么CIL将更有用,因为这是他们编译的内容。这是你应该优化的最后一个地方。
学习x86 / x64的原因:
1)它是真实硬件的汇编语言。这意味着你学到的东西将是“真实的东西”。您还将了解实际硬件的工作原理。这并不意味着首先学习一种更简单的语言可能并不容易。
2)平台有寄存器,这是一个你不会用CIL了解的功能。
3)平台没有内置面向对象的功能,这意味着您必须自己学习如何实现这些功能。这也是您可以通过C ++学习的东西。
总而言之,我建议学习一种简单的语言,如CIL,JVM组装或LC-3组装,如Daniel Wolfe所建议的那样。如果你还想学习x86程序集,你可以随时做到这一点。以正确的顺序学习两者可能比仅仅学习x86程序集更容易。
答案 1 :(得分:3)
如果您真的对学习汇编语言感兴趣,我推荐的一本书是 Introduction to Computer Systems 。作者教授他们自己发明的计算机系统的汇编语言,称为LC-3。学习这个平台本身并没有价值,但它是一种大大简化的机器语言。在了解了更简单的机器语言之后,您可以继续学习更复杂的语言,如x86。
答案 2 :(得分:1)
IL不是汇编程序,是中间语言,是的,由.NET运行时编译成汇编程序。汇编程序(或机器代码)是CPU所说的唯一语言。
.NET程序集不是在汇编程序中编写或生成的,它们是非常不同的东西。
我认为x86汇编程序应该可以启动,如果你真的想给自己带来所有这些痛苦或做出这样的努力; - )
答案 3 :(得分:1)
您通常使用或最喜欢的计算机芯片架构是什么? 什么平台或O.S.你经常上班吗?
在汇编时进行编程时这些问题。
PC& Windows?苹果电脑 ? Unix?在Solaris Sparc上运行的PC(x86),Linux或BSD上运行的Linux或BSD?
有几种方法可以学习汇编语言。
通常,单芯片架构只有一种汇编语言,而不是几种高级编程语言。
如前所述,另一个是使用“虚拟机”,就像前面已经提到过的答案一样:J.M.V.,dotNet CIL或MSIL(相同),P-Code等。
在这种情况下,使用哪个平台并不重要。
PC具有ASM,但是,您也可以使用名为NASM的派生词: