计算机组成原理课设(韩文敬海明码生成)
沈阳航空航天大学
课 程 设 计 报 告
课程
名称:计算机组成原理课程设计 课程设计
目:COP2000实现汉明码的生成
院(系):计算机学院
专 业:计算机科学与技术
班 级:94010102
学 号:2009040101045
姓 名:韩文敬
指导教师:杨华
完成日期:2012年1月13日
沈阳航空航天大学课程设计报告
目 录
第1章 总体设计
............................................................................................... 1 1.1 设计原理 ........................................................................................................ 1 1.2 设计思路 ........................................................................................................ 1 1.3 设计环境 ........................................................................................................ 2 第2章 详细设计方案 ............................................................................................... 4 2.1 算法与程序的设计与实现 ................................................................................ 4
2.1.1算法具体描述 ............................................................................................... 4 2.2
图的设计与实现 ....................................................................................... 4
2.2.1流程图具体分析 ........................................................................................... 4 第3章 程序调试与结果测试 ................................................................................... 8 3.1 程序调试 ........................................................................................................... 8 3.2 程序测试及结果分析 ....................................................................................... 8 参考文献 .................................................................................................................... 10 附 录(源代码) ................................................................................................... 11
-I-
沈阳航空航天大学课程设计报告 第1章 总体设计方案
第1章 总体设计方案 1.1 设计原理
根据海明码的实现原理,在数据中加入几个校验位,并把数据的每一个二进制位分配在几个奇偶校验组中,当某一位出错后,就会引起有关的几个校验组的值发生变化。不但可以发现出错,还能指出错误的地方,并能通过电路完成自动纠正。
r设校验位的个数为r,则它能表示2个信息,用其中的一位信息指出“没有
r错误”,其余的2-1指出错误发生的位置。
r错误也可能发生在校验;位,因此只有2-1-r个信息能用于纠正被传送的数据的位数k,必须满足:
r2?k+1+r
对8位数据位,查表可知需要4位校验位。如表1所示:
表1
海明码 H01 H02 H03 H04 H05 H06 H07 H08 H09 H10 H11 H12
数据排列 C1 C2 D8 C3 D7 D6 D5 C4 D4 D3 D2 D1
其校验位等于所监测数据位的异或,即:
C1=D?D?D?D ?D;87542
C2=D?D?D?D ?D;86532
C3=D?D?D?D;7651
C4=D?D?D?D; 4321
1.2 设计思路
程序的第一步应是准备工作,通过算法的分析易知,准备数据有循环控制次数,由数据位为8bit二进制数,则可设循环次数为8,标志位,控制不同子程序
-1-
沈阳航空航天大学课程设计报告 第1章 总体设计方案 实现,第一个校验位可直接生成,不需要标志位,且结果运算需置一位,则需设置4个,可在内存中存储,当子程序开始执行时,首先需将标志位更改,表示此过程已经执行。数据输入,在COP2000软件中,为了直观简便观看调试程序,可用立即数送入,如:MOV A,32H;而在硬件测试中,应采用中断方式输入,其优点是可连续生成不同数据的海明码,灵活,用户输入数据,如:
LOOP1:
JMP LOOP1
ORG 0AH
IN
两种方式产生结果相同。
生成海明码关键是校验位,由设计原理可知,校验位的值为数据中各个被监测数据位的异或值,它的简便等价求法是将各相关数据位进行加法运算,当结果为奇数时,检验位为1,当结果为偶数时,检验位为0,即结果的第一位为1,检验位为1,反之,为0;又四个校验位的求法过程相同,则可以将相同部分划定为一个循环,并采用标志位控制校验位相应算出,每算出一个校验位,将值送入内存单元中。
已知各个校验位,通过移位将这些值放在对应位上,通过OUT实现海明码输出。
1.3 设计环境
利用伟福COP2000型计算机组成原理实验仪软件和计算机,在COP2000试验仪软件上编程实现海明码的生成。伟福COP2000试验仪软件的指令集分为如下大类:算术运算指令、逻辑运算指令、移位指令、数据传输指令、跳转指令、中断返回指令、输入输出指令。
伟福COP2000计算机组成原理实验仪软件截图如1.3所示:
本程序所用到的相应的指令集
(1) 算术逻辑运算指令
SUB A,#II-----------从累加器中减去立即数后加入累加器A中
AND A, #II -----------累加器A“与”立即数II
(2) 数据传送指令
-2-
沈阳航空航天大学课程设计报告 第1章 总体设计方案 MOV R?,#II----------将立即数II送到寄存器R?中
MOV MM, A -----------将累加器A中的值送到存储器MM地址中 MOV A,#II------------将立即数II送到累加器A中 MOV R?,A------------将累加器A中的值送到寄存器A中 MOV A,R?------------将寄存器R?的值送到累加器A中 MOV A, MM -----------将存储器MM地址中的值送到累加器A中 MOV @R?,A-------------将累计器A的值送到间址存储器中 RR A-----------------累加器右移指令
RL A-----------------累加器左移指令
(3)跳转指令
JZ MM---------------若零标志位置1,跳转到MM地址 JMP MM---------------跳转到MM
如下为COP2000计算机组成原理实验软件截图:
图 1.3 伟福COP2000计算机组成原理试验仪软件截图
-3-
沈阳航空航天大学课程设计报告 第2章 详细设计方案
第2章 详细设计方案
2.1 算法与程序的设计与实现
本课设采用伟福COP2000实验仪软件和计算机实现海明码生成的功能,利用伟福COP2000的指令集编程实现。
2.1.1算法具体描述
(1)存数。整个算法所需的准备工作,其中包括:8bit二进制数据,标志位,循环次数,与校验位对应相关数据位。具体存入数据及功能如下:
将8bit二进制数据存到存储器07H单元;标志位设置在存储器00H,01H,02H单元,预先存入01数据,实现对不同子程序的选择;循环次数设置8次,控制与校验位相关数据位的加和次数;与校验位对应相关数据位初始化为0。
(2)求校验位。这是整个程序的核心,首先计算C1,将数据取出与DA进行与运算,便可以得到对应本校验位监测的所有数据位,其它数据位为0,然后通过多次移位算出这些数据的加和,其结果的个位便是所求校验位。C2,C3,C4算法相同,其对应与运算的立即数位B6、71、0F。
由在各个校验位的算法大体相同,可将这些相同的部分采用循环这个单独模块实现,并依C1、C2、C3、C4顺序计算,为避免重复执行某一校验位,在执行每个校验位子程序开头更改标志位,使得出校验位后可调到下一个校验位。
(3)结果运算。各个校验位分别存在03、04、05、06内存单元。将C1左移,将C2加到C1中,再移位,将C3加到C1中,再移位,将C4加到C1中,然后输出,中断返回,进行下个数据海明码的生成。
2.2 流程图的设计与实现
2.2.1流程图具体分析
1.存数操作:如图2.2.1所示:
-4-
沈阳航空航天大学课程设计报告 第2章 详细设计方案
开 始
将循环次数(8)、线性码分别送R2,R0寄存器,将4个标志位分别送入00H,01H,02H,08H单元
结 束
图2.2.1 存数流程图
2(求校验位:如图2.2.2所示:
开始
输入数据,求出C1的线性码位,设置C1校验位存储地址 将移位后的线性码加上原线性码位,并将循环数减一。
R2 =0 ?
N Y 取加和个位数并记入03单元 输入数据,求出C2的线性码位,设置C2校验位存储地址,将循环次数从新设为8,更改标志位。
1
-5-
沈阳航空航天大学课程设计报告 第2章 详细设计方案
1
将移位后的线性码加上原线性码位,并将循环数减一。
R2 =0 ?
N
Y 取加和个位数并记入04单元 输入数据,求出C3的线性码位,设置C3校验位存储地址,将循环次数从新设为8,更改标志位。
将移位后的线性码加上原线性码位,并将循环数减一。
R2 =0 ?
N Y 取加和个位数并记入05单元 输入数据,求出C4的线性码位,设置C4校验位存储地址,将循环次数从新设为8,更改标志位。
将移位后的线性码加上原线
性码位,并将循环数减一。
R2 =0 ?
N
取加和个位数并记入06单元
结束
图2.2.2 求校验位流程图
-6-
沈阳航空航天大学课程设计报告 第2章 详细设计方案
3.结果运算:如图2.2.3
开始
C1左移三次,每次左
移后,将C2、C3、C4
分别加到C1中。
输出结果,中断返回
结束
图2.2.3 结果运算流程图
-7-
沈阳航空航天大学课程设计报告 附录
第3章 程序调试与结果测试 3.1 程序调试
(1)语法错误
(1)指令混淆,立即数和存储单元的地址只差一个“#”。编程开始阶段,不熟悉指令集,执行把立即数放入累加器的操作,误将MOV A, 01H用作MOV A, #01H。
(2)指令集不支持将某一存储单元内的数据直接写入寄存器内,必须通过累加器A进行中转。因此使用MOV R0, 00H出现错误。正确的应为MOV A,00H;MOV R0, A。
(2)逻辑错误
(1)循环位没重新赋值,每执行生成一个校验位后,循环位均为零,所以应在C2,C3,C4中首先重新赋值8到R2中。
(2)标志位设定方式不当,导致程序无法按正常顺序执行,正确做法将标志位设为1,每当求某一校验位都在其程序前更改标志位,表示校验位已求。
(3)地址超出范围,采用中断方式执行主程序时,设程序首指令地址为E0H,导致最后的指令超出了地址范围。
3.2 程序测试及结果分析
软件测试用源程序,COP2000软件,其输入采用立即数
;
测试数据X1=32,X2=9E,X3=DA,运行程序后,可分别输出Y1=05,Y2=03,Y3=0C;
当X1=32时,可知数据位排列,见表2。
表 2
D8 D7 D6 D5 D4 D3 D2 D1
0 0 1 1 0 0 1 0
-8-
沈阳航空航天大学课程设计报告 附录
C1=D?D?D?D ?D=087542
?D?D?D ?D=1C2=D86532
C3=D?D?D?D=07651
?D?D?D=1 C4=D4321
则程序运行结果正确;其它几组数据同理,测试结果与算得结果相同,不存在误差。
-9-
沈阳航空航天大学课程设计报告 附录
参考文献
[1] 白中英.计算机组成原理(第4版)[M].北京:科学出版社.2008 [2] 王爱英.计算机组成与结构(第4版)[M].北京:清华大学科学出版社.2006 [3] 唐硕飞.计算机组成原理(第2版).[M].北京:高等教育出版社.2008
-10-
沈阳航空航天大学课程设计报告 附录
附 录(源代码)
MOV R0,#00H ;存储不同校验位的对应的数据位状态
MOV R2,#08H ;移位控制的循环次数 LOOP1:
JMP LOOP1
ORG 0AH
IN ;数据输入
MOV 07H,A
MOV A,#01H
MOV 00H,A ;标志位C2
MOV 01H,A ;标志位C3
MOV 02H,A ;标志位C4
MOV 08H,A ;标志位(结果)
MOV A,07H ;取数据
AND A,#0DAH ;取第1个校验码的线性码位
MOV R0,A
MOV R3,#03H ;校验位C1地址设定
;判断各位中1的个数,为奇数则设置冗余位 ; LOOP: RR A
MOV R1,A
ADD A,R0
MOV R0,A
MOV A,R2
SUB A,#01H
MOV R2,A
MOV A,R1
JZ L1
JMP LOOP
L1: MOV A,R0
AND A,#01H ;取个位作为校验位值
MOV @R3,A ;记入结果
MOV A,00H ;判断标志位,校验位求取入口
SUB A,#01H
JZ C2
MOV A,01H
SUB A,#01H
JZ C3
MOV A,02H
SUB A,#01H
-11-
沈阳航空航天大学课程设计报告 附录
JZ C4
JMP RESULT
C2: MOV A,#03H ;C2校验位运算
MOV 00H,A
MOV R2,#08H
MOV A,07H
AND A,#0B6H ;取第2个校验码的线性码位
MOV R0,A
MOV R3,#04H ;校验位C2地址设定
JMP LOOP
C3: MOV A,#03H ;C3校验位运算
MOV 01H,A
MOV R2,#08H
MOV A,07H
AND A,#71H ;取第3个校验码的线性码位
MOV R0,A
MOV R3,#05H ;校验位C3地址设定
JMP LOOP
C4: MOV A,#03H ;C4校验位运算
MOV 02H,A
MOV R2,#08H
MOV A,07H
AND A,#0FH ;取第4个校验码的线性码位
MOV R0,A
MOV R3,#06H ;校验位C4地址设定
JMP LOOP
RESULT: ;校验位合并及结果输出
MOV A,03H
RL A
ADD A,04H
RL A
ADD A,05H
RL A
ADD A,06H
OUT
RETI ;中断返回 END
-12-
沈阳航空航天大学课程设计报告
课程设计总结:
1( 首先,通过本次课程设计,让我对计算机的组成原理有了更深层次
的理解,特别是对数据在内存单元以及寄存器中的存储原理和操作
数走向问题。
2( 其次,对海明码有了认识和了解,同时掌握了伟福COP2000试验仪
和COP2000软件的使用,同时学会了实际汇编和程序的执行过程。 3( 再次,明白到各个学科紧密相关,组成原理与微机原理知识的相互
应用,硬件与编程之间密切联系,程序最终依靠硬件实现,并依靠
硬件编程,硬件为其提供一个平台,二者缺一不可,通过这样的学
习加深理解,提供综合能力。
4( 最后,特别感谢老师的悉心教导,不仅丰富我学科上的的知识,更
提高了我的学习能力,对我产生很大的帮助,在以后的学习生活中
还要严格要求自己,充实自己,争取更多的进步。 指导教师评语:
指导教师(签字): 年 月 日
课程设计成绩
-13-