为编译器编写选择合适的学习汇编程序

时间:2010-04-22 21:42:26

标签: x86 nasm assembly

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

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

现在我的问题是:我找不到任何用于学习NASM和装配的好资源。

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

  • 我在哪里可以学习NASM x86组装?

3 个答案:

答案 0 :(得分:0)

好吧,如果你接受一本书作为参考。我在80年代学习帕斯卡尔时最喜欢的作者是杰夫·丹特曼。他最新的装配书涵盖了NASM。 http://www.duntemann.com/assembly.htm

不确定您的目标是什么操作系统,但上述本书针对Linux的事实应该不是问题,汇编构造是您感兴趣的。

老实说,代码生成的实际组装并不是最难的部分,恕我直言,我认为注册管理是真实学习的地方。

Goodk运气好!

答案 1 :(得分:0)

除非你已经检查过,否则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提供以下链接:

我还花了一些时间为你们打造一个小小的问候世界:

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 instruction encoding tables

我得到的旧代码生成器部件位于http://bitbucket.org/cheery/g386/,直到我将基于表的新代码生成器启动并运行。

答案 2 :(得分:-1)

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