【问题标题】:How do I start learning Assembly我如何开始学习组装
【发布时间】:2009-07-20 17:50:41
【问题描述】:

我想在我的 Mac 上编写一些程序集,最好是原生的,但我会理解在 QEMU 或其他东西中学习是否更容易。

我发现不同的处理器有不同的汇编语言——哪种语言是“最好的”学习?

我真的不知道从哪里开始,甚至不知道如何在汇编中运行程序?

【问题讨论】:

    标签: assembly


    【解决方案1】:

    我的建议是与最好的汇编程序生产商合作:gcc。

    用 C 语言编写简单的程序,然后使用 -S 开关编译它们。你会得到一个包含汇编代码的file.s。修补它,你就会学会它。 最好的部分是,如果你想学习不同的汇编程序,你可以将 gcc 编译为交叉编译器,并为任何支持的平台生成汇编程序。

    记得用 -O0 禁用优化,否则你会发现奇怪的技巧。

    这是汇编程序中的你好世界

        .cstring
    LC0:
        .ascii "hello world!\0"
        .text
    .globl _main
    _main:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ebx
        subl    $20, %esp
        call    L3
    "L00000000001$pb":
    L3:
        popl    %ebx
        leal    LC0-"L00000000001$pb"(%ebx), %eax
        movl    %eax, (%esp)
        call    L_puts$stub
        movl    $0, %eax
        addl    $20, %esp
        popl    %ebx
        leave
        ret
        .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
    L_puts$stub:
        .indirect_symbol _puts
        hlt ; hlt ; hlt ; hlt ; hlt
        .subsections_via_symbols
    

    【讨论】:

    • 这听起来很有用。如何将 .s 文件转换为二进制文件?
    • -s 是否保留调试信息(变量名等)?
    • 啊,显然 -s 开关已经过时并且被忽略了!
    • @Gab 似乎并非如此,正如您在上面的代码中看到的那样。如果有办法,我不知道。
    • @Rich:链接器已经过时了。还添加 -c 仅执行编译步骤而不执行链接(您没有任何要链接的目标代码)
    【解决方案2】:

    几年前(好吧很多),我拿起了彼得诺顿关于装配的书http://www.amazon.com/Assembly-Language-Primer-Personal-Computer/dp/0136619010。这是开始为 PC 进行汇编编程的绝佳方式。我想知道你是否仍然可以得到这个并使用 DOSbox 来解决它。

    【讨论】:

      【解决方案3】:

      虽然它不是某些人所说的“最好”的组件,但我还是建议学习 X86 / X86-64,因为它是使用最广泛的。要运行该程序,您只需使用 GCC 将其转换为二进制文件,然后通过控制台运行即可。

      【讨论】:

        【解决方案4】:

        参与在汇编代码中蓬勃发展的社区。首先想到的是演示场景。一方面,请查看productions released for x86 Macs on pouet.net。尝试与活跃组中的一些编码员取得联系。他们中的一些人可能愿意分享想法和代码,甚至可能激励您编写自己的代码。

        这就是我当年开始的方式,但使用的是 Atari 8 位。

        【讨论】:

          【解决方案5】:

          我学习了 MIPS,并在 SPIM 中测试了“计算机组织”课程。

          不确定this book 是否有效,但可能值得一试。我们使用了教授编写的“书”(更像是教程,实际上是备忘单),因此无法使用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-01-07
            • 1970-01-01
            • 2022-07-29
            • 2010-09-20
            • 2018-12-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多