我正在尝试用 C 语言编写一个简单的软 CPU,它将在嵌入式应用程序的虚拟机器上运行。我对此很陌生,所以请耐心等待。
我一直在尝试在 IDE 中执行此操作,但遇到了一个问题,我需要 malloc 内存,但没有获得一致的内存地址来分配我的寄存器,因此我无法运行测试和调试。在实际的硬件上,我知道文档会给我特定寄存器、主内存和硬盘内存的地址,对吗?我希望能够为我的寄存器定义宏,然后我可以将其传递给读/写,但是如果没有静态内存地址,这似乎是不可能的。
所以看来我需要一种好方法来使用静态地址分配静态内存块,无论是在 IDE 中还是在我自己的带有文本编辑器的机器上。最好的方法是什么?作为引用,我正在使用 Cloud9 IDE,但不知道如何在这个平台上执行此操作。
谢谢!
最佳答案
您应该执行类似 uint8_t* const address_space = calloc( memory_size, sizeof(uint8_t) );
的操作,当然检查返回值,然后将所有机器地址索引放入数组中,就像address_space[dest] = register[src];
。如果您的模拟 CPU 可以处理不同大小的数据,或者比主机 CPU 的对齐限制不太严格,则需要使用 memcpy()
或指针转换来传输数据。
无论address_space
是静态分配还是动态分配,您的调试器都会理解诸如address_space[i]
之类的表达式,但如果您事先知道确切的大小,则可以静态分配它,例如,模拟具有 16 位地址且始终具有 65,536 字节 RAM 的机器。
关于c - 用于编写虚拟机软CPU的分区内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44207747/