【发布时间】:2009-07-20 17:50:41
【问题描述】:
我想在我的 Mac 上编写一些程序集,最好是原生的,但我会理解在 QEMU 或其他东西中学习是否更容易。
我发现不同的处理器有不同的汇编语言——哪种语言是“最好的”学习?
我真的不知道从哪里开始,甚至不知道如何在汇编中运行程序?
【问题讨论】:
标签: assembly
我想在我的 Mac 上编写一些程序集,最好是原生的,但我会理解在 QEMU 或其他东西中学习是否更容易。
我发现不同的处理器有不同的汇编语言——哪种语言是“最好的”学习?
我真的不知道从哪里开始,甚至不知道如何在汇编中运行程序?
【问题讨论】:
标签: assembly
我的建议是与最好的汇编程序生产商合作: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
【讨论】:
几年前(好吧很多),我拿起了彼得诺顿关于装配的书http://www.amazon.com/Assembly-Language-Primer-Personal-Computer/dp/0136619010。这是开始为 PC 进行汇编编程的绝佳方式。我想知道你是否仍然可以得到这个并使用 DOSbox 来解决它。
【讨论】:
虽然它不是某些人所说的“最好”的组件,但我还是建议学习 X86 / X86-64,因为它是使用最广泛的。要运行该程序,您只需使用 GCC 将其转换为二进制文件,然后通过控制台运行即可。
【讨论】:
参与在汇编代码中蓬勃发展的社区。首先想到的是演示场景。一方面,请查看productions released for x86 Macs on pouet.net。尝试与活跃组中的一些编码员取得联系。他们中的一些人可能愿意分享想法和代码,甚至可能激励您编写自己的代码。
这就是我当年开始的方式,但使用的是 Atari 8 位。
【讨论】:
我学习了 MIPS,并在 SPIM 中测试了“计算机组织”课程。
不确定this book 是否有效,但可能值得一试。我们使用了教授编写的“书”(更像是教程,实际上是备忘单),因此无法使用。
【讨论】: