组成原理课程设计报告
计算机组成原理算法实现(五)
专业 计算机科学与技术
花小鹏
20xx年6月7日 学生姓名 班学级 号 指导教师 完成日期
计算机组成原理课程设计
目 录
目 录 ....................................................................................................................................... 2
1 设计目的 .................................................................................................................................. 1
2 设计内容 .................................................................................................................................. 1
3 实现方法 .................................................................................................................................. 1
3.1 系统目标 ............................................................................................................ 1
3.2 主体功能 ............................................................................................................ 2
3.3 开发环境 ............................................................................................................ 7
4 小 结 .................................................................................................................................. 7
附 录 ....................................................................................................................................... 8
附录1 源程序清单 ..................................................................................................................... 8
计算机组成原理课程设计
计算机组成原理算法实现(五)
1 设计目的
本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。
2 设计内容
计算机组成原理算法实现(五)
能够实现机器数的真值还原(定点整数)、定点整数的单符号位补码加减运算、定点整数的原码乘法运算和浮点数的加减运算。
3 实现方法
3.1 系统目标
本程序含有以下几个功能模块,分别能够实现如设计内容所设计的功能。共有5
1
计算机组成原理课程设计
系统流程图如图3-2所示:
图3-2 系统流程图
3.2 主体功能
本程序以C#为开发语言,编程实现
Methods.cs
主要运算函数的实现。
Main.cs
主窗体的实现。
Int_Recover.cs
实现机器数的真值还原(定点整数)窗体。
Int_AddSub.cs
实现定点整数的单符号位补码加减运算、定点整数的窗体。 Int_Multi.cs
实现定点整数的原码乘法运算窗体。
Float_AddSub.cs
实现浮点数的加减运算窗体。
2
计算机组成原理课程设计
运行程序并进行相关调试:
程序的主界面如图3-2所示:
图3-2 主界面
当输入的口令出错时所显示的提示,如图3-3:
图3-3 口令错误提示
错误过多,单击确定后程序自动关闭,如图3-4:
3
计算机组成原理课程设计
图3-4 口令错误过多提示
输入正确的口令后,程序显示登陆成功,如图3-5所示
: 图3-5 登陆成功提示
定点整数的真值还原如图3-6:
4
计算机组成原理课程设计
5
计算机组成原理课程设计
图3-6定点整数的真值还原
定点整数的单符号位补码加减运算如图3-7:
图3-7 定点整数的单符号位补码加减运算
定点整数的原码乘法运算如图3-8:
图3-8 定点整数的原码乘法运算
6
计算机组成原理课程设计
浮点数的加减运算如图3-9所示:
图3-9 浮点数的加减运算
3.3 开发环境
VS2010 .Net 4.0 Windows7
4 小 结
这次的课程设计花费很久编码实现,虽然有点开始没有头绪,但是渐渐找到感觉之后就很容易了。最难的部分算是浮点数的运算了,花费的几个小时……
整个过程还是很高兴的,当把所有函数实现的时候是真的很开心的,满足感发自内心。本来是想在网上找点资料的,找了一阵发现是Java实现的,对Java不是很熟就想自己解决吧,最后终于完工了。
通过这次的课程设计,对组成原理有了更深点的认识了。当然,最大的进步算是编程时的定性和思维方式。
以后尽量多动手吧,对自己的实践能力的确会有很大提高。
7
计算机组成原理课程设计
附 录
附录1 主要函数源程序清单
using System;
using System.Text;
namespace CS
{
class Methods
{
#region
public static bool isInt_Num(string str)
{
if (str[0] != '+' && str[0] != '-')
{
return false;
}
else
{
for (int i = 1; i < str.Length; i++)
{
if (str[i] != '0' && str[i] != '1') return false; }
}
return true;
}
public static bool isInt_CodeNum(string str)
{
for (int i = 0; i < str.Length; i++)
{
if (str[i] != '0' && str[i] != '1') return false; }
return true;
}
public static string NOT(string numStr)
{
char[] result = new char[numStr.Length];
for (int i = 0; i < numStr.Length; i++)
{
if (numStr[i] == '0') result[i] = '1';
else result[i] = '0';
}
return new string(result);
}
8
计算机组成原理课程设计
public static string reverse(string numStr)
{
char[] result = new char[numStr.Length];
for (int i = 0; i < numStr.Length; i++)
{
result[i] = numStr[numStr.Length - i - 1];
}
return new string(result);
}
public static int and(char a,char b,char c)
{
if (a == '1' && b == '1' && c == '1') return 3;
if (a == '0' && b == '1' && c == '1') return 2;
if (a == '1' && b == '0' && c == '1') return 2;
if (a == '0' && b == '0' && c == '1') return 1;
if (a == '1' && b == '1' && c == '0') return 2;
if (a == '0' && b == '1' && c == '0') return 1;
if (a == '1' && b == '0' && c == '0') return 1;
if (a == '0' && b == '0' && c == '0') return 0;
return 4;
}
public static string toOpNum(string numStr)
{
string result = "";
if (numStr[0] == '+') result = numStr.Replace('+', '-');
else result = numStr.Replace('-', '+');
return result;
}
public static int toIntNum(string numStr)
{
int result = 0;
int e=1;
for (int i = 0; i < numStr.Length; i++)
{
if(numStr[numStr.Length-1-i]=='1')result += e;
e *= 2;
}
return result;
}
public static string plus(string numStr1,string numStr2)
{
int rltN,state=4,nM=1;
char c='0';
rltN =numStr1.Length>numStr2.Length ? numStr1.Length+1 :numStr2.Length+1; char[] result = new char[rltN];
9
计算机组成原理课程设计
if (numStr1.Length >= numStr2.Length) nM = 1;
if (numStr1.Length < numStr2.Length) nM = 2;
for (int i = 0; i < rltN; i++)
{
if (nM == 1 && i < numStr2.Length) state = and(numStr1[i], numStr2[i], c); if (nM == 2 && i < numStr1.Length) state = and(numStr1[i], numStr2[i], c); if (i == rltN - 1) state = and('0', '0', c);
else
{
if (nM == 1 && i >= numStr2.Length) state = and(numStr1[i], '0', c); if (nM == 2 && i >= numStr1.Length) state = and(numStr2[i], '0', c); }
switch(state)
{
case 0: result[i] = '0'; c = '0'; break;
case 1: result[i] = '1'; c = '0'; break;
case 2: result[i] = '0'; c = '1'; break;
case 3: result[i] = '1'; c = '1'; break;
default: break;
}
}
return new string(result);
}
public static string plusNum(string numStr1,string numStr2)
{
if (isInt_CodeNum(numStr1) && isInt_CodeNum(numStr2))
{
string result;
result = plus(reverse(numStr1), reverse(numStr2));
return reverse(result);
}
else
{
return "Invalid numbers!?";
}
}
public static string multiNum(string numStr1, string numStr2)
{
string result, num;
result = "0";
for (int i = 0; i < numStr2.Length; i++)
{
if (numStr2[numStr2.Length - 1 - i] == '1')
{
num = numStr1;
for (int j = 0; j < i; j++) num = num + "0";
10
计算机组成原理课程设计
result = plusNum(result, num);
}
else continue;
}
return result;
}
public static string eCNum(string numStr1, string numStr2) {
string result;
result = Int_BM_Sub(numStr1,numStr2);
return result;
}
public static string toFloatMNum(string numStr)
{
string result ;
result = numStr.Substring(3);
if (numStr[0] == '+') result = "+" + result;
else result = "-" + result;
return toBM(result);
}
#endregion
#region
public static string fromFM(string numStr)
{
if (isInt_CodeNum(numStr))
{
if (numStr[0] == '0')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '+';
return new string(result);
}
else
{
char[] result = new char[numStr.Length];
result = NOT(numStr).ToCharArray();
result[0] = '-';
return new string(result);
}
}
11
计算机组成原理课程设计
else
{
return "Invalid numbers!?";
}
}
public static string toFM(string numStr)
{
if (isInt_Num(numStr))
{
if (numStr[0] == '+')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '0';
return new string(result);
}
else
{
char[] result = new char[numStr.Length];
result = NOT(numStr).ToCharArray();
result[0] = '1';
return new string(result);
}
}
else
{
return "Invalid numbers!?";
}
}
public static string fromBM(string numStr)
{
if (isInt_CodeNum(numStr))
{
if (numStr[0] == '0')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '+';
return new string(result);
}
else
{
char[] result = new char[numStr.Length]; string rlt;
result = plusNum(NOT(numStr), "1").ToCharArray(); result [1]='-';
rlt = new string(result);
12
计算机组成原理课程设计
return rlt.Substring(1, rlt.Length - 1); }
}
else
{
return "Invalid numbers!?";
}
}
public static string toBM(string numStr)
{
if (isInt_Num(numStr))
{
if (numStr[0] == '+')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '0';
return new string(result);
}
else
{
char[] result = new char[numStr.Length]; string rlt;
result = plusNum(NOT(numStr), "1").ToCharArray(); result[1] = '1';
rlt = new string(result);
return rlt.Substring(1, rlt.Length - 1); }
}
else
{
return "Invalid numbers!?";
}
}
public static string fromYM(string numStr)
{
if (isInt_CodeNum(numStr))
{
if (numStr[0] == '0')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '+';
return new string(result);
}
else
{
13
计算机组成原理课程设计
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '-';
return new string(result);
}
}
else
{
return "Invalid numbers!?";
}
}
public static string toYM(string numStr)
{
if (isInt_Num(numStr))
{
if (numStr[0] == '+')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '0';
return new string(result);
}
else
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0]='1';
return new string(result);
}
}
else
{
return "Invalid numbers!?";
}
}
public static string fromMM(string numStr)
{
if (isInt_CodeNum(numStr))
{
if (numStr[0] == '1')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '+';
return new string(result);
}
14
计算机组成原理课程设计
else
{
char[] result = new char[numStr.Length];
string rlt;
result = plusNum(NOT(numStr),"1").ToCharArray(); result[1] = '-';
rlt = new string(result);
return rlt.Substring (1,rlt.Length-1);
}
}
else
{
return "Invalid numbers!?";
}
}
public static string toMM(string numStr)
{
if (isInt_Num(numStr))
{
if (numStr[0] == '+')
{
char[] result = new char[numStr.Length];
result = numStr.ToCharArray();
result[0] = '1';
return new string(result);
}
else
{
char[] result = new char[numStr.Length];
string rlt;
result = plusNum(NOT(numStr), "1").ToCharArray(); rlt = new string(result);
return rlt.Substring(1, rlt.Length - 1);
}
}
else
{
return "Invalid numbers!?";
}
}
#endregion
#region
public static string Int_BM_Add(string numStr1,string numStr2) {
string result;
15
计算机组成原理课程设计
result = plusNum(numStr1, numStr2);
return result.Substring(1);
}
public static string Int_BM_Sub(string numStr1, string numStr2)
{
string result;
result = plusNum(numStr1, toBM(toOpNum(fromBM(numStr2))));
return result.Substring(1);
}
public static string Int_YM_Multi(string numStr1, string numStr2)
{
if (isInt_Num(numStr1)&&isInt_Num(numStr2))
{
string result;
if (numStr1[0] == numStr2[0])
{
result = "+" + multiNum(numStr1.Substring(1), numStr2.Substring(1)); }
else result = "-" + multiNum(numStr1.Substring(1), numStr2.Substring(1));
return result;
}
else
{
return "Invalid numbers!?";
}
}
public static string Float_Add(string ec1, string numStr1, string ec2, string numStr2) {
string ec, rltEC, rltNum, result;
string num1, num2;
ec = eCNum(ec1, ec2);
if (ec[0] != ec[1])
{
if (ec[0] == '1')
{ rltEC = ec2; rltNum = numStr2; }
else { rltEC = ec1; rltNum = numStr1; }
}
else
{
num1 = toFloatMNum(numStr1);
num2 = toFloatMNum(numStr2);
if (ec[0] == '0')
{
for (int i = 0; i < toIntNum(ec.Substring(2)); i++)
{
num1 = num1 + "0";
16
计算机组成原理课程设计
}
rltEC = ec1;
rltNum = plusNum(num1, num2).Substring(1);
}//x>y
else
{
for (int i = 0; i < toIntNum(plusNum(NOT(ec),"1").Substring(2)); i++) {
num2 = num2 + "0";
}
rltEC = ec2;
rltNum = plusNum(num1, num2).Substring(1);
}//y>x
while(rltNum[1]==rltNum[0])
{
rltEC = Int_BM_Add(rltEC,"11111");
rltNum=rltNum.Substring(1);
}
rltNum = fromBM(rltNum).Insert(1,"0.")+"0000000";
rltNum = rltNum.Substring(0, numStr1.Length);
}
result = rltEC + rltNum;
return result;
}
public static string Float_Sub(string ec1, string numStr1, string ec2, string numStr2) {
string result;
result = Float_Add(ec1, numStr1,ec2,toOpNum(numStr2));
return result;
}
#endregion
}
}
17
西安科技大学课程设计报告课程名称计算机组成原理课题名称复杂模型计算机的设计专业计算机科学与技术班级计科1001班姓名##指导教师#…
长治学院课程设计报告课程名称计算机组成原理课程设计设计题目设计一台性能简单的计算机系别计算机系专业计科1101班组别第三组学生姓名…
课程设计题目教学院专业班级姓名指导教师硬件加减法器的设计计算机学院计算机科学与技术年月日1课程设计任务书20xx20xx学年第1学…
课程设计说明书题目设计指令系统院系计算机科学与工程学院专业班级计算机1003班学号学生姓名指导教师刘向举年1月10日20xx安徽理…
沈阳工程学院计算机组成原理课程设计设计题目基本模型机的设计与实现第六组系别班级学生姓名学号指导教师职称起止日期20xx年6月25日…
这次课程设计是在已学计算机组成原理基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识…
计算机组成原理课程设计个人总结经过将近一个月的的计算机组成原理课程设计,让我们体会到了苦尽甘来的滋味,这次课程设计使我对上学期蒋永…
学习计算机组成原理的心得体会学习了一个学期的《计算机组成原理》这门课程。在郄君老师给我们讲《计算机组成原理》这门课程的学期了,我们…
计算机组成原理课程设计心得计科1004计算机组成原理课程设计是在我们上完计算机组成原理课之后的硬件实践课程,是把组成原理课上的理论…
计算机组成原理心得体会计算机组成原理是计算机专业本科生必修的硬件课程中重要核心课程之一。基本要求是使我们掌握计算机常用的逻辑器件、…
合肥学院课程综述论文题目系部专业班级学生姓名计算机组成原理总结计算机科学与技术计算机网络工程11网络工程(2)IceBin20xx…