【问题标题】:Starting Assembly开始组装
【发布时间】:2009-11-16 23:26:40
【问题描述】:

我是汇编语言的新手,想学习。我有 Vista-64(将升级到 Windows 7 64),我很快将重新安装 32 位 Linux,但我最终会在两个系统上编程,可能使用 NASM。我想知道 32 位汇编程序是否可以在我的系统上编译和运行。如果不是,主要的区别和限制是什么?我在哪里可以学习在 64 位系统上编程?

【问题讨论】:

    标签: assembly 64-bit


    【解决方案1】:

    NASM 不支持 64 位(或者等等,它是最近添加的支持吗?)。我推荐 YASM,它与 NASM 非常相似,但它更活跃,我相信支持更多平台。

    64 位汇编编程与 32 位相当不同(假设您在谈论 x86)。所有内存访问现在都是相对于 RIP 而不是绝对的(没有特定的覆盖)。我建议先学习 32 位编程,因为那里有更多的文档。我不建议同时学习两者!

    另外,我认为使用 Linux 会更容易,因为它更容易与标准 C 库交互(除非你想成为一个男人并进行系统调用)。

    此外,对于 64 位系统,Windows 和 linux 在 64 位机器上的调用约定是不同的。这是与现有库交互时必须注意的事项。

    编辑: 哦,是的,64 位 vista 可以很好地运行 32 位程序(iirc,您可以从 64 位操作系统检测到您处于 32 位模式)。我强烈建议只在 Linux 和 Vista 上使用 32 位开发,因为它们具有相同的调用约定 (iirc),因此您用于与 C 库交互的任何代码大部分都可以独立于平台

    【讨论】:

      【解决方案2】:

      64 位 vista 可以正常运行 32 位可执行文件

      【讨论】:

        【解决方案3】:

        它们应该可以工作,但请记住,通常汇编代码是特定于平台的,因此为 Linux 编写的汇编代码可能无法在 Windows 上汇编。

        【讨论】:

        • 总是有与libc的接口。在汇编中很难做抽象,但绝对可以
        • @earlz:你说什么!操作系统之间的区别主要在于系统调用接口。当然,CPU 运行操作码,所以这些操作码在整个操作系统中都是相同的。 64 位的语法不同于 32 位(寄存器名称等),所以就是这样。在 Linux 上,通常的汇编器是具有 AT&T 语法的 gas,而不是具有 Microsoft 语法的 NASM。我也建议 OP 在 Windows 上使用 gas。 (gas = gnu 汇编器)
        • 我发现 gas 更加困难,对于没有经验的用户来说更加神秘。我相信他有知识做pkg_add yasm。大多数教授初学者汇编的书籍都教授英特尔语法而不是 AT&T。
        • 等等,@Heath。如果您谈论使用 C 代码进行内联汇编,那么 AT&T 是 Linux 的通常选择。有秘密.intel_syntax 指令。但是对于内联汇编,它更难使用,因为你不能以同样的方式插入变量
        猜你喜欢
        • 2021-08-06
        • 1970-01-01
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多