有什么方法可以从RAM运行二进制代码吗?


8

我正在寻找一种便宜的单板计算机,该计算机可以用汇编语言进行编程,并使用有限的功能从PC和简单的I / O外围设备加载目标代码。

理想情况下,我希望能够在合理的时间内自己编写机器上的所有代码。我不希望这样的操作系统,因为我想要一个程序在RAM中写入一些代码,然后分支执行它。就适合于汇编编程的系统简单性而言,Arduino可能是我最好的选择,但是它具有哈佛架构,并且不允许我从RAM中执行。

多年前,我使用的是冯·诺依曼(Von Neumann)架构的8位CPU,它可以将执行分支到任何地址,无论它是映射到ROM,RAM还是其他任何地址。这就是我现在想做的。

我可能可以在RAM中编写和加载在RAM中编写的操作码解释器,但这是一个非常复杂且耗时的解决方案,除非已经存在这种虚拟机。

关于Arduino或我可能使用的其他微控制器的其他解决方法的任何建议吗?

谢谢!

皮埃尔


3
PIC32是普林斯顿(Von Neumann)架构芯片。它是一个MIPS CPU,因此尽管没有低档的AVR更为复杂,但已有很好的文档记录和标准化。您可能更喜欢chipKIT板。
Majenko

2
尽管已作为哈佛架构进行了优化,但ARM Cortex-M系列可以在RAM上以可容忍的效率损失执行,并且这样做的速度仍然比AVR快得多。至少有六家芯片公司基于该内核的许可来提供广泛使用的产品,尽管许多人使用供应商和/或半标准库,但完全有可能根据数据表自行完成所有工作。我之所以选择STM32,是因为它们的发现板非常便宜,可以使用开源工具在Linux / OSX上工作,并且可以在定制板上编程芯片,但是现在也使用了Kinetis。
克里斯·斯特拉顿

主要问题是为什么?为什么需要从RAM执行ASM?您想使用哪种组装?由于每种体系结构都有其自己的语言...您这样做是出于学习目的吗?或者您有特定的目标?
frarugi87

2
我不同意,为什么我希望这样做与我当时提出的问题无关,因为这并不是解决其他问题的方法。顺便说一句,我遵循了Majenko的建议,目前我有一个Uno32 plus外部接口运行程序集(并从程序集调用C函数),在RAM中编写其自己的修改的asm代码并执行它。
皮尔(Pierre),

Forth是您所寻找的:)
Mikael Patel

Answers:


1

我认为口译者的想法更为可行。在汇编器中编写本身在RAM中生成机器代码然后执行的代码的概念本身非常复杂。

您没有说为什么要这样做,所以这有点像XY问题

我不想要一个操作系统...

普通的Arduino并没有安装操作系统-基本上,您编写的代码就是加载到芯片上的代码。


2
一言以蔽之。在当今时代,无法执行可修改的内存是一个非常不寻常的限制,大多数其他名义上的哈佛体系结构设备都经过修改,可以避免这种限制。与处理许多廉价,高性能,易于使用的芯片中的一种具有必要的内部连接以简单地从RAM执行代码相比,编写软件解释器将需要更多的工作,并且效率将大大降低。在这种模式下,流水线操作效率略低,仍然远远超出软件解释的范围。
克里斯·斯特拉顿

1
否。如果要进行运行时代码修改,则直接生成机器代码比生成高级代码要容易得多,而且必须按照您的建议创建编译器或解释器。花一些时间手写说明以获得一些观点可能是值得的。不,“我自己在机器上编写所有代码” 并不指代开始时的运行时代码生成,而是指创建原始工作,而不是依靠其他作者来支持组件。
克里斯·斯特拉顿

1
这是一个用于Arduino的简单第四种样式的外壳,可从任何内存存储(SRAM,EEMEM,EEPROM)执行代码。不是最快的解释器,而是说明如何提取指令提取(内存访问)和指令指针(调用/返回地址)。github.com/mikaelpatel/Arduino-Shell
Mikael Patel

1
我印象深刻,Mikael。几年前,我为Apple II写了一个Forth解释器。我怀疑这些天我是否还能找到代码。好老Forth,还活着,踢着!:)
尼克·加蒙

1
@NickGammon我最近为Arduino写了一个更传统的第四虚拟机(fvm)。它允许将字节指令解释器嵌入Arduino草图中,因为它是多任务处理(允许fvm生成)。github.com/mikaelpatel/Arduino-FVM。有一个令牌编译器(在Arduino上运行:)和一个传统的第四交互式解释器。请参阅示例草图。
Mikael Patel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.