支持打印过程变化量的修改版 Mars

沈锎

因为之前不知道 Toby 学长开发的修改版 Mars,所以自己动手尝试了一下。但是现在要用的话,肯定用学长的修改版更好啦!

https://github.com/Toby-Shi-cloud/Mars-with-BUAA-CO-extension

下载

看到右侧的 Release,目前最新版是 0.4.2【11月11日才更新的!优化了新增配置的用户体验】

从源代码构建

Clone 下来源代码,丢到 IDEA 里面,运行 Mars.java 即可,若想打包成 jar,可以参考一下百度,新建一个工件,不赘述。

对修改版进行贡献

首先 fork 一下原始仓库,然后在自己 fork 下来的仓库中进行修改、提交等。原仓库配置了 github 的工作流,可以通过

1
2
git tag vx.y.z
git push --tag

给最近的一次提交打上 tag,x.y.z 是你写的版本号,然后推送上去(推送到你自己的仓库),会自动进行打包,并运行一些测试。

接着,在 github 上发起 Pull Request!学长就有可能去合并你的代码哦!

【以下内容不属于学长的修改版 Mars,用法不适用】


众所周知,Logisim 的 Logging 功能可以输出 CPU 运行过程中的一些信息,如对寄存器或者 Memory 的写入,而 Mars 的 dump 参数可以输出运行结束后的寄存器或者 Memory 中的数据。

这俩真不般配!

但是,倘若对其中的某一个进行修改,是不是就可以拿 Mars 和自己写的 CPU 进行对拍了呢?答案是肯定的。

我发现问题远比想象中的要简单。

使用方法

新增参数:record,按照固定格式打印寄存器及内存的变化。注意,这里的 “变化” 指 “写入”,即使内容没有发生变化,只要有写入的动作,就会被打印(应该吧)。

打印格式:

1
2
$<reg_name>($<reg_id>): <old> => <new>
*<address>: <old> => <new>

例如:

1
2
$t9($25): 0000eebb => 0000ffff
*000002e4: 00000000 => 0000ffff

对于寄存器,只会打印 $1 ~ $31 的变化。


命令行举例:

1
java -jar Mars_with_record_headless.jar mc CompactDataAtZero record test.asm

注意,打印的“目的地”是标准输出,而 Mars 的一些提示语默认也是打印到标准输出,不过好在它们很容易区分。

修改内容

  • 禁用了 mars.MarsLaunch 中启用 GUI 的代码(这是为了避免后续修改可能造成的不良影响)
  • mars.Globals 增加了全局配置 record,及其相关的参数解析
  • mars.mips.hardware.Register 中增加了对寄存器变化的打印
  • mars.mips.hardware.Memory 中增加了对内存变化的打印

下载链接

不能用这个 jar 包来启动 Mars 界面!!!

https://bhpan.buaa.edu.cn/link/AA2B7CEECAD915432EA982A2509B60A861存档GitHub Releases

文件名:Mars_with_record_headless.jar

字节码版本:52.0 (jdk1.8)


hanz
1
0%