计算机组成原理实验.docx

上传人:b****6 文档编号:7739532 上传时间:2023-01-26 格式:DOCX 页数:45 大小:186.98KB
下载 相关 举报
计算机组成原理实验.docx_第1页
第1页 / 共45页
计算机组成原理实验.docx_第2页
第2页 / 共45页
计算机组成原理实验.docx_第3页
第3页 / 共45页
计算机组成原理实验.docx_第4页
第4页 / 共45页
计算机组成原理实验.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

计算机组成原理实验.docx

《计算机组成原理实验.docx》由会员分享,可在线阅读,更多相关《计算机组成原理实验.docx(45页珍藏版)》请在冰豆网上搜索。

计算机组成原理实验.docx

计算机组成原理实验

 

计算机组成原理课程设计说明书

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

一、课程设计目的

本课程设计是在学完本课程教学大纲规定的全部内部,完成所有的实践环节的基础上,旨在深化学生实习的计算机组成原理的一些算法,并支行具体实现,提高分析问题,解决问题的综合应用能力。

二、课程设计内容与要求

2.1课程设计的内容

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

2.2课程设计的要求

能够实现机器数的真值还原(定点整数)、定点整数的单符号位补码加减运算、定点整数的原码乘法运算和浮点数的加减运算。

三、功能模块详细设计

3.1系统目标

本程序含有以下几个功能模块,分别能够实现如设计内容所设计的功能。

3.2主体功能:

Form2.java实现机器数的真值还原(定点整数)。

Form3.java实现整数单符号位补码加减运算。

Form4.java实现定点整数的原码乘法。

Form5.java实现浮点数的加减运算。

Newclass.java该java文件为整个程序的主类。

1:

操作要求:

系统进入:

主窗体的设计,菜单需要在输入口令正确后方可激活使用。

口令输入错误时要给出重新输入口令的提示,错误过多,单击确实后程序自动关闭,如图4、4.1所示:

图4

系统进入(主)窗体的设计:

菜单需要在输入口令正确后方可激活使用。

口令输入错误时要给出重新输入口令的提示,三次口令输入错误应该禁止使用。

由于本次课程设计所用的语言是Java,在对应主窗口的主类中设计主窗口的样式,及个对应按钮的功能,根据指导书的内容布局各个Button,本次设计主窗口共有六个按钮,其中Button1对应确认,其余的分别对五个功能按钮。

除此之外,各按钮标签都已在指导书中给出,留出白色的输入口令的窗口。

其中的登录口令设为本人学号,使用一个简单的判断语句实现,输入正确则登录,反正嵌套一个循环,三次输入错误就直接退出程序。

当登陆成功后,使用多重选择语句分别对m1,m2,m3,m4,m5该有的功能进行选择。

建立需要的标签、文本框、按钮并对其进行监听、声明(包括名称、位置等属性),如果鼠标触发的事件是按钮1即确认按钮,当次数小于3并且得到的文本与字符串s(学号)相同时,输出"口令正确,请选择菜单栏的操作",否则"您输入的口令不正确","警告",当次数大于3时,"您三次口令错误,确定后退出!

","警告",登陆成功后,即可按照自己想要的事件进行按钮触发事件操作,激活菜单栏,并且把图形界面设置为可见setVisible()以便下面功能的使用,然后隐藏登陆界面,退出。

图4.1输入口令错误

2:

输入正确的口令后,程序显示登陆成功,选择主窗体中“机器数的真值还原”时进入下图所示的窗体。

在上面的窗体中按“输入”按扭时~将输入焦点设置为最上面的一个文本框上。

输入一个数的机器数:

如:

1101011;后按“原—〉真值”、“反—〉真值”、“补—〉真值”或“移—〉真值”按钮中的任一个后将在第二个文本框中显示对应的真值。

选择“返回”按钮时回到主窗体。

如图5、5.1所示:

图5

图5.1点击按钮完成定点整数的真值还原

选择主窗体中“机器数的真值还原(定点整数)”时进入上图所示的窗体。

开始时,与主窗口设计一样按照指导书给出的模板,用Button定义按钮,用Label定义标签,以下设计雷同处不再赘述。

首先button1对应输入,每当按到此按钮式,跳到输入窗口,并清空其中内容:

elseif(e.getSource()==button1)

