冯诺依曼式计算机CPU模拟器概要设计
本概要设计报告介绍了一个冯诺依曼式计算机CPU模拟器的设计,旨在模拟真实CPU的工作过程。该模拟器由多个模块组成,每个模块负责不同的功能,包括读取输入、初始化内存、获取指令、翻译指令、获取立即数、输出寄存器内容等。
**数据结构设计**
在模拟器中,定义了多个全局变量和类型,用于存储和操作数据。包括:
* `BYTEmemory[32768]`:用于存储内存中的数据,大小为32768字节。
* `WORDax[9]`:用于存储8个16位寄存器的值,从1开始编号ax[1]~ax[8],前四个为数据寄存器,后四个为地址寄存器。
* `WORDir, ip`:用于存储当前指令寄存器和指令指针的值。
* `shortflag`:用于存储标志寄存器的值。
同时,定义了三种无符号整数类型:
* `typedef unsigned char BYTE`:无符号8位存储类型。
* `typedef unsigned short WORD`:无符号16位存储类型。
* `typedef unsigned int DWORD`:无符号32位存储类型。
**系统模块划分**
模拟器中包括多个模块,每个模块负责不同的功能,包括:
* `read.c`:读取输入到寄存器。
* `initialize_memory.c`:把文件中的内容存入内存。
* `get_instruction.c`:把ip对应地址处连续2个字节存入ir中,然后ip+4。
* `dump_memory.c`:程序结束时输出内存的内容。
* `translate_instruction.c`:翻译指令,根据函数指针表判断ir的前8位,调用对应的函数。
* `get_immediate.c`:获取当前ir对应的立即数。
* `dump_register.c`:每次指令结束输出寄存器内容。
* `get_word.c`:从内存中取连续两字节内容。
* `get_dword.c`:从内存中连续取四字节内容。
**函数调用关系**
模拟器中的每个模块都可能会调用其他模块的函数,例如:
* 主函数调用`initialize_memory`来完成从文件读内存以及内存的初始化。
* 主函数调用`get_instruction`来完成取指和ip+4。
* 主函数调用`translate_instruction`来完成译指和指令对应函数的调用。
* 每个指令模块可能会调用`get_immediate`函数来获取当前指令的立即数。
本概要设计报告介绍了一个冯诺依曼式计算机CPU模拟器的设计,包括数据结构设计、系统模块划分和函数调用关系等方面的内容。