我正在尝试将我使用 g++ 编译的 elf 文件的 hexdump 手动加载到我设计的处理器模拟中。一个标准的 elf 文件有 30 个部分,我正在加载所有 30 个段,并考虑到它们的正确内存位置偏移量。然后我在部分 (00400130) 的开头启动我的程序计数器,.text
但似乎程序运行不正确。我已经使用 SPIM 作为黄金标准,相对彻底地验证了我的处理器设计。奇怪的是,如果我将一个程序集文件加载到 SPIM 中,然后将软件生成的反汇编文件.text
和.data
部分加载到我的处理器内存中,程序就可以工作。这与我想做的不同,因为我想:
- 编写一个c++程序
- 使用 mipseb-linux-g++ 编译它(交叉编译器)
- 十六进制将所有部分转储到自己的文件中
- 读取文件并将内容加载到处理器“内存”中
- 运行程序
我最初应该在 ELF 文件中的哪个位置放置程序计数器?我现在一开始就有.text
。另外,我是否只需要包含.text
并.data
让我的程序正常工作?我在这里做错了什么?