【问题标题】:What is the best way to learn x86 assembly on a Linux platform? [closed]在 Linux 平台上学习 x86 汇编的最佳方法是什么? [关闭]
【发布时间】:2010-10-17 19:41:21
【问题描述】:

我没有汇编编程的先验知识,但想学习如何在 Linux 平台上编写 x86 汇编代码。但是,我很难找到自学的好资源。

组装艺术这本书看起来不错,但它教 HLA。我对必须学习一种方式,然后重新学习它不感兴趣。 RISC 架构似乎也有更好的汇编资源,但不幸的是我没有 RISC 处理器可以学习。有人有什么建议吗?

【问题讨论】:

    标签: linux assembly x86


    【解决方案1】:

    http://asm.sf.net 有一些关于 x86 以外的架构的资料。

    如果您对 RISC 架构感兴趣,您可以在Qemu 上运行 Linux。 Qemu 模拟了几种 RISC 架构,如 PowerPC、ARM 和 MIPS。你或许能找到一个现成的Qemu硬盘镜像here

    另一种试验 RISC 架构的方法是使用 gdb 的内置模拟器。

    【讨论】:

      【解决方案2】:

      我发现Assembly language step-by-step 是一个非常好的资源。它的背面也有一个针对 Linux 程序集的部分。

      【讨论】:

      • +1,作者正在编写新版本。他最近写道:“我现在大约完成了第 9 章的 2/3,共 13 章;还有 113,000 字,大约 175,000 字。必须在 6 月 30 日之前完成。”有关更新,请参阅 contrapositivediary.com
      【解决方案3】:

      可能没有比The Art of Assembly Language Programming 和该网站上的其他资源更好的了。

      【讨论】:

      • 好吧,但是如果我不会使用HLA,学习它有什么意义呢?
      • 你不能使用它,为什么?免费下载。在任何情况下,本书都会介绍常规指令集,包括您如何编写 HLA 宏随后提供给您的结构。
      • 我开始阅读这本书,但发现它很难读,并且发现 HLA 妨碍了我。这有点像通过学习葡萄牙语来学习西班牙语。有没有什么好书可以用 FASM 来教?
      • 我可以实际使用 HLA 在 x86 架构上调试程序吗?
      • @unknown - 您可以使用任何具有汇编知识的 sn-ps 来调试程序。但老实说,有更好的方法来调试你的代码。
      【解决方案4】:

      学习汇编级编程实际上有两个部分:基本概念,然后是具体架构。如果您没有接触过 asm 编程,我强烈建议您首先使用简单的小型架构来了解基础知识,即使它可能并不直接适用于任何实际硬件。如果很多人都指向某个特定资源,例如“...的艺术”,请再看一遍,用它来了解架构是什么,如何使用基本工具(asm、调试器、disasm 等)。

      一旦解决了这些问题,您就可以开始研究更高级的指令集。 x86 架构和指令集非常复杂,有许多晦涩难懂的方法可以让您绞尽脑汁——在解决之前先学习一些简单的东西。

      【讨论】:

        【解决方案5】:

        尽管我在学校认识的很多人都讨厌这本书,但我还是会把它链接起来:

        http://www.amazon.com/Professional-Assembly-Language-Programmer/dp/0764579010

        我使用这本书的主要原因是因为它在 Linux 上使用带有 GNU 汇编器的 x86。最后一点很有帮助,因为我不得不在我们学校的实验室中使用那个汇编器,如果你不知道 - 语法与英特尔语法不同。

        另外,我想补充一点,学习如何将高级语言编译成汇编语言确实帮助我继续前进。

        【讨论】:

          【解决方案6】:

          x86 汇编确实是一种 intel 语言,最好使用 intel 芯片和执行 DOS 的 windows 平台学习

          如果你有 WinXP 之类的东西,曾经有一个 DOS 解释器,它向用户展示 asm 的基础知识,并允许用户实时反转命令并调整代码,然后将代码组装成一个块在解释器上运行

          它被称为“Ketman Interpreter”

          它仅适用于 DOS asm,但它非常独特,因为它可以让您看到所有寄存器和标志发生了什么,并允许完全无知的人掌握逻辑

          【讨论】:

            【解决方案7】:

            试试http://www.emu8086.com,它是一个带有汇编器和调试器的 Windows 托管 8086 仿真器。它带有一个教程。

            【讨论】:

            • 这意味着运行窗口。这是一个很大的牺牲。
            • @CharlieMartin "运行窗口" "一个巨大的牺牲" 让我发笑。 Linux 和 Unix 万岁!
            【解决方案8】:

            我从一本关于 8086 的书中学习了 x86 汇编程序(我现在不记得它的名字了......它显然很老,而且是紫色的。如果你真的感兴趣,我可以在我的时候挖掘它回家)。那只会教你 16 位的东西,对于更高级的 32 位东西,我在网上阅读了一些教程。我从来没有做过64位。至少一开始,您所针对的操作系统可能并不重要,因为您的级别太低了……BIOS 是您真正关心的全部。如果您无法访问测试系统,仿真器可能是一个不错的选择,正如其他人所提到的,但您也可以自己构建一个 8088 或 8086,而不会因离散部件而产生太多麻烦。您可以轻松地在线找到教程和电路图。它的成本应该低于 50 美元,而且是一次很棒的学习体验——您实际上是在从头开始构建主板。

            如果您不太喜欢 x86 汇编并想学习 RISC,我推荐Microchip PIC 微控制器。您可以花不到 50 美元购买一个入门工具包(我拥有的 PICKit 1 甚至可以在 Linux 下工作)。他们有大量的文档和大量针对业余爱好者的第三方教程。

            【讨论】:

            • 入门套件听起来很有趣。我可能会调查一下。谢谢。
            【解决方案9】:

            别忘了拿一份Guide-Assembly-Language-Programming-in-Linux 的书。

            【讨论】:

              【解决方案10】:

              汇编语言编程的艺术

              【讨论】:

              • 你读过这个问题吗?还是答案?
              猜你喜欢
              • 2010-09-28
              • 1970-01-01
              • 1970-01-01
              • 2013-06-25
              • 2015-01-13
              • 1970-01-01
              • 2013-04-13
              • 2019-06-07
              • 2010-12-01
              相关资源
              最近更新 更多