Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 选择合适的汇编语言编写编译器_X86_Nasm_Assembly - Fatal编程技术网

X86 选择合适的汇编语言编写编译器

X86 选择合适的汇编语言编写编译器,x86,nasm,assembly,X86,Nasm,Assembly,我正在编写一个编译器,我已经完成了所有的步骤(标记化、解析、语法树结构等),它们在所有的编译器书籍中向您展示。(请不要使用“编写编译器的资源”问题的链接进行评论!) 我选择使用NASM和alink作为我的后端 现在我的问题是:我找不到任何学习NASM和汇编的好资源 x86程序集上的wikibook(德语)非常糟糕。他们甚至没有解释他们在那里写的代码,我现在甚至不能得到简单的东西,比如将1和2相加并输出结果 在哪里可以学习NASM x86汇编 好吧,如果你愿意接受一本书作为参考。我在80年代学习

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

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

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

x86程序集上的wikibook(德语)非常糟糕。他们甚至没有解释他们在那里写的代码,我现在甚至不能得到简单的东西,比如将1和2相加并输出结果

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

    • 好吧,如果你愿意接受一本书作为参考。我在80年代学习帕斯卡时最喜欢的作家是杰夫·邓特曼。他最新的汇编书涵盖了NASM。

      不确定您的目标是什么操作系统,但上面这本书的目标是Linux这一事实不应该成为问题,汇编结构是您感兴趣的

      老实说,代码生成的实际汇编并不是最难的部分,我认为寄存器管理才是真正的学习所在


      祝你好运

      除非您已经签出,否则NASM手册是学习NASM的非常好的资源:

      NASM和GAS的比较也有助于:

      Freenode se(r)版本的irc通道#asm提供以下链接:

      • 了解大会:
      • 80386 HTML参考:
      • Linux/Win32 x86教程w/nasm:
      • Linux汇编手册:
      我还花了一些时间为您制作了一个小小的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编写了一个小型代码生成器。虽然我刚才把那东西放在中间了。最近我写了一些不同的工具,可能对任何处理汇编的人都有用。现在我也在寻求帮助。。除了我似乎必须在那里做一些自助:


      在我启动新的基于表的代码生成器并使其运行之前,我的旧代码生成器已经存在。

      如果有人仍在寻找有关NASM的教程,请查看以下内容:

      编译器没有理由必须输出汇编程序。让它输出一种您熟悉的语言,如C,然后使用C(或其他)编译器生成最终的可执行文件。您的问题更像是您自己所说的“在哪里可以学习NASM x86汇编?”。请选择一个更好的主题,因为它与编译器没有任何关系。你考虑LLVM了吗?在相同的LANGUGUG中,你的代码输出奖励积分。尼尔:我觉得翻译成C不太舒服。。我宁愿在不受其他编译器限制的情况下完全控制和优化我的语言。@X A编写C编译器的人比你可能知道的更多关于优化的知识-你可以利用他们的专业知识。在过去,使用高级语言作为编译器输出已经成功地进行了多次。