text1.setText("");其后,button2原码到真值转换较易,定义输入机器数首位布尔量booleanboo=s.startsWith("0",0);为0加个“+”后面不变,为1就添个“-”同样不变;button3前面同上判断符号位,后面的定义为一维数组,通过循环选择嵌套,按位取反,最后两者合并显示出来;button4在反码的基础上,只要将其值末位加1即可:

j=s1.lastIndexOf("1")+1;button5移码在机器数首位字符的布尔判断下1时,加个“+”后面不变text2.setText("+"+s1);直接输出,为0时较为复杂,其中较为关键的语句:

s1=s.substring(1,j);

通过截取传送达到移码还原的目的;最后的button6直接返回主类。

在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。

输入一个机器数(如10001000)后,按“原->真值”、“反->真值”、“补->真值”或“移->真值”按扭中的任一个后,将在第二文本框中显示对应操作的结果。

选择“返回”按扭时将关闭此窗体。

3:

选择主窗体中的“定点整数单符号位补码加减运算”时进入如下图所示的窗体,操作时首先选择“输入”按钮输入参与运算的数据,然后再选操作按钮。

当单击“加法”、“减法”第三、四个文本框显示对应的结果。

选择“返回”按钮时回到主窗体。

定点整数的单符号位补码加减运算如图6、6.1、6.2所示:

 

图6

图6-1输入数据

 

图6-2点击按钮完成定点整数的单符号位补码加减运算

接下来是定点整数单符号位补码加减法的实现,输入按钮,删除所有数据并将光标移到第一个输入窗口里面,开始输入,注意是补码输入,实现定点整数加减法时,定义了一个carry[]数组记录每位的进位,carry[]最后一位初值为‘0’,carry[]长度比输入大1位,用多重选择语句嵌套使用,罗列两数第i位及上位进位的状况,输出结果记录在out[i]中,第i位进位记录在carry[i]中,当最高数值位进位与符号位进位不同时表溢出。

值得一提的是,加一个负数和减一正数时,都转化为加一个数的补码,由之前的算法保证,进行运算,其他保持不变。

值得注意的是,输入第二个数时,要注意字符串长度与第一个字符串长度保持一致,否则将产生中断提醒请输入数值位长度相等的数字:

