从哪里学习x64汇编?

56

好的,我知道C ++、C#、Java和其他一些语言,接下来我决定学习汇编语言,但我感觉自己从一开始就遇到了严峻的困难。我需要有人指点一下。

以下是问题:

  1. 有人告诉我最好从互联网上学习汇编语言,而不是从书本上学习,因为汇编语言取决于硬件,而书本大多数都已过时。这是真的吗?

  2. 我拥有一个64位CPU,并正在使用(或至少试图使用)FASM。在哪里可以找到必要的文档?

  3. 我完全困惑了,因为我看到的大多数教程甚至对我都无法工作。这是因为硬件差异吗?我如何找到正确的教程?

  4. 我能否在我的64位计算机上运行x86和x32汇编语言?

  5. 您能否写一个简单的程序(适用于我的计算机),并在注释中进行解析?我正在运行64位Windows 10操作系统,在我的Intel Core i5 CPU上运行,请帮帮我。


你可以用C语言编写简单的程序,并让C编译器输出汇编源代码。以此为基础。你没有提到你是在Windows还是某个版本的Linux上运行。在Windows的情况下,你可以在64位版本的Windows上运行32位程序,但不能运行16位程序。对于64位版本,你可以使用Virtual PC或类似dosbox的东西。 - rcgldr
如果您使用的是Windows 7或更高版本,您可以免费获取Visual Studio for Desktop express 2015。其中包括32位汇编器(ml.exe)和64位汇编器(ml64.exe),以及一个优秀的源代码级调试器。 - rcgldr
2
https://software.intel.com/en-us/articles/introduction-to-x64-assembly - Mahmudul Haque
1
这是一个很棒的播放列表,可以帮助你入门。链接为https://www.youtube.com/watch?v=rxsBghsrvpI&list=PLKK11Ligqitg9MOX3-0tFT1Rmh3uJp7kA - mr_pool_404
我很少同意主持方关闭一个问题。然而,这个问题实在太糟糕了!它通过询问混乱和相互矛盾的言论来引发撰写书籍的冲动。 - Albert van der Horst
1个回答

54

我认为这是一个合理的问题。关于汇编语言的最新信息有些难以找到。

  1. 是的。很多印刷和在线资源描述i386(x86)汇编语言,而不是新的amd64(x86_64)。许多东西都发生了变化,例如函数参数过去是通过堆栈传递的,但现在它们是通过寄存器传递的。这适用于Unix和Windows。

    基本上,确保你正在阅读有关64位汇编语言的内容。

  2. 为什么不尝试在线手册呢?注意,当涉及到简单的内容时,汇编程序并没有那么不同。

  3. 我没有Windows,但如果你在某个特定的程序上遇到麻烦,可以在这里询问。你需要发布实际失败的程序。

  4. 可以,但你必须将其与32位库链接并使用Win32 API的32位版本。但是,如果你刚开始学习,为什么要使用20世纪80年代的指令集呢?

  5. 尝试这个

另外,如果你要写汇编语言程序,我强烈建议你获取调试器。我使用的是GDB,它很好用并且是免费的,在Windows上你可以使用Visual Studio调试器,它非常出色。


在旧时代,我记得没有调试器进行调试。虽然效率远不如现在,但仍然可以完成。 - Michael Petch
@MichaelPetch 我也曾这样做,但当有很棒的免费调试器时,我不建议这样做。 - jforberg
4
不使用调试器的好处在于,与使用试错学习汇编语言的方法(调试器对此非常有用)相比,你被迫更好地理解特定体系结构下的汇编语言。现在,我在SO上回答汇编语言问题时,通常会直接检查代码中的错误,而不是花时间自己尝试编译它。如果我可以选择雇用一个无法在没有调试器的情况下进行调试和一个可以的人(假设其他条件均相等),我会选择后者。 - Michael Petch
@MichaelPetch同意,但这是针对一个从未编写过正确汇编程序的程序员的回应。此外,对汇编调试的熟练掌握也会延伸到C语言,因为现在你可以开始理解那些你实际上没有源代码的程序了。但我理解你的观点。 - jforberg
4
该帖子鼓励学习x64汇编,但其中的两个链接都指向x86教程……怎么回事? - Zeks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接