我想在我的Mac上编写一些程序集,理想情况下是原生的,但是我知道在QEMU中学习它是否更容易。
我看到根据处理器有不同的装配方言 - 哪种方言是“最好的”学习方法?
我真的不知道从哪里开始,有关如何在程序集中运行程序的任何指示?
答案 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位上。