【发布时间】:2012-05-10 10:12:58
【问题描述】:
我最近买了一个 Arduino Uno,它基本上是一个 atMega328 avr 处理器,具有所有细节,例如 I/O 和与计算机的连接,为您处理。
我已经使用 Arduino IDE 和 avr-gcc 集合成功编写了代码。但是,我想为它编写纯汇编代码,但我遇到了死胡同,因为似乎几乎没有文档也就是说,我想编写“纯”程序集,没有内联c程序集等。我想要这样做的说明,如果可能的话,一个示例程序(gcc-avr的程序集输出不是那样)乐于助人,难以理解等等)。
特别是:
- 如何指示 avr-as 将该代码放入例如中断向量中?
- 有哪些指令可用?
- .data 和 .bss 部分在哪里?
感谢您指出适当的示例。
【问题讨论】:
-
不是真正的答案,但avr-asm.tripod.com 可能会有所帮助
-
@Justin808 谢谢,但是这个网站似乎没有讨论气体特定的语法、约定等,这是我所要求的,因为 Atmel 对 avr 功能进行了详细记录。跨度>
-
github.com/dwelch67/avr_samples,不幸的是,我的 avr 样本似乎不是 gnu 汇编程序而是 avra。如果您在我的其他存储库中闲逛,尽管您会看到许多带有尽可能简单的链接器脚本的 gas/gcc 示例。相同的主题适用于任何目标,链接器脚本具有正确的 ram 或 rom 和 ram 地址,_start: 符号作为您的入口点,将引导 asm 代码对象首先放在 -ld 命令行中,以将其放在二进制等。如果没有帮助,我可以将 gnu 制作为 avr 示例
-
其实看看github.com/dwelch67/avriss有一个基于gcc-avr的例子。我的指令集模拟器可能会或可能不会被调试,不要依赖它,但该示例应该显示您想要的,如果您不想要 C 代码,请不要编译和链接它,只需将启动文件作为您的唯一来源.或添加其他汇编源。除了链接描述文件强制的东西之外,入口代码是 ld 命令行上的第一个对象(ld 将东西按命令行顺序放入二进制文件中)
标签: gcc embedded arduino avr gnu-assembler