if(i1.length!

=i2.length)data1.setText("请输入数值位长度相等的数字!

");接下来的返回键与之前界面功能相同,回到主界面。

输入按钮,删除所有数据并将光标移到第一个输入窗口里面,开始输入,在补码输入,实现定点整数加减法时,定义carry[]数组记录每位的进位,carry[]最后一位初值为‘0’,carry[]长度比输入大1位,用多重选择语句嵌套使用,罗列两数第i位及上位进位的状况,输出结果记录在out[i]中,第i位进位记录在carry[i]中,当最高数值位进位与符号位进位不同时表溢出。

若是加一个负数和减一正数时,都将负数化成一个正数的补码进行运算,其他不变。

值得注意的是,输入第二个数时,要注意字符串长度与第一个字符串长度保持一致,否则将产生中断提醒请输入数值位长度相等的数字:

if(i1.length!

=i2.length)data1.setText("请输入数值位长度相等的数字!

");接下来的返回键与之前界面功能相同,回到主界面。

4:

选择主窗体中的“定点整数原码乘法”时进入如下图所示的窗体,操作时首先选择“输入”按钮输入参与运算的数据,然后再选操作按钮。

当单击“乘法”时第三个文本框显示对应的结果。

选择“返回”按钮时回到主窗体。

定点整数的原码乘法运算如图7、7.1、7.2所示:

 

图7

图7-1输入数据

图7-2定点整数的原码乘法运算

设置输出数组out[]与进位标志数组carry[],carry[]最后一位初值为‘0’,carry[]长度比输入大1位。

对输入的两个字符串仿照并行乘法器的工作原理,将乘法转化为加法。

使用循环语句,按位相乘,再做原码加法。

由于是带一位符号位的原码乘法,要得到运算结果的符号位,就要对in1[0]和in2[0]进行判断:

if((in1[0]=='0'&&in2[0]=='0')||(in1[0]=='1'&&in2[0]=='1'))signal="+";if((in1[0]=='0'&&in2[0]=='1')||(in1[0]=='1'&&in2[0]=='0'))signal="-";返回按钮。

5:

择主窗体中的“浮点数的加减运算”时进入下图所示的窗体:

先选择“输入”按钮输入参与运算的数据,再选操作按钮。

当单击“加法”和“减法”时下列文本框显示对应的结果:

加法的阶码和尾数、减法的阶码和尾数。

选择“返回”按钮时回到主窗体。

浮点数的加减运算如图8、8.1、8.2所示:

图8

 

图8-1输入数据

图8-2浮点数的加减运算

数据输入分为阶码和尾数,将两个数的阶码和尾数对应的变形补码表示出来,比较价码大小并完成对阶即小阶向大阶看齐,若对阶时发生溢出则发出提醒:

JOptionPane.showMessageDialog(this,"对阶时溢出!

","错误",JOptionPane.ERROR_MESSAGE);然后求阶差,n=toSubstract(sj1,sj2);如果n<0,则第一个数尾数右移,反之第二个数尾数右移:

for(inti=n;i<0;i++){st1=st1.substring(0,1)+st1.substring(0,st1.length()-1);},统一阶码后,采用规格化进行尾数求和,对尾数进行舍入处理,判断尾数最末尾

情况,用Replace语句实现粗略舍入处理。

最后进行变形补码还原。

4小结

通过这次的计算机组成原理的课程设计,使我对计算机的认识有了更进一步的加深和认知。

在接触计算机组成原理的同时,我更加体会到计算科学与技术是一门多有意思的学科,在本学期学习计算机组成原理之后,又开了课程设计,使我又重新温习了这学期学的知识,真正做到了温故,在课程设计的时候,在实验室进行网上信息的查阅和参考,对相似的例子比较和借鉴,是我又学习到新的知识,两者结合起来,真正做到了“温故知新”。

当然,在这个过程中,也有许多问题与困难出现。

有的经过自己的思考或与他人合作能得以解决,有的也的确费了一些周折。

但无论如何,这次对于课题的能够实现机器数的真值还原(定点整数)、定点整数的单符号位补码加减运算、定点整数乘法运算和浮点数的加减运算的设计总体来说还是比较满意的。

不仅用到了课堂上所学到的知识,还加入了自己的一些想法与观点,而且在对编程这一方面也有了很多新的感悟与提高。

不得不说是获益良多。

过了这经次的课程设计,我想,对于我日后的计算机的相关的学习肯定会有诸多助益与影响,为将来的学习生活打下了坚实的基础。

希望以后有更多的机会参加这样的活动。

 

参考文献

[1]白中英.计算机组成原理(第五版)[M].北京:

科学出版社,2015.

[2]陈磊、陈国君、李梅生、邹林达.java程序设计基础(第四版)[M].北京:

清华大学出版社,2015.

 

附录1源程序清单附录

口令程序:

importjava.awt.*;

importjava.awt.event.*;

importjavax.swing.JOptionPane;

publicclassNewclassextendsFrameimplementsActionListener{

staticinti=0;

staticintm=1;

Labela1,a2,a22;//输入语句

TextFieldtext1;//文本框

Buttonbutton1,m1,m2,m3,m4,m5;//按钮

Fontf;

Newclass(Strings){

super(s);

setLayout(null);//默认布局样式

f=newFont("楷体",Font.BOLD,20);//字体

m1=newButton("机器数的真值还原(定点整数)");

m2=newButton("定点整数单符号位补码加减运算");

m3=newButton("定点整数的原码乘法");

m4=newButton("浮点的加减运算");

m1.addActionListener(this);//监测控件是否正常

m2.addActionListener(this);

m3.addActionListener(this);

m4.addActionListener(this);

m1.setBounds(10,30,160,25);//在坐标系重的位置和按钮的宽度高度

m2.setBounds(175,30,190,25);

m3.setBounds(370,30,120,25);

m4.setBounds(495,30,95,25);

add(m1);

add(m2);

add(m3);

add(m4);

a1=newLabel("计算机组成原理算法实现(五)",Label.CENTER);

a2=newLabel("输入口令:

");

a22=newLabel("登陆成功",Label.CENTER);

a1.setBounds(150,100,300,40);

a1.setBackground(Color.WHITE);

a1.setFont(f);

a2.setBounds(150,200,90,25);

a2.setBackground(Color.white);

a22.setBounds(200,200,200,25);

a22.setForeground(Color.gray);

a22.setBackground(Color.pink);

a22.setVisible(false);

text1=newTextField(18);

text1.setEchoChar('*');

text1.setBounds(240,200,200,25);

button1=newButton("确认");

button1.setBounds(270,250,70,30);

button1.addActionListener(this);

add(a1);

add(a2);

add(a22);

add(text1);

add(button1);

setBackground(Color.white);

setBounds(100,100,640,400);

setVisible(true);

validate();

addWindowListener(newWindowAdapter(){

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

});

}

publicstaticvoidmain(Stringargs[]){

newNewclass("计算机组成原理");

}

publicvoidactionPerformed(ActionEvente){

Strings=newString("000");

if(e.getSource()==button1){

while(i==0&&m<=3&&(!

(text1.getText().equals("")))){

if(text1.getText().equals(s)){

i=1;

JOptionPane.showMessageDialog(this,"口令正确,请选择菜单栏的操作",

"正确",JOptionPane.INFORMATION_MESSAGE);

text1.setEnabled(false);

text1.setVisible(false);

a22.setVisible(true);

a2.setVisible(false);

}else{

m++;

JOptionPane.showMessageDialog(this,"您输入的口令不正确","警告",

JOptionPane.WARNING_MESSAGE);

text1.setText(null);

}

}

if(m>3){

JOptionPane.showMessageDialog(this,"您三次口令错误,确定后退出!

","警告",

JOptionPane.ERROR_MESSAGE);

System.exit(0);

}

}

if(i==1){

if(e.getSource()==m1){

Form2s1=newForm2();

s1.setVisible(true);

}elseif(e.getSource()==m2){

Form3f1=newForm3();

f1.setTitle("定点整数单符号位补码加减");

f1.setVisible(true);

}elseif(e.getSource()==m3){

Form4f2=newForm4();

f2.setTitle("定点整数补乘法");

f2.setVisible(true);

}elseif(e.getSource()==m4){

Form5f5=newForm5();

f5.setVisible(true);

}

}

}

}

机器数的真值还原(整数):

importjavax.swing.*;

importjava.awt.*;//引用非本包的类

importjava.awt.event.*;

importjavax.swing.SwingUtilities;

importjava.awt.TextField;

classForm2extendsFrameimplementsMouseListener{//定义按钮及页面布局

Buttonbutton1;

Buttonbutton2;

Buttonbutton3;

Buttonbutton4;

Buttonbutton5;

Buttonbutton6;

Labellabel1;

Labellabel2;

Labellabel3;

//Labellabel4;

//Labellabel5;

//Labellabel6;

//Labellabel7;

TextFieldtext1;

TextFieldtext2;

//TextFieldtext3;

Strings,s1,temp;

intn1,i,j;

chara[];

publicForm2(){

setTitle("form2");

button1=newButton("输入");

button2=newButton("原-->真值");

button3=newButton("反-->真值");

button4=newButton("补-->真值");

button5=newButton("移-->真值");

button6=newButton("返回");

label1=newLabel("机器数的真值还原(定点整数)");

Fontf1=newFont("",Font.TRUETYPE_FONT,25);

label1.setFont(f1);

label2=newLabel("请输入机器数:

");

label3=newLabel("真值还原结果为:

");

text1=newTextField(8);

text2=newTextField(10);

text2.setEditable(false);

BoxbaseBox,box1,box2,box3,box4,box5;

box1=Box.createHorizontalBox();//创建一个从左到右显示其组建的BOX

box1.add(label1);

box2=Box.createHorizontalBox();

box2.add(label2);

box2.add(Box.createHorizontalStrut(10));//添加长度为10的支架

box2.add(text1);

box2.add(Box.createHorizontalStrut(10));

box3=Box.createHorizontalBox();

box3.add(label3);

box3.add(Box.createHorizontalStrut(10));

box3.add(text2);

box3.add(Box.createHorizontalStrut(10));

box4=Box.createHorizontalBox();

box5=Box.createHorizontalBox();

box5.add(button1);

box5.add(Box.createHorizontalStrut(20));

box5.add(button2);

box5.add(Box.createHorizontalStrut(10));

box5.add(button3);

box5.add(Box.createHorizontalStrut(10));

box5.add(button4);

box5.add(Box.createHorizontalStrut(10));

box5.add(button5);

box5.add(Box.createHorizontalStrut(10));

box5.add(button6);

box5.add(Box.createHorizontalStrut(10));

baseBox=Box.createVerticalBox();

baseBox.add(box1);

baseBox.add(Box.createVerticalStrut(10));

baseBox.add(box2);

baseBox.ad

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1