我如何开始学习装配

时间:2009-07-20 17:50:42

标签: assembly

我想在我的Mac上编写一些程序集,理想情况下是原生的,但是我知道在QEMU中学习它是否更容易。

我看到根据处理器有不同的装配方言 - 哪种方言是“最好的”学习方法?

我真的不知道从哪里开始,有关如何在程序集中运行程序的任何指示?

5 个答案:

答案 0 :(得分:16)

我的建议是与那里最好的汇编制作人合作:gcc。

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

请记住使用-O0禁用优化,否则您可能会发现奇怪的技巧。

这是汇编程序中的hello world

    .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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我学习了MIPS并在SPIM中测试了一个关于“计算机组织”的课程。

不确定this book是否有效,但可能值得一试。我们使用了一本由教授编写的“书”(更像是一本教程,一本真正的备忘单),所以它不可用。

答案 4 :(得分:0)

参与在汇编代码中茁壮成长的社区。首先想到的是demoscene。首先,查看productions released for x86 Macs on pouet.net。尝试与活动组中的某些编码器取得联系。他们中的一些人可能愿意分享想法和代码,甚至可能让你有动力去写自己的想法。

这是我在当天开始的方式,但是在Atari 8位上。