我正在编写一个编译器,我已经完成了他们在所有编译器书籍中向您展示的所有步骤(标记化,解析,语法树结构等)。 (请不要注释“编写编译器的资源”的链接!)。
我选择使用NASM和alink作为我的后端。
现在我的问题是:我找不到任何用于学习NASM和装配的好资源。
x86程序集上的wikibook(德语)可怕。他们甚至没有解释他们在那里写的代码,我目前甚至无法得到简单的东西,如添加1到2并输出结果。
答案 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/