计算机组成原理实验
- 格式:docx
- 大小:155.86 KB
- 文档页数:19
课程设计说明书 计算机组成原理算法实现(五)
1 课程设计目的
本课程设计是在学完本课程教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的计算机组成原理课程基本知识,进一步领会计算机组成原理的一些算法,并进行具体实现,提高分析问题、解决问题的综合应用能力。
2课程设计内容与要求
1、题目: 计算机组成原理算法实现(五) 2、功能: 够实现机器数的真值还原(定点整数)、定点整数的单符号位补码加减运算、定点整数的原码一位乘法运算和浮点数的加减运算。
3 功能模块详细设计 3.1 主窗体设计
图3-1主界面图 系统进入(主)窗体的设计:菜单需要在输入口令正确后方可激活使用。口令输入错误时要给出重新输入口令的提示,三次口令输入错误应该禁止使用。由于本次课程设计所用的语言是Java,在对应主窗口的主类中设计主窗口的样式,及个对应按钮的功能,根据指导书的内容布局各个Button,本次设计主窗口共有六个按钮,其中Button1对应确认,其余的分别对五个功能按钮。除此之外,各按钮标签都已在指导书中给出,留出白色的输入口令的窗口。 运行程序的主界面如图3-3:
图3-3口令界面图
3.2 主体功能 NewClass.java 该java文件为整个程序的主类。 Form2.java 实现机器数的真值还原(定点整数) Form3.java 实现定点整数的单符号位补码加减运算、定点整数的 Form4.java 实现定点整数的原码乘法运算。 Form5.java 实现浮点数的加减运算。
3.2.1定点整数真值还原 点击主界面中的机器数真值还原按钮出现如图3-4界面
图3-4定点整数还原 在上面的窗体中按“输入”按扭时,将输入焦点设置为最上面的一个文本框上。输入一个机器数(如10010)后,按“原->真值”、“反->真值”、“补->真值”或“移->真值”按扭中的任一个后,将在第二文本框中显示对应操作的结果。选择“返回”按扭时将关闭此窗体。 定点表示:约定机器中所有数据的小数点位置是固定的。由于约定在固定的位置,所以小数点就不再使用记号“.”来表示。 一般书写所表示的数据称为真值,在计算机中为了表示符号位,通常把符号位和数字位一起编码来表示相应的数,形成了各种数据的存储和表示方法,这些编码称为机器码。常用的机器码有原码、反码、补码和移码。 a)原码:原码的数值部分是该数的绝对值,最高位表示符号位,最高位为0是正数,最高位为1是负数。 b )反码:正数的反码等于原码,负数的反码等于除符号位外其余二进制数码0变成1,1变成0。 正数: [x]反 = [x]原 = x ;负数: 符号位不变,其余变反 c)补码:正数的补码等于原码,负数的补码等于反码加1。 正数: [x]补= [x]原 ;负数: [x]补= [x]反 +1 d)移码:是符号位取反的补码,一般用做浮点数的阶码,引入的目的是为了保证浮点数的机器码为全0。
3.2.3定点整数的单符号位补码加减运算 进行定点整数单符号位补码加减法的实现时都是在主窗体选择对应的菜单项后进入对应窗体再进行具体操作。操作时首先选择“输入”按扭输入参与运算的数据,然后再选操作按扭。如图3-6
图3-6定点整数补码加减 定点整数单符号位补码加减法的实现,输入按钮,删除所有数据并将光标移到第一个输入窗口里面,开始输入,注意是补码输入,实现定点整数加减法时,定义了一个carry[]数组记录每位的进位,carry[]最后一位初值为‘0’,carry[]长度比输入大1位,用多重选择语句嵌套使用,罗列两数第i位及上位进位的状况,输出结果记录在out[i]中,第i位进位记录在carry[i]中,当最高数值位进位与符号位进位不同时表溢出。值得一提的是,加一个负数和减一正数时,都转化为加一个数的补码,由之前的算法保证,进行运算,其他保持不变。注意的是,输入第二个数时,要注意字符串长度与第一个字符串长度保持一致,否则将产生中断提醒请输入数值位长度相等的数字:接下来的返回键与之前界面功能相同,回到主界面。 算法的原理: (1)参加运算操作的数都用补码表示。 (2)数据的符号与数据一样参加运算。 (3)求差时将负减数求补,用求和代替求差, 将减法运算转化为补码的加法运算。 (4)运算结果为补码。如果符号位为 0 ,表明运算结果为正;如果符号位为 1 ,则表明结果为负。5 )符号位的进位为模值,应该去掉。 补码减法 运算公式为: [X]补–[Y]补=[X–Y]补 (3.2) 通过 [Y]补 求得 [–Y]补 可以将减法运算转化为补码的加法运算。 已知 [Y]补求 [–Y]补 的法则是:对 [Y]补各位(包括符号位)取反,末位加1 ,就可以得到[–Y]补 例 [Y]补 =1.1011 则 [–Y]补 =0.0101 [Y]补 = 0.1011 则 [–Y]补 =1.0101 例 4 X=0.1100 Y=0.0110 求 [X]补–[Y]补 = ? 解: [X]补 =0·1100 [Y]补 =0·0110 [–Y]补 =1·1010 溢出:在定点数机器中,数的大小超出了定点数能表示的范围,叫溢出。 a)在定点小数机中数的表示范围是-1或者小于-1的情况。 b)在定点整数机(8位)中数的表示范围是-128出现了大于127或者小于-128的情况。双符号位法:将符号位扩展为2位,具体说就是对于正数两个符号位是“00”,对于负数两个符号位是“11”。两个符号位都看作数码一样参加运算。两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。 ①符号位“01”,上溢出 ②符号位“10”,下溢出 ③符号位“00”或者“11”,未溢出从[y]补求[-y]补的法则是:对[y]补“包括符号位求反且最末位加1”,即可得到[-y]补。
3.2.4定点整数的一位原码乘法运算 进行定点整数原码乘法的实现时都是在主窗体选择对应的菜单项后进入对应窗体再进行具体操作。操作时首先选择“输入”按扭输入参与运算的数据,然后再选操作按扭。如图3-7 图3-7定点整数原码乘法 设置输出数组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 = "-";返回按钮。 算法的原理:在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用) 被乘数 [x]原=xf .xn-1…x1x0 乘数 [y]原=yf .yn-1…y1y0 则乘积 [z]原=(xf⊕yf)+(0.xn-1…x1x0)(0.yn-1…y1y0) 式中,xf为被乘数符号,yf为乘数符号。 机器算法: 机器中一种方法是多次采用”加法-移位“的方法来完成,称为串行乘法器,它的硬件结构简单,但是速度慢,目前广泛使用的是流水式阵列乘法器,称为并行乘法器。无符号数m乘以n会产生m*n个位积,出现m+n个列和,并行乘法器的关键是快速产生m*n个位积,对位积进行相加运算产生m+n个列和。 第一步:位积的产生观察乘法运算0*0=0,0*1=0,1*0=0,1*1=1 相当于:a∩b 。所以m*n个位积可以由m*n个与门并行产生。第二步:列和的产生:利用全加器 3.2.5浮点数的加减运算 进行定点整数单符号位补码加减法、定点整数原码乘法、浮点加减法的实现时都是在主窗体选择对应的菜单项后进入对应窗体再进行具体操作。操作时首先选择“输入”按扭输入参与运算的数据,然后再选操作按扭。如图3-8
图3-8浮点加减法运算 数据输入分为阶码和尾数,将两个数的阶码和尾数对应的变形补码表示出来,比较价码大小并完成对阶即小阶向大阶看齐,若对阶时发生溢出则发出提醒,统一阶码后,采用规格化进行尾数求和,对尾数进行舍入处理,判断尾数最末尾情况,用Replace语句实现粗略舍入处理。最后进行变形补码还原。 算法的原理:浮点数的加减法运算分为六个步骤: a)0操作数检查 浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。0操作数检查步骤则用来完成这一功能。参加加法运算的数据都是非零,进入下一步。 b)比较价码大小并完成对阶 为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位。 两浮点数进行加减,首先要看两数的阶码是否相同,若二数阶码不同,表示小数点位置没有对齐,此时必须使二数阶码相同,这个过程叫作对阶。对阶操作规定使尾数右移,尾数右移后阶码作相应增加,因此对阶时,总是