计算机组成实验课实验指导书.docx
- 文档编号:29367940
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:98
- 大小:766.14KB
计算机组成实验课实验指导书.docx
《计算机组成实验课实验指导书.docx》由会员分享,可在线阅读,更多相关《计算机组成实验课实验指导书.docx(98页珍藏版)》请在冰豆网上搜索。
计算机组成实验课实验指导书
V1.0
计算机组成与结构
实验指导书
(试用稿)
编写:
张锦
校核:
______
湖南大学软件学院
2006年9月
目录
一、实验教学目标1
二、实验教学主要内容1
三、实验要求1
四、评分细则2
五、课堂实验项目4
1.实验一汇编编译器的使用及程序调试(必做)4
2.实验二非压缩/压缩十进制码转换程序的设计与实现(必做)11
3.实验三顺序程序设计(选做)13
4.实验四分支程序设计(选做)16
5.实验五循环程序设计(选做)19
6.实验六字符输入/输出程序设计(选做)22
7.实验七字符串操作程序设计(选做)24
8.实验八栈操作程序设计(选做)26
9.实验九I/O程序设计(选做)28
10.实验十中断处理程序设计(选做)31
11.实验十一数值乘除运算程序设计(选做)34
12.实验十二过程调用程序设计(选做)36
13.实验十三WinDLX使用及WinDLX汇编语言(必做)41
14.实验十四程序相关性问题分析(选做)46
15.实验十五矩阵相乘程序及优化(选做)48
六、附录49
附录一:
8088/8086的体系结构49
附录二:
8088/8086的指令系统53
附录三:
DLX汇编指令64
一、实验教学目标
课程实验是整个课程教学的重要组成部分。
在课程讲授的过程中,课程实验起着加深对课程内容的理解,加速对知识由感性认识到理性认识过程的转化,在对知识的完整和深入地理解过程中起着不可替代的作用。
本实验教学大纲的目的是通过具有针对性的实验,使学生对计算机的组成结构、运行流程以及提高计算机性能的经典方法有比较清晰和深入的认识,并为后续课程的学习打下良好的基础。
二、实验教学主要内容
本课程实验结合软件工程专业的学习特点进行设计,先从较低级的汇编语言方面出发对计算机中底层指令的执行进行分析和理解,进而再利用WinDLX从较高层的观点对如何优化计算机性能进行分析。
本课程实验由相对独立,但又紧密结合的部分组成,构成较为完整的课程实验体系。
课程实验目前包括如下2个部分:
汇编语言实验部分和计算机性能优化模拟部分。
其中:
汇编语言试验部分设计了几组由易到难的几个实验,目的是使得学生对汇编语言的运行有一个比较清晰的认识,通过这组试验同学们可以对低级的计算机语言有一个比较直观的认识,通过这部分实验的训练,使得同学们基本达到软考中软件设计师级别中对汇编语言方面的要求;计算机系统的性能优化和提高一直是研究的热点,通过这组实验,要求同学们掌握WinDlx这个模拟软件,并能够结合课程内容对流水线这种优化策略有一个更为深刻的理解,激发同学对课程内容的学习兴趣,在此基础之上,同学们可以进一步掌握相关的模拟工具。
三、实验要求
●共开出2类15个实验项目(汇编类和体系结构类分别包括12个和3个项目),其中包括12个课内实验项目和3个为课外实验项目(课后选做);
●课内实验项目中,有4个为必做项目,共占24个学时,另还需在剩下的课内实验项目中选择几个进行实验(选择时请注意每个项目的先做实验项目要求),要求选做的实验项目学时之和不得低于8个学时,否则将按比例扣分;
●每人一组独立进行上机实验,实行开放式实验教学;
●每次实验前要进行预习。
●实验时自行进行程序的调试、编译和执行过程。
Ø每个实验项目文件放入一个文件夹中,文件夹命名规则统一为:
学号_实验编号(若一个项目中有多个文件,则依次命名为:
学号_实验编号_序号)。
Ø一旦发现抄袭行为,则该实验项目计0分。
●每个实验代码调试成功后,应及时让实验指导老师给予检查和登记。
●实验结束后按时提交实验卡、实验报告,以及源程序。
Ø提交源程序时应提交全部的实验文件,包括asm文件、obj文件和exe文件等,然后将项目文件夹中压缩打包后提交(压缩包的名称和项目文件夹名称相同)。
四、评分细则
实验总分值
100(所做实验项目分值的平均值)
课堂实验项目名称
分值
评分标准
备注
汇编编译器的使用及程序调试
100
掌握Masm、Link和Debug的使用;输入一个简单的程序,利用Masm和Link将其编译为可执行程序;使用Debug查看程序的机器代码;(80%)
实验报告编写认真详细,按时上交(20%)。
必做
非压缩/压缩十进制码转换程序的设计与实现
100
通过移位指令完成十进制数转换试验;理解汇编语言中最基本的顺序程序设计方法;进一步熟悉Debug调试程序的方法(80%);
实验报告编写认真详细,按时上交(20%)。
必做
顺序程序设计
100
利用汇编语言求解融合多种运算的复杂数学表达式的值;理解和掌握顺序程序设计方法(80%);
实验报告编写认真详细,按时上交(20%)。
必做
分支程序设计
100
设计并实现一个基于汇编语言分支程序;掌握利用相关的汇编指令设计不完全分支、完全分支和多分支的方法(80%);
实验报告编写认真详细,按时上交(20%)。
选做
循环程序设计
100
设计并实现一个基于汇编语言的循环程序;掌握利用相关的汇编指令设计WHILE型和DO-WHILE型循环设计的方法(80%);
实验报告编写认真详细,按时上交(20%)。
选做
字符输入/输出程序设计
100
设计并实现一个基于汇编语言的字符输入输出出程序;掌握汇编语言中进行数据传送的指令(80%);
实验报告编写认真详细,按时上交(20%)。
选做
字符输入/输出程序设计
100
设计并实现一个基于汇编语言的字符串操作程序;掌握利用相关的汇编指令设计字符串操作程序的基本方法(80%);
实验报告编写认真详细,按时上交(20%)。
选做
栈操作程序设计
100
设计并实现一个基于汇编语言的栈操作程序;掌握汇编语言中利用栈数据结构的实现(80%);
实验报告编写认真详细,按时上交(20%)。
选做
I/O程序设计
100
使用汇编语言编写一个简单的显示控制程序;掌握BIOS显示器中断调用(INT10H)的方法(80%);
实验报告编写认真详细,按时上交(20%)。
选做
中断处理程序设计
100
编写一个简单的处理键盘中断的程序;掌握汇编语言中处理中断的相关指令(80%);
实验报告编写认真详细,按时上交(20%)。
选做
数值乘除运算程序设计
100
实现十/二进制转化;实现格式化输出;实现二进制乘法的实现(80%);
实验报告编写认真详细,按时上交(20%)。
选做
过程调用程序设计
100
实现一个较为复杂的汇编语言程序;学习在汇编语言程序设计中的模块化的程序设计思想;学习在汇编原因中多个程序的链接方法(80%);
实验报告编写认真详细,按时上交(20%)。
选做
WinDLX使用及WinDLX汇编语言
100
熟悉WinDLX模拟器的基本用法和相关的图形窗口代表的含义;了解基本的WinDLX汇编语言的指令,并能读懂相关的简单程序;根据课题内容和模拟器的使用,进一步说明指令流水的概念(80%);
实验报告编写认真详细,按时上交(20%)。
必做
程序相关性问题分析
100
利用DLX汇编语言编制一个程序,要求程序能够造成指令相关;利用WinDLX分析所编写程序中出现的指令相关类型和解决方法;观察WinDLX统计子窗口的结果,分析相关所造成的影响(80%);
实验报告编写认真详细,按时上交(20%)。
选做
矩阵相乘程序及优化
100
编写一个实现矩阵乘的DLX汇编语言程序;将所编写的程序进行展开,优化程序结构,降低相关的程度;将上述两个程序在WinDLX模拟器中运行,比较运行结果(80%);
实验报告编写认真详细,按时上交(20%)。
选做
五、课堂实验项目
1.实验一汇编编译器的使用及程序调试(必做)
1.实验一:
汇编编译器的使用及程序调试。
2.实验目的:
掌握Masm的使用;掌握Link的使用;掌握Debug的使用;熟悉一种界面操作下的集成汇编语言编译器。
3.实验要求:
(1)根据实验目的,认真完成实验中给出的任务;
(2)根据实验过程和结果,完成实验报告并及时上交相关文档;
(3)在实验报告中应认真写出自己的实验心得和体会;
(4)鼓励同学进行交流,但是禁止抄袭!
(5)每人一组,独立完成。
4.实验原理及内容:
(1)实验内容:
本实验是汇编语言学习的第一个实验,要求利用汇编语言实现一个Dos界面下的最简单的“HelloWorld”程序,只要可以实现在屏幕上输出一行字符即可;
(2)实验原理:
Ø一般的汇编程序包括两个部分:
数据段和代码段(有的程序还会有堆栈段),每个部分都有比较固定的格式;
Ø汇编程序的输入和输出实现相对比较麻烦,需要调用Dos中断来实现,希望学习输入和输出中断是如何实现的;
Ø对于在字符界面下的汇编程序从asm源代码到生成可执行exe文件中间有多个步骤,需要用到masm、link,需要熟练掌握;
Ø汇编语言的调试相对也比较麻烦,需要用到Debug命令,希望掌握常用的Debug选项,能够看懂反汇编的结果。
5.实验软硬件环境:
奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。
6.实验步骤和方法:
本实验重点在于熟悉汇编语言编译器的使用及程序的调试,实验内容相对比较简单,但是中间需要大家熟练掌握其中涉及到的每一个步骤,为后续实验打下良好的基础。
下面是以MASM5.0,在winxp环境下,按照给定的任务为例进行的步骤说明(由于这是第一个汇编程序,我们提供一个最基本的源程序供大家参考;):
(1)将包括MASM、LINK以及DEBUG的文件架MASM拷贝到计算机C盘的根目录下;
(2)打开记事本,输入如下代码:
DATASSEGMENT;数据段
msgdb"HelloWorld!
",13,10,"$";此处输入数据段代码
DATASENDS
STACKSSEGMENT;堆栈段
;此处输入堆栈段代码
STACKSENDS
CODESSEGMENT;代码段
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
LEADX,msg;此处输入代码据段代码
movah,9
INT21h
MOVAH,4CH
INT21H
CODESENDS
ENDSTART
保存为firPro.asm,保存位置为“C:
\masm\”。
注意:
后缀名一定要为“.asm”,否则,可能出现错误!
使文件显示后缀名以便修改的方法如下图示:
a)打开资源管理器,选择文件夹选项,如图1-1所示;
b)将“隐藏已知文件类型的扩展名”选项前的
去掉,如图1-2所示;
c)将文件名“firPro.txt”重命名为“firPro.asm”即可。
图1-1打开文件夹选项
图1-2去掉文件扩展名
MicrosoftWindowsXP[版本5.1.2600]
(C)版权所有1985-2001MicrosoftCorp.
C:
\DocumentsandSettings\chenyucong>cdc:
\masm>dir
C:
\masm>dir
驱动器C中的卷没有标签。
卷的序列号是E428-938D
C:
\masm的目录
2009-01-2921:
12
2009-01-2921:
12
1996-05-1216:
2815,830CREF.EXE
1996-05-1216:
289,499ERROUT.EXE
1996-05-1216:
2812,149EXEMOD.EXE
1996-05-1216:
2814,803EXEPACK.EXE
2009-01-2921:
11388firPro.asm
1996-05-1216:
2832,150LIB.EXE
1996-05-1216:
2839,100LINK.EXE
1996-05-1216:
2824,199MAKE.EXE
1996-05-1216:
2865,557MASM.EXE
1996-05-1216:
289,216README.DOC
1996-05-1216:
2810,601SETENV.EXE
11个文件233,492字节
2个目录5,518,499,840可用字节
C:
\masm>
(3)在“运行”窗口键入“cmd”,回车,打开字符界面,进入masm文件夹下,如图1-3所示;
图1-3进入masm文件夹
(4)键入masmfirPro.asm,并回车,如图1-4所示。
其中:
Objectfilename是编译为目标文件的名称,直接回车,表示默认和源文件同名,只是后缀名不同,本试验中均为默认;编译之后文件夹中出现一个新文件:
firPro.obj,如图1-5所示:
图1-4masm后的结果
图1-5masm命令的执行
(5)键入linkfirPro.obj,回车,如图1-6所示:
其中:
RunFile是可执行的目标文件名,直接回车,表示默认和源文件同名,只是后缀名不同。
编译之后文件夹中出现一个新文件:
FIRPRO.exe,如图1-7所示:
(6)键入可执行文件名FIRPRO,回车,显示的运行结果如图1-8所示:
(7)利用Debug,进行反汇编,键入:
Debugfirpro.exe,回车,如下图1-9所示:
(8)在出现的光标后,键入U,出现反汇编后的结果,如图1-10所示:
(9)键入q,回车,推出反汇编程序,如图1-11所示:
至此,我们对MASM、LINK以及DEBUG的使用方法已经有了比较清楚的了解。
另外,我们还提供了另外一个集成的编译环境,“MasmforWindows集成实验环境”,大家可以仿照上述步骤,熟悉一下所提供的集成试验环境。
希望大家在熟悉了最基本的masm、link以及Debug的基础之上再去使用所提供的集成试验环境!
图1-6link命令的执行
图1-7编译之后出现的可执行文件
图1-8可执行文件的执行结果
图1-9反汇编之后的结果
图1-10反汇编命令U的结果
图1-11推出反汇编的命令
7.实验预习要求:
认真阅读实验指导书附录部分的内容,了解最基本的汇编语言的知识,包括8088/8086的体系结构和指令系统,在以后的实验中将会不断的用到相关的指令,在实验课中给出的课件中的相关内容也请大家仔细研读。
8.思考题:
(1)在图1-4中,masmfilename.asm后,如果不是连续回车,而是输入字符串结果会有什么不同;(就会生成不仅文件名不同,而且后缀名也不同的文件。
***.obj)
(2)在图1-11中,每行的类似于“0B4F:
xxxx”表示什么意思?
(内存地址)
(3)在图1-11中,为什么首行和源程序不同,而又有那些是相同的,可否给出一些原因?
注意:
思考题不做硬性要求。
9.评分标准:
(1)掌握Masm、Link和Debug的使用(30%);
(2)输入一个简单的程序,利用Masm和Link将其编译为可执行程序(30%);
(3)使用Debug查看程序的机器代码;(20%)
(4)实验报告编写认真详细,按时上交(20%)。
10.实验报告:
要求提交1份实验卡、1份实验报告、源程序代码(电子档)。
实验卡:
“组别”:
填写自己的学号;
“实验数据记录”:
填写自己程序的运行结果以及关键的中间结果。
实验报告:
“实验内容”:
填写程序实现部分代码;
“数据记录和计算”:
填写实验过程中的关键部分,尤其是中间关键步骤的实验结果等;
“结论”:
对汇编语言整个编译程序的理解;
“小结”:
填写自己的感想。
源代码:
Ø提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等;
Ø文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提交(包名中应含有学号)。
2.实验二非压缩/压缩十进制码转换程序的设计与实现(必做)
1.实验二:
非压缩/压缩十进制码转换程序的设计与实现。
2.实验目的:
通过上机编程,熟悉CPU内部的寄存器等部件,掌握基本的汇编语言程序结构,并掌握汇编语言中移位指令的使用。
3.实验要求:
(1)对于事先设定的一个简单的十进制数,如“0506h”,通过汇编语言将其表示变为压缩表示,如变为“56”;
(2)每人一组,独立完成;
(3)根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!
4.实验原理及内容:
本实验项目是实现用汇编语言进行非压缩/压缩十进制码转换程序。
在实验中,每位非压缩的十进制数占用一个字节,而每两位压缩十进制数占用一个字节,因此在完成非压缩的十进制数到压缩的十进制数的转换过程中利用移位指令将非压缩的十进制数中的“0”移出即可。
5.实验软硬件环境:
奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。
6.实验步骤和方法:
本实验重点在于对字符在机器中的表示方法的正确理解,并能够熟悉运用相关的汇编指令实现转换,并能对汇编程序的基本结构进一步熟悉。
下面是以Masm5.0为编译器,以文本编辑器为源代码编辑环境给出的实验步骤。
(1)启动windows界面下的文本编辑器;
(2)新建一个asm类型的文档,文档的名字应为“学号_2”,指定保存位置后单击“确定”按钮;
(3)根据给出的实验原理,设计出一种可能的汇编语言程序;
(4)利用masm编译为目标文件.obj,利用link联编为可执行文件.exe;
(5)利用Debug反汇编exe文件,如图2-1所示(源代码未给出,图中内容仅供参考);
图2-1Debug反汇编结果
(6)对反汇编之后的代码进行分析。
;
(7)根据实验过程和实验结果完成实验报告,并按时上交。
注意:
最初的实现不要求大家使用输入输出语句实现任意一个字符的转换,只需要事先设定一个字符实现转换即可。
7.实验预习要求:
认真预习实验指导书中附录部分的内容,熟悉相关的背景知识,并提前预习相关的汇编指令。
8.思考题:
(1)是否可以灵活应用多条不同的汇编指令实现同一个任务?
(2)反汇编的结果是否能够和源代码进行对应?
(3)可否通过输入和输出语句实现转换?
注意:
思考题不做硬性要求。
9.评分标准:
(1)设计并实现非压缩/压缩十进制码转换程序,能够链接编译成exe文件,运行结果正确(80%);
(2)实验报告编写认真详细,按时上交(20%)。
10.实验报告:
要求提交1份实验卡、1份实验报告、源程序代码(电子档)。
实验卡:
“组别”:
填写自己的学号;
“实验数据记录”:
填写自己程序的运行结果。
实验报告:
“实验内容”:
填写算法实现的那部分代码;
“数据记录和计算”:
填写实验前后的预计结果和实际结果;
“结论”:
对汇编语言中相关的指令功能进行描述;
“小结”:
填写在实验过程中的体会和自己的感想。
源代码:
Ø提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等;
Ø文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提交(包名中应含有学号)。
DATASEGMENT;数据段
NUMBERDW0506H
DATAENDS;
STACKSEGMENT;堆栈段
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,DATA
MOVDS,AX
MOVAX,NUMBER
MOVCL,4
SHLAH,CL
ROLAX,CL
ROLAL,CL
MOVBYTEPTRNUMBER,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.实验三顺序程序设计(必做)
1.实验三:
顺序程序设计。
2.实验目的:
通过上机编程,掌握使用汇编语言编写顺序程序设计的方法;掌握汇编语言中表达式求值的基本程序设计方法。
3.实验要求:
(1)根据一个给定的表达式设计实现用汇编语言实现求表达式的值,在实验过程中掌握最简单的顺序程序设计的方法;实验以求【w=(v-(x*y+z-460))/x】的值为例,其中x、y、z、v均为带符号数,结果放在变量w中;
(2)每人一组,独立完成;
(3)根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!
4.实验原理及内容:
本实验要求使用顺序程序设计实现复杂的表达式求值问题。
对于给定的表达式,程序的算法是比较清楚的,需要按照四则运算的优先级和括号的位置,逐个计算各项的值即可。
关键点分析:
由于x、y、z、v均为带符号字数据,因此在进行表达式求值计算时应注意字扩展指令cwd的使用。
首先需要将z扩展为双字,完成加法运算,其次要将v扩展为双字,完成减法运算。
5.实验软硬件环境:
奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。
6.实验步骤和方法:
本实验重点在于如何灵活应用相关的指令,并注意寄存器的使用。
(1)根据实验要求设计算法。
;
(2)根据上述分析,编制程序流程图如图3-1所示;
(3)根据流程图,编写汇编程序;
(4)对源程序进行汇编,得到目标文件;
(5)对目标文件进行链接,得到可执行文件;
(6)使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得到正确的结果。
(7)根据实验过程和实验结果完成实验报告,并按时上交。
注意:
Ø在编程时,寄存器的配合使用,扩展寄存器的存储范围;
Ø在编程时,注意特定的汇编指令所使用的寄存器是特定的,不可以随意调换;
Ø对于汇编语言而言,输出部分实际中是比较麻烦的,试着编写相关的输出部分代码。
图3-1程序流程图
7.实验预习要求:
认真学习相关的汇编指令的使用要去。
8.思考题:
(1)如何扩展寄存器的表示范围?
(2)对于不同的指令,所涉及到的寄存器是不同的,是否有些规律?
(3)试着对输出部分的代码进行编写。
注意:
思考题不做硬性要求。
9.评分标准:
(1)正确实现表达式的求值程序,要求要用到相关的加减乘除指令(80%);
(2)实验报告编写认真详细,并给出详细的注释,按时上交(20%)。
10.实验报告:
要求提交1份实验卡、1份实验报告、源程序代码(电子档)。
实验卡:
“组别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 实验 指导书