6

我正在编写一个编译器,并且我已经完成了它们在所有编译器书籍中向您展示的所有步骤(标记化、解析、语法树结构等)。(请不要评论“编写编译器的资源”问题的链接!)。

我选择使用 NASM 和 alink 作为我的后端。

现在我的问题是:我只是找不到任何学习 NASM 和一般汇编的好资源。

x86 程序集上的 wikibook(德语)太可怕了。他们甚至没有解释他们在那里编写的代码,我目前什至无法得到简单的东西,比如将 1 加到 2 并输出结果。

  • 我在哪里可以学习 NASM x86 汇编?
4

3 回答 3

1

除非您已经检查过,否则 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/中,直到我启动并运行新的基于表的代码生成器。

于 2010-05-18T18:15:08.963 回答
0

好吧,如果你愿意接受一本书作为参考。我在 80 年代学习 Pascal 时最喜欢的作家是 Jeff Duntemann。他最新的汇编书籍涵盖了 NASM。 http://www.duntemann.com/assembly.htm

不确定您的目标是什么操作系统,但上述书籍针对 Linux 的事实应该不是问题,程序集结构是您感兴趣的。

老实说,代码生成的实际汇编并不是最难的部分,恕我直言,我认为寄存器管理是真正学习的地方。

祝你好运!

于 2010-04-24T10:05:59.417 回答
-1

如果有人仍在寻找有关 NASM 的教程,请查看以下内容: http ://cs.lmu.edu/~ray/notes/nasmtutorial/

于 2019-03-01T10:07:51.883 回答