这是崔晨昊、祁昊小组的Y86模拟器的自述文件
本模拟器需要在Windows下运行
(由于读取dll库时采用的相对路径,所以请不要改变文件夹的顺序)
模拟器运行程序为:../gui/Y86模拟器.exe
HINT:由于用了tkinter包获取屏幕大小以及打开文件选取对话框,运行时较慢,同时有可能几秒钟后仍无法显示第一个文件选择的窗口。此时程序在后台运行,但是窗口没有刷出来,可以尝试在任务管理器中双击打开 。 ps:tkinter的这个函数确实不稳定,窗口刷出来很慢......如果一直无法运行,请联系我们小组修改代码。
双击exe文件后静待几秒,弹出对话框。选择并打开要测试的.yo文件后(已经附在testexample文件夹中),会弹出前端窗口,窗口的左侧显示15个寄存器的值,上端显示三个CC寄存器的值,中部和下部显示程序运行状态,以及5个流水线寄存器的值。
单击屏幕右下角的NEXT、按键盘→键、↓键、鼠标滚轮下滚(推荐用这个hh)均可以使CPU执行一个时间周期。
CPU状态为halt、domain error、invalid instructon时,前端不会再响应鼠标、键盘事件。
按下键盘A键,可以将模拟器设为自动运行,再次按下A键,仍切换回手动运行状态。(见窗口右上角AUTO、MANUAL标识)
AUTO状态下按键盘上的=键可以调快速度,按-键可以减慢速度
本模拟器后端使用了C++编写,makefile用于编译产生动态链接库。前端使用python3编写,使用了pygame拓展包。(想要用python运行.pyw程序的话,由于代码应用了最近新发布的pygame2.0.0的一个实验性功能,如果之前安装了pygame包,请务必pip install --upgrade pygame)
R.h ↑ F_Reg.h、D_Reg.h、E_Reg.h、W_Reg.h、W_Reg.h ↑ TOP.h TOP.cpp ↑ common.h ↑ FETCH.h、DECODE.h、EXECUTE.h、MEMORY.h、WBACK.h ↑ main.cpp
CCH_QH.dll 编译出的dll库
↑ Y86模拟器.pyw
包含REGISTER类(64位数据)、REGISTERS类的属性、方法的声明。在实现REGISTER类时,使用了union联合,可以将数据解释为longlong 或 char数组,前者方便内存的寻址,后者方便赋值。
包含五个流水线寄存器类的属性、方法的声明
声明所有的全局变量
用extern关键字声明全局变量,之后的文件include"common.h"即可
五个阶段类的属性、方法的声明。使用类来封装是为了便于使用统一的接口,以及在不同命名空间下用同一方法名,避免了函数的混乱。
为前端提供接口
定义一些颜色常量
调用ctype库,读取dll中的接口函数,做一些预处理
绘制主要的图形界面以及窗口事件响应