2009-07-20 70 views
16

我想在我的Mac上编写一些程序集,理想情况下是原生的,但我会理解它是否更容易在QEMU中学习或什么。我如何开始学习汇编

根据处理器的不同,我看到有不同的汇编方言 - 哪种方言是最好学的?

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

回答

1

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

14

我的建议是与最好的汇编程序生产者一起工作:gcc。

在C中编写简单的程序,然后用-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 
+0

这听起来很有用。如何将.s文件转换为二进制文件? – 2009-07-20 17:55:52

0

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

不知道是否this book可以工作,但它可能值得一试。我们使用了由教授编写的“书”(更像是一个教程,还有一个作弊表),所以它不可用。

0

参与在汇编代码中繁荣的社区。首先想到的是demoscene。首先,请查看productions released for x86 Macs on pouet.net。尝试联系活动组中的一些编码员。他们中的一些可能愿意分享想法和代码,甚至可以让你有自己的想法。

这就是我今天开始回来的方式,但在Atari 8位。