Assembly 如何在AVR 8位上实现内联组装?
我知道这与“愚蠢的问题”很接近,但我一直在研究如何在AVR 8位引导加载后执行机器代码,并了解到,AVR 8位MCU上使用的哈佛体系结构使得除了flash以外的任何地方都无法执行代码。那么,如何在运行时使用内联asm引入新的可执行代码呢?您混淆了三件事:Assembly 如何在AVR 8位上实现内联组装?,assembly,microcontroller,avr,avr-gcc,harvard-architecture,Assembly,Microcontroller,Avr,Avr Gcc,Harvard Architecture,我知道这与“愚蠢的问题”很接近,但我一直在研究如何在AVR 8位引导加载后执行机器代码,并了解到,AVR 8位MCU上使用的哈佛体系结构使得除了flash以外的任何地方都无法执行代码。那么,如何在运行时使用内联asm引入新的可执行代码呢?您混淆了三件事: 内联装配 内联汇编用于将汇编指令传递给C(或任何语言)编译器。编译器将把汇编指令添加到它生成的代码中。最后,内联汇编程序指令的存储方式与编译器生成的指令相同。如果将程序写入闪存,内嵌指令也将位于闪存中 引导加载程序 引导加载程序通常会从一些输
也就是说,我还没有看到使用这个函数来运行额外代码的代码。额外的复杂性可能使像AVR这样的小型低功耗微控制器不可行。内联汇编在运行时不会引入新的可执行代码。为什么您认为内联asm意味着“在运行时”“?更恰当地说,来自内联asm指令的汇编程序输出机器代码将被写入闪存。但是,是的,关键点正如您所说:内联asm在编译时在您编写的约束的控制下与编译器生成的asm混合。据我所知,没有AVR能够从RAM执行代码(所有指令总线部分都指向内部闪存,甚至无法从外部访问)。因此,最后一段中的“可能”是“肯定”。此代码是否可执行?其他处理器要求可执行指令位于具有可执行权限的内存块中(不确定AVR).我的理解是AVR使可执行内存块为只读。我的具体理解是,根据启动情况,这些内存块可以是可写但不可执行的,也可以是可执行但不可执行的writable@JSON我自己还没有使用过这个函数,但是即使是最小的AVR,比如TinySafeBoot:,也有一些引导加载程序,它们可以编写插件运行时闪存的指令。