我正在编写一个编译器,并且我已经完成了它们在所有编译器书籍中向您展示的所有步骤(标记化、解析、语法树结构等)。(请不要评论“编写编译器的资源”问题的链接!)。
我选择使用 NASM 和 alink 作为我的后端。
现在我的问题是:我只是找不到任何学习 NASM 和一般汇编的好资源。
x86 程序集上的 wikibook(德语)太可怕了。他们甚至没有解释他们在那里编写的代码,我目前什至无法得到简单的东西,比如将 1 加到 2 并输出结果。
- 我在哪里可以学习 NASM x86 汇编?
除非您已经检查过,否则 NASM 手册是学习 NASM 的非常好的资源:http: //www.nasm.us/doc/
NASM 和 GAS 的比较也有所帮助:http: //www.ibm.com/developerworks/linux/library/l-gas-nasm.html
Freenode se(r)ver 的 irc 频道 #asm 提供以下链接:
我还花了一些时间为你混搭了一个小小的 hello world:
bits 32
section .data
greeting db "hello world", 10
section .text
global _start
_start:
mov eax, 4 ; sys_write
mov ebx, 1 ; stdout
mov ecx, greeting
mov edx, 12 ; greeting.length
int 0x80 ; system call interrupt
mov eax, 1 ; sys_exit
mov ebx, 0
int 0x80
组装这个:
nasm -f elf -o example.o example.asm
ld -o example example.o -melf_i386
我自己用python编写了一个小型代码生成器。虽然我刚才把那东西放在中间了。最近我写了一些不同的工具,可能对任何处理装配的人有用。现在我也在寻求帮助。除了似乎我必须在那里做一些自助:x86指令编码表
我拥有的旧代码生成器位于http://bitbucket.org/cheery/g386/中,直到我启动并运行新的基于表的代码生成器。
好吧,如果你愿意接受一本书作为参考。我在 80 年代学习 Pascal 时最喜欢的作家是 Jeff Duntemann。他最新的汇编书籍涵盖了 NASM。 http://www.duntemann.com/assembly.htm
不确定您的目标是什么操作系统,但上述书籍针对 Linux 的事实应该不是问题,程序集结构是您感兴趣的。
老实说,代码生成的实际汇编并不是最难的部分,恕我直言,我认为寄存器管理是真正学习的地方。
祝你好运!
如果有人仍在寻找有关 NASM 的教程,请查看以下内容: http ://cs.lmu.edu/~ray/notes/nasmtutorial/