计算机组成原理课程设计

组成原理课程设计报告

计算机组成原理算法实现(五)

专业 计算机科学与技术

花小鹏

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

相关推荐