对CPU内部电路实现加减乘运算简单模拟
warning:
这篇文章距离上次修改已过1791天,其中的内容可能已经有所变动。
ps:这是我以前的一个课程设计,今天正好学妹问这个,顺手发上来吧。
源码点击此处下载(别问我为啥不用github,学校网忒蛋疼,这是我本地的Git仓)
改天有空好好重写下,这个看的我难受。
如果有建议或意见,欢迎与我交流!
概述
- 实验目的:编写一个程序,模拟CPU内部的加、减、乘、除功能尽量还原真实CPU的运算过程。
- 实验要求:本程序按照老师的指导和要求实现了模拟CPU的加法、减法及乘法运算。有半加器,全加器,多位全加器,移位器,并设有与门、或门、非们、与非门、或非门、异或门辅助运算,还用程序模拟了零标志位、负标志位、溢出标志位、进位或错位标志位,并设有溢出警告和输入非法数值警告,尽量还原了真实CPU的运算过程。
- 实现语言:Java
- 开发环境:JDK 1.8.0 + Eclipse Java EE v4.7.2
程序设计流程
本次课程设计过程如下图1所示:
CPU 模拟程序运行主界面如下图2所示:
CPU 模拟程序运行流程图如下图3所示:
软件功能设计
加法的运算
- 首先是加法运算的运行截图,输入2和-6结果如下图4:
- 程序接收的数字是十进制,所以运算之前先将输入的值转为二进制,依次转成原码、反码、补码,存储到数组等待计算,计算结果如下图5所示:
- 加法使用补码进行计算,将转换后的补码交由多位全加器计算,中间的过程包含标志位的状态,如下图6所示:
- 其中多位全加器由全加器实现,全加器则由与、或、非门实现。
- 运算可能出现溢出,则由全局溢出标志位“V”判断,如果溢出,则程序警告溢出,如下图7所示:
减法的运算
- 首先是减法运算的运行截图,输入2和5结果如下图8:
- 用前面计算出的补码做减法运算,由于减法和加法运算原理一样,在此不做赘述,减法过程包含标志位的状态,如下图9所示:
乘法的运算
- 首先是乘法运算的运行截图,输入6和-1结果如下图10所示:
- 乘法运算需要用到左移和右移,移位过程如下图11所示:
非法数值的提示
- 本程序模拟的是8位计算器,故需要判断输入的数值是否合法,非法数值输入提示如下图12所示:
- 数值为空也是不合法的,将不进行计算,如下图13所示:
程序核心代码
门电路模拟
半加器、全加器、多位全加器、移位器模拟
十进制转原码
十进制转反码、补码,利用原码可迅速求出
补码转为十进制
课程设计心得
通过这次用程序实现CPU运算过程的课程设计,让我对计算机基本原理和系统结构都有了很深的体会和认识,对于计算机的基本结构基本组成与结构原理各功能部件在整机中的作用以及所要完成的任务程序和数据在计算机中是如何存储的以及指令在计算机中的执行过程计算机与外部设备之间的接口技术与原理和计算机外部设备的基本结构与工作原理等这些课程内容基本上已经掌握。该课程主要讲解计算机的完整组成原理和内部运行机制包括运算器部件,控制器部件、存储器子系统、输入/输出子系统、总线与接口等与输入/输出系统设备围绕各自的功能、组成、设计、实现、使用等知识进行介绍。此外该课程的工程性、实践性和技术性比较强还强调培养学生的动手动脑能力、开创与创新意识、实验技能这些要求更多的是通过作业、教学实验等环节完成要求我们有意识地主动加强这些方面的练习与锻炼。
参考资料
- Java编程思想第4版中文版
- 计算机组成与结构(教材)
- 计算机组成原理,张新荣,机械工业出版社 2009年3月