编写指令集模拟器的主要步骤是什么?

时间:2011-01-03 18:50:02

标签: assembly simulator

我将研究一个需要为特定指令集编写模拟器的项目(可能不适用于真正的处理器)。优选地,该模拟器将类似于用于MIPS ISA的SPIM模拟器。它将显示所有寄存器,存储器位置等的内容,并让我逐步执行指令。是否有用于编写模拟器的标准步骤集?从哪里开始?

我知道Java和C ++,我完成了两门计算机体系结构课程并在一个3人团队中工作。

3 个答案:

答案 0 :(得分:4)

第一步是为CPU创建汇编程序。汇编程序与模拟器没有任何关系,在我看来,模拟器中的汇编解析器会不必要地复杂化。

使用单独的汇编程序可以保持模块化,它允许模拟器将简单的二进制代码作为输入 - 您甚至可以单独创建,验证和修改代码。它也符合现行做法。

对于您的模拟器,在Google上搜索writing a CPU simulator时会有this作为第一个点击,并且会有更多有趣的结果。

答案 1 :(得分:4)

答案 2 :(得分:3)

  1. 起点是指令集本身&处理器的内部架构[有时称为'编程模型']&什么是寻址模式。
  2. 彻底了解每个指令应该做什么[在处理器内部]&处理器期望为该指令发送[到存储器或i / o端口]的输出
  3. 设计机器代码指令的指令格式:指令的机器代码中应该有多少位/字节;除此之外,必须确定构成操作码的位数,用于指示寻址模式的位数,用于指示操作数[寄存器,数据或地址]的位数等。也决定了订单&这些位组的组合。你可以方便地保留总数。机器码指令中的位数为8的倍数[大小为1或2或3字节的机器码指令对于u比12位或17位更方便]。
  4. 在模拟器软件中[你可以用c / cpp / java或者你最喜欢的语言编写],你将分配变量来表示cpu的内部寄存器; ALU的工作将由您的SW中的功能完成;您的SW将从二进制/ ascii-hex文件中读取机器代码指令;每个指令都要根据不同的位组指示进行分析];然后根据这些指示调用必要的功能。
  5. 为模拟器sw设计一个良好的用户界面。我想你可能会使用模拟器进行演示/教学/培训。当动作正在进行时,显示sw [在cpu内部进行的动作]的动作;例如,当从这些位置写入或读取数据时,u可以显示堆栈存储器位置或寄存器。它将有助于更好地理解用户的cpu操作。更重要的是,当你开发/测试模拟器sw时,它会帮助你轻松定位错误。