需要用C或C++编写MIPS汇编器,寻找一些设计建议
Need to write a MIPS assembler in C or C++, looking for some design suggestions
我需要用C/C++编写MIPS汇编器。 在我开始编写一些代码之前,我认为我实际上应该花一些时间先做一些计划。 我需要考虑大约 15 条 MIPS 指令,包括 J,但不包括 JR。 程序需要接收一个包含 .text、.data 和 .word 部分以及标签的文件,然后输出一个文件,其中第一行是十进制的,其中包含指令数和数据字数。 其余的是用十六进制编码的机器代码。最后一组行由十六进制值组成,表示数据段中单词的初始值。我知道我需要做 2 次传递才能首先解析标签和 JUMP 指令。基本上,我只是在寻找有关如何设置数据结构的建议。 我应该做一个字符串数组来保存操作码、RS、RT、RD 等......然后以某种方式将其转换为十六进制? 或者有没有更好的方法可以从有任何建议/经验的人那里做到这一点? 感谢您的帮助/建议!
实际上,我很久以前就为与类项目相关的事情做了这件事!你说得对,必须做 2 次传球。但是,不要对寄存器使用字符串数组。事实上,你根本不需要使用字符串。您可以将操作码放在枚举中,将寄存器放在枚举中。对于 15 条指令,您可以通过手动编码开关大小写、if-else 语句来轻松完成大部分工作,而不是设计一个完全通用的解决方案。使用正则表达式可能很诱人,但对于您的问题来说,这不值得付出努力(尽管如果您有时间,您绝对应该利用任何机会学习正则表达式!然后使用类似哈希图的结构在寄存器和 OPCODE 及其十六进制值之间进行映射,并使用这些值。可以直接在代码中执行任何地址计算。这只是一个建议,你绝对应该尝试一下。我的主要观点是,如果你正在读取一个字符串,你不应该以相同的形式存储它,因为你可以先处理它并存储一些更有意义的东西(read:object)。
基本上,您只需要标签等的第一遍。您可以在第二遍中执行其他所有操作。如果您查看任何 O/S 教科书中的基本典型编译器/汇编程序流程图,您可以轻松地模拟每个步骤 - 这就是我所做的。
希望这有帮助!
- 为什么我们不编写可以处理C++标识符的汇编器和链接器?
- 如何使用 gcc 内联汇编器代码访问成员变量
- 如何使用C 给出的地址覆盖汇编器堆栈的返回地址
- 与 2015 相比,内联汇编器给出了 C2400
- 在 c++ 中实现内联汇编器以对变量进行异或操作的正确方法
- 简单 g++ 内联汇编器中的错误
- C 汇编器转换问题
- 使用SSE将float值从汇编器DLL返回到C
- 内联汇编器直接双倍到长长转换
- “__cpp”和 gcc 内联 ARM 汇编器
- 需要用C或C++编写MIPS汇编器,寻找一些设计建议
- 将 GCC/ATT 风格的汇编器转换为可视化工作室汇编器
- 如何使用内联汇编器保存寄存器值
- 调用传递给 gcc 内联汇编器 (avr-gcc) 的 const 函数地址
- 用汇编器消息编译错误
- 在Eclipse中,当使用汇编器时,汇编看起来是无限的
- 汇编器消息:错误:拇指条件指令应该在 IT 块中 - "strexeq r1,r2,[r4]"
- 使用内联汇编器时编译器的详细输出
- 普通c++代码比内联汇编器快10倍.为什么
- 观察c++中虚函数在汇编器中的后期绑定调用