使用avr-gcc编写汇编代码

使用avr-gcc编写汇编代码,gcc,embedded,arduino,avr,gnu-assembler,Gcc,Embedded,Arduino,Avr,Gnu Assembler,我最近买了一个Arduino Uno,它基本上是一个atMega328 avr处理器,所有的细节,如I/O和与计算机的连接,都由你来处理 我已经成功地使用Arduino IDE和avr gcc集合编写了代码。但是,我想为它编写纯汇编代码,我遇到了一个死胡同,因为似乎几乎没有关于它的文档。也就是说,我想编写“纯”汇编,没有内联c程序集之类的东西。我希望得到这样做的说明,如果可能的话,还有一个示例程序(gcc avr的程序集输出没有那么大帮助,不可理解) 特别是: 如何指示avr将代码放入中断向量

我最近买了一个Arduino Uno,它基本上是一个atMega328 avr处理器,所有的细节,如I/O和与计算机的连接,都由你来处理

我已经成功地使用Arduino IDE和avr gcc集合编写了代码。但是,我想为它编写纯汇编代码,我遇到了一个死胡同,因为似乎几乎没有关于它的文档。也就是说,我想编写“纯”汇编,没有内联c程序集之类的东西。我希望得到这样做的说明,如果可能的话,还有一个示例程序(gcc avr的程序集输出没有那么大帮助,不可理解) 特别是:

  • 如何指示avr将代码放入中断向量中
  • 有哪些指令可用
  • .data和.bss节到哪里去了

请给我指点合适的例子,不胜感激。

我建议你去图书馆看看。不要让这个名字误导你。大部分是高度优化的AVR汇编程序,带有链接器脚本、低级别硬件访问等。

我能找到的最好的文档是。这说明:

  • 可以使用avr-libc使用中断向量。为了在没有外部库的情况下使用中断向量,可以引用源代码,正如Brett Hale所建议的那样

  • 它提到了avr的具体指令

它还附带了一个简单的例子。

Arduino Wiki位于
提供了一种实现这一点的方法。它需要修改和重建Arduino IDE,以允许使用汇编代码(.s文件)。

这不是一个真正的答案,但可能是错误的help@Justin808谢谢,但这个网站似乎没有讨论气体特定的语法、约定等,这正是我所要求的,因为Atmel对avr功能有很好的记录。,不幸的是,我的avr样本似乎不是gnu汇编程序,而是avra。如果你在我的回购协议的其余部分闲逛,你会看到许多gas/gcc示例,其中包含了尽可能简单的链接器脚本。同样的主题也适用于任何目标,具有ram或rom和ram的正确地址的链接器脚本,作为入口点的_start:symbol,将引导asm代码对象放在-ld命令行的第一位,以将其放在二进制文件的第一位,等等。如果没有帮助,我可以将gnu作为avr样本,实际上看一个基于gcc avr的示例。我的指令集模拟器可能会被调试,也可能不会被调试,不要依赖它,但是这个例子应该显示出你想要的,如果你不想要C代码,就不要编译和链接它,只留下启动文件作为你唯一的源代码。或添加其他程序集源。除链接器脚本强制执行的内容外,条目代码是ld命令行上的第一个对象(ld按命令行顺序将内容放入二进制)