计算机组成实验课实验指导书

更新时间:2024-04-18 02:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

V 1.0

计算机组成与结构

实验指导书

(试用稿)

编写: 张锦

校核:______

湖南大学软件学院 2006年9月

计算机组成与结构实验指导书

目 录

一、 实验教学目标 ................................................................................................................. 1 二、 实验教学主要内容 ......................................................................................................... 1 三、 实验要求 ......................................................................................................................... 1 四、 评分细则 ......................................................................................................................... 2 五、 课堂实验项目 ................................................................................................................. 4

1. 实验一 汇编编译器的使用及程序调试(必做) ............................................... 4 2. 实验二 非压缩/压缩十进制码转换程序的设计与实现(必做) ...................... 12 3. 实验三 顺序程序设计(选做) ......................................................................... 15 4. 实验四 分支程序设计(选做) ......................................................................... 18 5. 实验五 循环程序设计(选做) ......................................................................... 21 6. 实验六 字符输入/输出程序设计(选做) ........................................................ 24 7. 实验七 字符串操作程序设计(选做) ............................................................. 26 8. 实验八 栈操作程序设计(选做) ..................................................................... 28 9. 实验九 I/O程序设计(选做)........................................................................... 30 10. 实验十 中断处理程序设计(选做) ................................................................. 33 11. 实验十一 数值乘除运算程序设计(选做) ..................................................... 36 12. 实验十二 过程调用程序设计(选做) ............................................................. 38 13. 实验十三 WinDLX使用及WinDLX汇编语言(必做) ................................ 43 14. 实验十四 程序相关性问题分析(选做) ......................................................... 48 15. 实验十五 矩阵相乘程序及优化(选做) ......................................................... 50 六、 附录 ............................................................................................................................... 51

附录一:8088/8086的体系结构 ........................................................................................... 51 附录二:8088/8086的指令系统 ........................................................................................... 55 附录三:DLX汇编指令 ....................................................................................................... 66

I

计算机组成与结构实验指导书

一、 实验教学目标

课程实验是整个课程教学的重要组成部分。在课程讲授的过程中,课程实验起着加深对课程内容的理解,加速对知识由感性认识到理性认识过程的转化,在对知识的完整和深入地理解过程中起着不可替代的作用。本实验教学大纲的目的是通过具有针对性的实验,使学生对计算机的组成结构、运行流程以及提高计算机性能的经典方法有比较清晰和深入的认识,并为后续课程的学习打下良好的基础。

二、 实验教学主要内容

本课程实验结合软件工程专业的学习特点进行设计,先从较低级的汇编语言方面出发对计算机中底层指令的执行进行分析和理解,进而再利用WinDLX从较高层的观点对如何优化计算机性能进行分析。本课程实验由相对独立,但又紧密结合的部分组成,构成较为完整的课程实验体系。课程实验目前包括如下2个部分:汇编语言实验部分和计算机性能优化模拟部分。其中:汇编语言试验部分设计了几组由易到难的几个实验,目的是使得学生对汇编语言的运行有一个比较清晰的认识,通过这组试验同学们可以对低级的计算机语言有一个比较直观的认识,通过这部分实验的训练,使得同学们基本达到软考中软件设计师级别中对汇编语言方面的要求;计算机系统的性能优化和提高一直是研究的热点,通过这组实验,要求同学们掌握WinDlx这个模拟软件,并能够结合课程内容对流水线这种优化策略有一个更为深刻的理解,激发同学对课程内容的学习兴趣,在此基础之上,同学们可以进一步掌握相关的模拟工具。

三、 实验要求

? 共开出2类15个实验项目(汇编类和体系结构类分别包括12个和3个项目),

其中包括12个课内实验项目和3个为课外实验项目(课后选做); ? 课内实验项目中,有4个为必做项目,共占24个学时,另还需在剩下的课内实验项目中选择几个进行实验(选择时请注意每个项目的先做实验项目要求),要求选做的实验项目学时之和不得低于8个学时,否则将按比例扣分; ? 每人一组独立进行上机实验,实行开放式实验教学; ? 每次实验前要进行预习。

? 实验时自行进行程序的调试、编译和执行过程。

? 每个实验项目文件放入一个文件夹中,文件夹命名规则统一为:学号_实

验编号(若一个项目中有多个文件,则依次命名为:学号_实验编号_序号)。 ? 一旦发现抄袭行为,则该实验项目计0分。

? 每个实验代码调试成功后,应及时让实验指导老师给予检查和登记。

湖南大学软件学院 1

计算机组成与结构实验指导书

? 实验结束后按时提交实验卡、实验报告,以及源程序。

? 提交源程序时应提交全部的实验文件,包括asm文件、obj文件和exe文

件等,然后将项目文件夹中压缩打包后提交(压缩包的名称和项目文件夹名称相同)。

四、 评分细则

实验总分值 课堂实验项目名称 分值 100(所做实验项目分值的平均值) 评分标准 备注 汇编编译器的使用及程序调试 100 掌握Masm、Link和Debug的使用;输入一个简单的程序,利用Masm和Link将其编译为可执行程序;使用Debug查看程序的机必做 器代码;(80%) 实验报告编写认真详细,按时上交(20%)。 通过移位指令完成十进制数转换试验;理解汇编语言中最基本的顺序程序设计方法;进必做 一步熟悉Debug调试程序的方法(80%); 实验报告编写认真详细,按时上交(20%)。 利用汇编语言求解融合多种运算的复杂数学表达式的值;理解和掌握顺序程序设计方必做 法(80%); 实验报告编写认真详细,按时上交(20%)。 设计并实现一个基于汇编语言分支程序;掌握利用相关的汇编指令设计不完全分支、完选做 全分支和多分支的方法(80%); 实验报告编写认真详细,按时上交(20%)。 设计并实现一个基于汇编语言的循环程序;掌握利用相关的汇编指令设计WHILE型和选做 DO-WHILE型循环设计的方法(80%); 实验报告编写认真详细,按时上交(20%)。 设计并实现一个基于汇编语言的字符输入输出出程序;掌握汇编语言中进行数据传送选做 的指令(80%); 实验报告编写认真详细,按时上交(20%)。 设计并实现一个基于汇编语言的字符串操作程序;掌握利用相关的汇编指令设计字符选做 串操作程序的基本方法(80%); 实验报告编写认真详细,按时上交(20%)。 设计并实现一个基于汇编语言的栈操作程序;掌握汇编语言中利用栈数据结构的实现湖南大学软件学院

非压缩/压缩十进制码转换程序的设计与实现 100 顺序程序设计 100 分支程序设计 100 循环程序设计 100 字符输入/输出程序设计 100 字符输入/输出程序设计 100 栈操作程序设计 100 选做 2

计算机组成与结构实验指导书

(80%); 实验报告编写认真详细,按时上交(20%)。 使用汇编语言编写一个简单的显示控制程序;掌握BIOS显示器中断调用(INT 10H)选做 的方法(80%); 实验报告编写认真详细,按时上交(20%)。 编写一个简单的处理键盘中断的程序;掌握汇编语言中处理中断的相关指令(80%); 选做 实验报告编写认真详细,按时上交(20%)。 实现十/二进制转化;实现格式化输出;实现二进制乘法的实现(80%); 选做 实验报告编写认真详细,按时上交(20%)。 实现一个较为复杂的汇编语言程序;学习在汇编语言程序设计中的模块化的程序设计思想;学习在汇编原因中多个程序的链接方选做 法(80%); 实验报告编写认真详细,按时上交(20%)。 熟悉WinDLX模拟器的基本用法和相关的图形窗口代表的含义;了解基本的WinDLX汇编语言的指令,并能读懂相关的简单程必做 序;根据课题内容和模拟器的使用,进一步说明指令流水的概念(80%); 实验报告编写认真详细,按时上交(20%)。 利用DLX汇编语言编制一个程序,要求程序能够造成指令相关;利用WinDLX分析所编写程序中出现的指令相关类型和解决选做 方法;观察WinDLX统计子窗口的结果,分析相关所造成的影响(80%); 实验报告编写认真详细,按时上交(20%)。 编写一个实现矩阵乘的DLX汇编语言程序;将所编写的程序进行展开,优化程序结构,降低相关的程度;将上述两个程序在选做 WinDLX模拟器中运行,比较运行结果(80%); 实验报告编写认真详细,按时上交(20%)。 I/O程序设计 100 中断处理程序设计 100 数值乘除运算程序设计 100 过程调用程序设计 100 WinDLX使用及WinDLX汇编语言 100 程序相关性问题分析 100 矩阵相乘程序及优化 100 湖南大学软件学院 3

计算机组成与结构实验指导书

五、 课堂实验项目

1. 实验一

汇编编译器的使用及程序调试(必做)

1. 实验一:汇编编译器的使用及程序调试。

2. 实验目的:掌握Masm的使用;掌握Link的使用;掌握Debug的使用;熟悉一种

界面操作下的集成汇编语言编译器。 3. 实验要求:

(1) 根据实验目的,认真完成实验中给出的任务;

(2) 根据实验过程和结果,完成实验报告并及时上交相关文档; (3) 在实验报告中应认真写出自己的实验心得和体会; (4) 鼓励同学进行交流,但是禁止抄袭! (5) 每人一组,独立完成。 4. 实验原理及内容:

(1) 实验内容:本实验是汇编语言学习的第一个实验,要求利用汇编语言实现一

个Dos界面下的最简单的“Hello World”程序,只要可以实现在屏幕上输出一行字符即可; (2) 实验原理:

? 一般的汇编程序包括两个部分:数据段和代码段(有的程序还会有

堆栈段),每个部分都有比较固定的格式; ? 汇编程序的输入和输出实现相对比较麻烦,需要调用Dos中断来实

现,希望学习输入和输出中断是如何实现的;

? 对于在字符界面下的汇编程序从asm源代码到生成可执行exe文件

中间有多个步骤,需要用到masm、link,需要熟练掌握;

? 汇编语言的调试相对也比较麻烦,需要用到Debug命令,希望掌握

常用的Debug选项,能够看懂反汇编的结果。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点在于熟悉汇编语言编译器的使用及程序的调试,实验内容相对比较简单,但是中间需要大家熟练掌握其中涉及到的每一个步骤,为后续实验打下良好的基础。

下面是以MASM 5.0,在winxp环境下,按照给定的任务为例进行的步骤说明( 由于这是第一个汇编程序,我们提供一个最基本的源程序供大家参考;):

(1) 将包括MASM、LINK以及DEBUG的文件架MASM拷贝到计算机C盘的

根目录下;

(2) 打开记事本,输入如下代码:

DATAS SEGMENT ;数据段

msg db \此处输入数据段代码 DATAS ENDS

STACKS SEGMENT ;堆栈段

湖南大学软件学院

4

计算机组成与结构实验指导书

;此处输入堆栈段代码 STACKS ENDS

CODES SEGMENT ;代码段

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX

LEA DX,msg ;此处输入代码据段代码 mov ah,9 INT 21h

MOV AH,4CH INT 21H CODES ENDS END START

保存为firPro.asm,保存位置为“C:\\masm\\”。

注意:后缀名一定要为“.asm”,否则,可能出现错误!使文件显示后缀名以便修改的方法如下图示:

a) 打开资源管理器,选择文件夹选项,如图1-1所示;

b) 将“隐藏已知文件类型的扩展名”选项前的去掉,如图1-2所

示;

c) 将文件名“firPro.txt”重命名为“firPro.asm”即可。

图1-1 打开文件夹选项

湖南大学软件学院 5

计算机组成与结构实验指导书

图1-2 去掉文件扩展名

Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp.

C:\\Documents and Settings\\chenyucong>cd c:\\masm>dir

C:\\masm>dir

驱动器 C 中的卷没有标签。 卷的序列号是 E428-938D

C:\\masm 的目录

2009-01-29 21:12

. 2009-01-29 21:12 ..

1996-05-12 16:28 15,830 CREF.EXE 1996-05-12 16:28 9,499 ERROUT.EXE 1996-05-12 16:28 12,149 EXEMOD.EXE 1996-05-12 16:28 14,803 EXEPACK.EXE 2009-01-29 21:11 388 firPro.asm 1996-05-12 16:28 32,150 LIB.EXE 1996-05-12 16:28 39,100 LINK.EXE 1996-05-12 16:28 24,199 MAKE.EXE 1996-05-12 16:28 65,557 MASM.EXE 1996-05-12 16:28 9,216 README.DOC

湖南大学软件学院

6

计算机组成与结构实验指导书

1996-05-12 16:28 10,601 SETENV.EXE 11 个文件 233,492 字节 2 个目录 5,518,499,840 可用字节

C:\\masm>

(3) 在“运行”窗口键入“cmd”,回车,打开字符界面,进入masm文件夹下,如

图1-3所示;

图1-3 进入masm文件夹

(4) 键入masm firPro.asm,并回车,如图1-4所示。

其中:Object filename是编译为目标文件的名称,直接回车,表示默认和源文件同名,只是后缀名不同,本试验中均为默认;编译之后文件夹中出现一个新文件:firPro.obj,如图1-5所示:

图1-4 masm后的结果

湖南大学软件学院 7

计算机组成与结构实验指导书

图1-5 masm命令的执行

(5) 键入link firPro.obj,回车,如图1-6所示:

其中:Run File是可执行的目标文件名,直接回车,表示默认和源文件同名,只是后缀名不同。编译之后文件夹中出现一个新文件:FIRPRO.exe,如图1-7所示: (6) 键入可执行文件名FIRPRO ,回车,显示的运行结果如图1-8所示:

(7) 利用Debug,进行反汇编,键入:Debug firpro.exe,回车,如下图1-9所示: (8) 在出现的光标后,键入U,出现反汇编后的结果,如图1-10所示: (9) 键入q,回车,推出反汇编程序,如图1-11所示:

至此,我们对MASM、LINK以及DEBUG的使用方法已经有了比较清楚的了解。 另外,我们还提供了另外一个集成的编译环境,“Masm for Windows集成实验环境”,大家可以仿照上述步骤,熟悉一下所提供的集成试验环境。

希望大家在熟悉了最基本的masm、link以及Debug的基础之上再去使用所提供的集成试验环境!

图1-6 link命令的执行

湖南大学软件学院 8

计算机组成与结构实验指导书

图1-7 编译之后出现的可执行文件

图1-8 可执行文件的执行结果

图1-9 反汇编之后的结果

湖南大学软件学院 9

计算机组成与结构实验指导书

图1-10 反汇编命令U的结果

图1-11 推出反汇编的命令

7. 实验预习要求:认真阅读实验指导书附录部分的内容,了解最基本的汇编语言的知

识,包括8088/8086的体系结构和指令系统,在以后的实验中将会不断的用到相关的指令,在实验课中给出的课件中的相关内容也请大家仔细研读。 8. 思考题:

(1) 在图1-4中,masm filename.asm后,如果不是连续回车,而是输入字符串

结果会有什么不同;(就会生成不仅文件名不同,而且后缀名也不同的文件。***.obj)

(2) 在图1-11中,每行的类似于“0B4F:xxxx”表示什么意思?(内存地址)

(3) 在图1-11中,为什么首行和源程序不同,而又有那些是相同的,可否给出

一些原因?

注意:思考题不做硬性要求。 9. 评分标准:

(1) 掌握Masm、Link和Debug的使用(30%);

(2) 输入一个简单的程序,利用Masm和Link将其编译为可执行程序(30%); (3) 使用Debug查看程序的机器代码;(20%)

湖南大学软件学院

10

计算机组成与结构实验指导书

(4) 实验报告编写认真详细,按时上交(20%)。

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写自己程序的运行结果以及关键的中间结果。 实验报告:

“实验内容”:填写程序实现部分代码;

“数据记录和计算”:填写实验过程中的关键部分,尤其是中间关键步骤的实验

结果等;

“结论”:对汇编语言整个编译程序的理解; “小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 11

计算机组成与结构实验指导书

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-1 Debug反汇编结果 湖南大学软件学院

12

计算机组成与结构实验指导书

7. 8.

9.

10.

(6) 对反汇编之后的代码进行分析。;

(7) 根据实验过程和实验结果完成实验报告,并按时上交。 注意:最初的实现不要求大家使用输入输出语句实现任意一个字符的转换,只需要事先设定一个字符实现转换即可。

实验预习要求:认真预习实验指导书中附录部分的内容,熟悉相关的背景知识,并提前预习相关的汇编指令。 思考题:

(1) 是否可以灵活应用多条不同的汇编指令实现同一个任务? (2) 反汇编的结果是否能够和源代码进行对应? (3) 可否通过输入和输出语句实现转换? 注意:思考题不做硬性要求。 评分标准:

(1) 设计并实现非压缩/压缩十进制码转换程序,能够链接编译成exe文件,运

行结果正确(80%);

(2) 实验报告编写认真详细,按时上交(20%)。

实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。 实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写自己程序的运行结果。 实验报告:

“实验内容”:填写算法实现的那部分代码;

“数据记录和计算”:填写实验前后的预计结果和实际结果; “结论”:对汇编语言中相关的指令功能进行描述; “小结”:填写在实验过程中的体会和自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

DATA SEGMENT ;数据段 NUMBER DW 0506H DATA ENDS;

STACK SEGMENT;堆栈段

STACK ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK START:

MOV AX,DATA MOV DS,AX

MOV AX,NUMBER

湖南大学软件学院

13

MOV CL,4 SHL AH,CL ROL AX,CL ROL AL,CL

MOV BYTE PTR NUMBER,AL MOV AH,4CH INT 21H CODE ENDS

END START

湖南大学软件学院计算机组成与结构实验指导书

14

计算机组成与结构实验指导书

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) 根据实验过程和实验结果完成实验报告,并按时上交。 注意:

? 在编程时,寄存器的配合使用,扩展寄存器的存储范围; ? 在编程时,注意特定的汇编指令所使用的寄存器是特定的,不可以随意调

换;

? 对于汇编语言而言,输出部分实际中是比较麻烦的,试着编写相关的输出

部分代码。

湖南大学软件学院 15

计算机组成与结构实验指导书

图3-1 程序流程图

7. 实验预习要求:认真学习相关的汇编指令的使用要去。 8. 思考题:

(1) 如何扩展寄存器的表示范围?

(2) 对于不同的指令,所涉及到的寄存器是不同的,是否有些规律? (3) 试着对输出部分的代码进行编写。 注意:思考题不做硬性要求。 9. 评分标准:

(1) 正确实现表达式的求值程序,要求要用到相关的加减乘除指令(80%); (2) 实验报告编写认真详细,并给出详细的注释,按时上交(20%)。 10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序的运行结果。 实验报告:

“实验内容”:填写算法实现代码并给出程序流程图; “数据记录和计算”:填写实验结果;

“结论”:对所使用的汇编指令给出一个比较详细的归纳总结,并给出相关指令

的使用特点;

“小结”:填写自己的感想。 源代码:

湖南大学软件学院

16

计算机组成与结构实验指导书

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

DATAS SEGMENT

X DW 00ABH Y DW -5 Z DW 200 V DW 100 W DW ? DATAS ENDS

STACKS SEGMENT STACK DB 200 DUP(?) STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS MOV DS,AX MOV AX,X

IMUL Y;(X)*(Y)→DX:AX MOV CX,AX MOV BX,DX MOV AX,Z

CWD;(Z)符号扩展

ADD CX,AX;低位相加→IBM-PC(61页)

ADC BX,DX;高位相加(BX:CX)+(DX:AX)→(BX:CX) SUB CX,460

SBB BX,0;(BX:CX)-460→(BX:CX) MOV AX,V

CWD;(V)符号扩展 SUB AX,CX

SBB DX,BX;(DX:AX)-(BX:CX)→(DX:AX) IDIV X

MOV W,AX MOV W+2,DX MOV AH,4CH INT 21H CODES ENDS END START

湖南大学软件学院 17

计算机组成与结构实验指导书

4. 实验四 分支程序设计(选做)

1. 实验四:分支程序设计。

2. 实验目的:通过上机编程,熟悉利用汇编语言设计不同种类分支程序的方法,掌握

汇编语言中实现分支程序的相关汇编指令。 3. 实验要求:

(1) 设计并实现一个求解一组无符号字节序列中的最大值和最小值的汇编程序; (2) 每人一组,独立完成;

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

在实际问题中,需要对不同情况做不同的处理,这就需要使用到分支结构。汇编语言中的分支程序是利用条件转移指令或者跳转表,使程序在执行到某条指令后,根据运行结果是否满足一定条件来改变程序执行的顺序,然后执行不同的条件下对应的指令。如果进行的是逻辑分支,可以用每次分两支的方法来达到程序多分支的目的。一般而言,分支程序的结构通常有三种形式:不完全分支、完全分支和多分支,如图所示:

在本实验中,我们以求解一组无符号字节序列中的最大值和最小值的问题进行讲解分支程序的设计和实现。最终结果是序列中的最大数和最小数,我们可以将寄存器BX

湖南大学软件学院

18

计算机组成与结构实验指导书

的高位和低位分别用于存放最大数和最小数,然后,将序列中的两个数存入其中,再将序列中的其他数分别与BH和BL中的数进行比较,如果大于BH或者小于BL,则将寄存器中的数用当前取出的数进行替换,完全比较之后,BH和BL中数即为整个序列中的最大数和最小数。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点算法的理解以及相关指令的灵活应用。 (1) 分析问题,设计算法。;

(2) 根据上述算法,编制程序流程图,如图4-1所示;

图4-1 程序流程图

(3) 根据流程图,编写实现代码; (4) 程序汇编为目标文件.obj。

(5) 目标文件.obj链接为可执行文件.exe。;

(6) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果。

(7) 根据实验过程和实验结果完成实验报告,并按时上交。

注意:在程序设计中,注意相关的寄存器的用途,如CX的作用,SI的作用,以及汇编语言中,一个寄存器的高低位可以分开使用的特点。

湖南大学软件学院

19

计算机组成与结构实验指导书

7. 实验预习要求:预习相关的汇编语言指令,着重是理解相关寄存器的特定用途,如:

SI、CX等,以及寄存器的高低位可以分开使用的特点。 8. 思考题:

(1) 总结汇编语言中的寄存器分为那几类,每类各有什么特点? (2) 总结汇编语言中如何利用相关指令实现分支程序设计?

9. 评分标准:

(1) 正确的设计和实现从一组数中挑选出最大值和最小值,能够正确的使用相关

的寄存器(SI和CX),实验结果正确(80%); (2) 实验报告编写认真详细,按时上交(20%)。

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写自己程序的运行结果。 实验报告:

“实验内容”:填写实验项目的代码以及程序流程图;

“数据记录和计算”和“结论”:实验结果和实验过程中的关键变量的值变化情

况;

“小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 20

计算机组成与结构实验指导书

5. 实验五 循环程序设计(选做)

1. 实验五:循环程序设计。

2. 实验目的: 通过上机的编程,掌握汇编语言中实现循环的常用指令组合;掌握汇

编语言中不同种类循环程序设计的基本方法。 3. 实验要求:

(1) 本实验项目要求利用汇编语言实现对一组数的“冒泡法”排序。 (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

循环结构是一种常见的程序结构,在汇编语言程序设计中也经常用到,是一种基本的程序设计结构。循环结构一般是根据某个条件为真或者假来判断是否需要继续执行循环体。循环结果一般包括如下3个部分:

循环初始部分:一般是为循环作准备的部分,如:设置循环计数器等;

循环体部分:是需要被重复执行的部分,包括循环工作部分和修改部分,其中修改部分一般是和循环条件相关的,规律性地修改循环条件;

循环控制部分:主要是判断循环条件是否成立,决定是否需要继续进行循环等。 本实验要去实现“冒泡法”排序,在实验过程中,要利用汇编语言实现一个多重循环的程序。对这个问题,可以分析如下:假设在以BUF为首地址的存储区中存放有N个符号数。“冒泡法”排序的基本思路是:从第一个数开始依次对相邻2个数进行比较,如果前面的数比后面的数大,则交换位置(即大数沉入下面),否则,不就交换二者位置。这样,第一次排序后,最大的数已经放到了最后一个位置,第二次排序后,次大的数已经放在了倒数第二的位置上,继续下去,直到最后,经过N-1次排序后,所有的N个数将按照由小到大的顺序排列。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点在于对“冒泡法”这种典型的排序算法的理解,在此基础之上,熟悉汇编语言中循环程序中所涉及到的相关指令。

(1) 分析问题,设计算法;

(2) 根据上述算法,编制程序流程图,如图5-1所示; (3) 根据流程图,编写实现代码; (4) 程序汇编为目标文件.obj;

(5) 目标文件.obj链接为可执行文件.exe;

(6) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(7) 根据实验过程和实验结果完成实验报告,并按时上交。 注意:

? 在汇编语言中,数组名所代表的含义; ? 在汇编语言中,标号的使用;

? 在汇编语言中,不同跳转指令的含义;

湖南大学软件学院 21

计算机组成与结构实验指导书

图5-1 程序流程图

7. 实验预习要求:提前预习汇编语言中的相关跳转指令,以及在数据结构中“冒泡法”

排序的基本原理。 8. 思考题:

(1) 程序中为了实现“冒泡法”需要设定几个变量;

(2) JGE/JNE等这些跳转指令有那些细微的不同,可否归纳一下如何记忆

这些不同点;

9. 评分标准:

(1) 能正确设计和实现用汇编语言编写的“冒泡法”程序,运行结果正确(50%); (2) 能够设计合理正确的输入/输出模块(30%); (3) 实验报告编写认真详细,按时上交(20%)。

湖南大学软件学院

22

计算机组成与结构实验指导书

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序运行结果。 实验报告:

“实验内容”:项目实现代码以及程序流程图;

“数据记录和计算”:输出结果和关键变量的变化情况;

“结论”:给出在汇编语言中如何用相关指令实现循环程序的一些经验; “小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 23

计算机组成与结构实验指导书

6. 实验六 字符输入/输出程序设计(选做)

2. 实验六:字符输入/输出程序设计。

3. 实验目的:通过上机编程,熟悉汇编语言中对字符进行输入和输出的基本方法;掌

握汇编语言中数据传送指令的灵活使用。 4. 实验要求:

(1) 本实验要求从键盘上键入10个字符,然后以与键入字符先后相反的顺序将

字符显示出来;

(2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

5. 实验原理及内容:

汇编语言作为一种低级语言,在很多情况下需要直接与硬件进行交互,这在利用汇编语言实现字符的输入和输出时表现的特别明显,有一些程序,输入和输出部分的代码占到了整个程序中的大部分,通过本实验项目希望大家能够对利用汇编语言实现字符的输入和输出有所提高。

本实验要求从键盘上键入10个字符,然后以与键入字符先后相反的顺序显示出来。对问题可以设计如下思路:先分配一个10个字节的存储器缓冲区,存放从键盘上键入的字符。假设缓冲区的起始地址名为BUF。我们将从键盘上接受来的字符依次存放在这片内存里,然后再从最后一个字符开始,逆序把它们显示出来。 6. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 7. 实验步骤和方法:

本实验重点在于熟悉字符串的输入和输出的一般编程格式,相比于高级语言,汇编语言的输入和输出相对比较复杂一些,需要调用Dos中断来实现。

下面是一个一般的程序实现方法: (1) 分析问题,设计算法;

(2) 根据算法,编制汇编语言程序; (3) 程序汇编为目标文件.obj;

(4) 目标文件.obj链接为可执行文件.exe;

(5) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(6) 根据实验过程和实验结果完成实验报告,并按时上交。

注意:

? 代码段的定义方法;

? Dos中断中21号中断的作用; ? 注意程序的模块化。

8. 实验预习要求:阅读有关Dos中断的相关内容。 9. 思考题:

(1) Dos中断的作用?

(2) 一般Dos中断的调用方法,可否给出一两个例子进行说明。

湖南大学软件学院 24

计算机组成与结构实验指导书

10. 评分标准:

(1) 能正确设计和实现一串字符的输入和输出(80%); (2) 实验报告编写认真详细,按时上交(20%)。

11. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序的运行结果。 实验报告:

“实验内容”:填写程序实现的代码; “数据记录和计算”和“结论”:给出在实验项目中Dos中断调用的关键部分和注

意点;

“小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 25

计算机组成与结构实验指导书

7. 实验七 字符串操作程序设计(选做)

1. 实验七:字符串操作程序设计。

2. 实验目的:通过上机编程,熟悉汇编语言中对字符串进行简单操作的相关指令,并

掌握汇编语言中关于字符串操作的程序设计技巧。 3. 实验要求:

(1) 本实验要求设计并实现一个简单的比较两个字符串是否相等的程序来熟悉

并掌握如何在汇编语言中实现简单的关于字符串操作的程序设计。 (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

本实验项目是要去利用汇编语言实现对2个字符串的比较,可以借助C语言中对字符串进行比较的原理来设计和实现。

假设在数据区已存放了两段待比较字符串。算法实现可以非常简单的使用汇编语言中提供的一个字符串的比较指令:CMPS,但在本实验中要求不使用此条指令实现字符串的比较操作。简单的一个思路是:设定一个标志,然后逐个比较这两个字符串的对应位,如果相同则比较下一位,如果有某一位不同,则设置标志为不同,如果两个字符串都比较完仍然相同则表示字符串是相同的。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点在于对字符串的一些操作指令的熟悉,如果前面给出的一些选作的实验项目已经做过,那么本试验项目就可以比较顺利的进行。

下面给出的是一个按照给定的参考思路的程序实现: (1) 分析问题,设计算法。;

(2) 根据算法,编制汇编语言程序; (3) 程序汇编为目标文件.obj;

(4) 目标文件.obj链接为可执行文件.exe;

(5) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(6) 根据实验过程和实验结果完成实验报告,并按时上交。 注意:

? 程序中在代码段如何定义一个字符串变量? ? 程序中堆栈相关指令的使用;。

7. 实验预习要求:预习堆栈的有关指令和字符串的相关指令内容。 8. 思考题:

(1) 比较利用汇编语言和利用C语言进行字符串操作的异同; (2) 堆栈在汇编语言中是如何实现的;

9. 评分标准:

(1) 能正确设计和实现一个用汇编语言比较2个字符串的程序,运行结果正确

(80%);

湖南大学软件学院 26

计算机组成与结构实验指导书

(2) 实验报告编写认真详细,按时上交(20%)。

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序运行结果。 实验报告:

“实验内容”:填写程序代码; “数据记录和计算”和“结论”:有关程序设计和实现过程中的一些问题及解决方

法总结;

“小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 27

计算机组成与结构实验指导书

8. 实验八 栈操作程序设计(选做)

1. 实验八:栈操作程序设计。

2. 实验目的:通过上机编程,掌握栈的特点,并熟悉汇编语言中栈操作的实现; 3. 实验要求:

(1) 本实验任务和实验六的任务是相同的,但是要去任务的实现的手段必须是基

于栈的。实验项目是:从键盘上键入10个字符,然后以与键入字符先后相反的顺序显示出来。 (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

本实验项目是要去基于栈来实现,实验任务比较简单,关键是通过此任务实现汇编语言中栈结构的设计留城。由于堆栈是“后进先出”的,因此,利用堆栈作为输入缓冲区容易实现逆序输出。对问题可以设计如下思路:先分配一个256个字的堆栈缓冲区,在其低字节中存放从键盘键入的字符。将从键盘接受来得10个字符依次进栈,存放在这片堆栈区中,然后再从最后一个字单元开始,弹出堆栈,即可实现逆序显示。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验任务相对比较简单,重点在于熟悉汇编语言中对栈的有关指令和栈结构的设计实现流程。

下面是根据前述算法给出的一个参考实现流程: (1) 分析问题,设计算法;

(2) 根据前述的算法,设计和实现基于栈的汇编语言程序; (3) 程序汇编为目标文件.obj;

(4) 目标文件.obj链接为可执行文件.exe;

(5) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(6) 根据实验过程和实验结果完成实验报告,并按时上交。 注意:

? 在汇编语言中,堆栈段的定义;

? 在汇编语言中,和堆栈段相关的一个特定寄存器;

7. 实验预习要求:复习在数据结构课程中讲述的有关堆栈的一些特点,并预习汇编语

言指令中有关堆栈的指令部分。 8. 思考题:

(1) 在汇编语言中,堆栈结构的实现和C语言中堆栈结构的实现有何不同; (2) 堆栈段的定义和数据段的定义的异同; 9. 评分标准:

(1) 能正确地设计和实现基于堆栈的字符串的逆向输出,程序的实验结果正确

(80%);

(2) 实验报告编写认真详细,按时上交(20%)。

湖南大学软件学院 28

计算机组成与结构实验指导书

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序的运行结果。 实验报告:

“实验内容”:填写程序代码; “数据记录和计算”和“结论”:有关程序设计和实现过程中的一些问题及解决方

法总结;

“小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 29

计算机组成与结构实验指导书

9. 实验九 I/O程序设计(选做)

1. 实验九:I/O程序设计。

2. 实验目的:通过上机编程,掌握在汇编语言中进行I/O程序设计的基本方法,并掌

握中断指令在I/O程序设计中的应用。 3. 实验要求:

(1) 本实验要去分别在图形显示方式和字符显示方式下显示一个字符串,进而理

解和掌握BIOS显示器中断调用的方法; (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

本实验要去分别在图形和文本环境下显示字符串,属于稍微复杂一些的输入输出部分的内容,需要进行BIOS显示中断调用。

在图形显示方法下,首先利用功能号为0的显示中断调用设置显示方式,然后利用功能号为2的显示中断调用设置光标的位置,再利用功能号为0A的显示中断调用显示字符,字符长度为多少,就需要进行多少次中断调用。

在文本显示方式下,首先利用功能号为0的显示中断调用设置显示方式,显示部分和图形方式相同。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点在于熟悉Bios中断调用的相关指令,相比于高级语言,这个部分的内容可能比较抽象。

下面是根据前述的思路,给出的一种简单的程序实现流程: (1) 问题分析,算法设计;

(2) 根据上述分析,画出程序流程图(如图9-1所示); (3) 根据流程图,编写汇编语言程序; (4) 程序汇编为目标文件.obj;

(5) 目标文件.obj链接为可执行文件.exe;

(6) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(7) 根据实验过程和实验结果完成实验报告,并按时上交。 注意:

? 在汇编语言中,Bios的中断类型不同,注意选择合适的中断号; ? 在此项目中,注意堆栈在项目中的应用。

湖南大学软件学院 30

计算机组成与结构实验指导书

图9-1 程序流程图

7. 实验预习要求:预习有关Bios的有关知识和中断的相关内容。 8. 思考题:

(1) Bios中断可以提供那些功能;

(2) 对于Bios中断的调用有那些一般性的步骤可以遵循; 9. 评分标准:

(1) 能正确生成一个Nurbs曲面(80%); (2) 实验报告编写认真详细,按时上交(20%)。

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序的运行结果。 实验报告:

“实验内容”:填写实验中编写的代码;

“数据记录和计算”和“结论”:填写有关Bios调用的一些关键代码在实验中的

变化,以及自己在编程中的一些体会; “小结”:填写自己的感想。

湖南大学软件学院

31

计算机组成与结构实验指导书

源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 32

计算机组成与结构实验指导书

10. 实验十 中断处理程序设计(选做)

1. 实验十:中断处理程序设计。

2. 实验目的:通过上机编程,进一步理解课堂讲授的中断的概念,并掌握在汇编语言

中,处理中断的程序设计方法。 3. 实验要求:

(1) 本实验项目要去通过一个简单的多字符输入和回显的程序,理解和掌握

DOS键盘功能中断调用的实现方法。实验要求从键盘输入一串字符,回显并把字符串存入缓冲区BUF中。 (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

本实验侧重DOS键盘中断的调用,其他的中断设计方法可以用类似的方法来设计。实验要求从键盘输入一串字符,回显并把字符串存入缓冲区BUF中。

本试验需要调用DOS的中断功能,通过查询DOS的中断调用表,得知本实验所需的 DOS中断为INT 21H,功能号为0A。 在试验中,所使用的BUF缓冲区可以按照以下规定的格式来定义: Buf DB n ;n为缓冲区大小 DB ? DB n DUP(0) 其中,第一字节规定了缓冲区的大小(1-255),由用户设定;第二字节用于存放实际输入的字符数,该值由DOS返回时自动填入;从第三个字节开始存放从键盘输入的字符,直到用户输入回车符为止,并将回车码0DH加在输入字符串的末尾。所以在设置会冲区大小时,应该注意缓冲区要比输入的字符个数多一个,如果输入的字符数超过缓冲区最大长度时,后面的字符被省略,而且响铃直到输入回车符为止。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点在于熟悉在汇编语言中中断程序的设计技巧,关键在于了解不同中断的作用和调用方法。

我们以要去的任务为例给出了一个简单的实验流程: (1) 问题分析,算法设计;

(2) 根据算法描述,可以划出程序流程图,如图10-1所示,其中:

入口参数:缓冲区的偏移地址->DX

缓冲区的段地址->DS

调用方法: mov AX,缓冲区的段地址 Mov DS,AX Mov DX,缓冲区的首址的偏移地址 Mov AH,0AH INT 21H

湖南大学软件学院

33

计算机组成与结构实验指导书

图10-1 程序流程图

7. 8.

9.

10.

(3) 根据程序流程图,编写汇编程序; (4) 程序汇编为目标文件.obj;

(5) 目标文件.obj链接为可执行文件.exe;

(6) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(7) 根据实验过程和实验结果完成实验报告,并按时上交,注意对程序中断部分

放的注释和说明。 注意:

? 程序中给出的DOS中断的调用方法; ? 中断程序的一般实现流程;

实验预习要求:预习有关DOS中断的一些基本知识,了解不同中断号所代表的不同功能。 思考题:

(1) 和前面实验项目中给出的中断相比,DOS中断和BIOS中断有什么相

同和不同的地方?

(2) 通过不同的中断实验项目,可否归纳出对于一般的中断程序设计的一

些基本原则?

评分标准:

(1) 能够正确设计实现要求的任务,结果正确(80%); (2) 实验报告编写认真详细,按时上交(20%)。

实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。 实验卡:

“组别”:填写自己的学号;

? “实验数据记录”:填写程序的运行结果。

湖南大学软件学院

34

计算机组成与结构实验指导书

实验报告:

“实验内容”:填写程序设计实现代码;

“数据记录和计算”和“结论”:填写程序运行结果,把有关中断部分的关键部分

在程序中的变化情况进行说明; “小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 35

计算机组成与结构实验指导书

11. 实验十一 数值乘除运算程序设计(选做)

1. 实验十一:数值乘除运算程序设计。

2. 实验目的:通过上机编程,掌握十/二进制的转化,学习格式化输出的方法,掌握

二进制乘法的实现。 3. 实验要求:

(1) 本实验要求键入两个一位带符号的十进制数,转化成二进制数值后相乘,将

积按两位十进制的形式输出。如:-2*+6=-12,其中,-2、+6为键盘输入的,*、=为程序自动输出的,-12是输出乘法运算的结果。 (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

本实验项目的关键是如何实现输入输出部分的程序,对于程序本身的算法而言是比较简单的。对实验任务可分析如下:对于带符号数的乘法需要使用IMUL等带符号运算的指令;然后将程序分为几个部分(输入部分,运送部分,格式化输出部分)实现。

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点的在于数据的输入和输出部分,我们在前面的实验项目中已经对这个问题有了一些涉及,但是并没有涉及到带符号数的输入和输出的问题,因此需要在符号位的处理上面仔细斟酌。

下面是一个简单的实现流程,供参考: (1) 问题分析,算法设计;

(2) 根据算法设计,写出相关的汇编语言程序; (3) 程序汇编为目标文件.obj;

(4) 目标文件.obj链接为可执行文件.exe;

(5) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(6) 编译连接自己的OpenGL框架程序,运行结果应为一个空窗口; (7) 根据实验过程和实验结果完成实验报告,并按时上交,注意对程序中断部分

放的注释和说明。 注意:

? 在程序编制过程中,大家可以参考前面一些做过的程序是如何处理输入和

输出的;

? 在程序设计中,“+”,“-”,“=”等符号可以通过程序以字符的方式输出。

7. 实验预习要求:预习有关带符号位进行数值运算的汇编指令。 8. 思考题:

(1) 汇编语言中,输入和输出部分和一般的高级语言有何不同?

(2) 对于汇编语言中的输入何输出,可否归纳出一些一般的编程技巧? 9. 评分标准:

湖南大学软件学院 36

计算机组成与结构实验指导书

(1) 能正确输入和输出带符号数,运算结果正确(80%); (2) 实验报告编写认真详细,按时上交(20%)。

10. 实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。

实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写程序的运行结果。 实验报告:

“实验内容”:填写实验项目的实现代码;

“数据记录和计算”和“结论”:对数据的输入和输出部分进行解释; “小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 37

计算机组成与结构实验指导书

12. 实验十二 过程调用程序设计(选做)

1. 实验十二:过程调用程序设计。

2. 实验目的:通过上机编程,掌握汇编语言中过程调用的基本概念,掌握汇编语言中

过程调用程序的设计与实现,掌握汇编语言中模块化的设计与实现方法。 3. 实验要求:

(1) 实验包括2个部分,第一部分是通过DOS调用将字符串显示在屏幕上,通

过简单的字符串的显示实验,理解模块化实现的使用方法,第二部分是从键盘输入一个班的学习成绩,存放在大小为50个字的grade数组中,其中grade+i保存学号为i+1的学生成绩,然后根据grade中的学生成绩,把学生名次填入50字的rank数组中,其中rank+i的内容是学号为i+1学生的名次,最后按照学号顺序把名次从终端上显示出来,这个部分相对比较复杂; (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

本次实验包括两个部分,先通过一个简单的例子讲述模块化的基本思想和实现方法,然后再通过一个比较复杂的例子展示模块化思想在解决复杂问题(尤其是在用汇编语言)的过程中所具有的优点。

对于第一个任务,假定要显示的字符串存储在内存中,实验通过DOS调用来实现显示。根据模块化的设计思想,将整个程序划分为两个模块:模块A为主模块,负责进行数据初始化;模块B为子程序,负责完成字符串显示。

对于第二个任务,可以将整个程序划分为如下几个模块,如图12-1所示。

图12-1 程序模块图

其中,各个模块功能说明如下:

(1)Main:总控模块(如图12-2所示)。 模块输入:从键盘输入一个班的学生成绩; 模块输出:显示一个班的学生名次;

湖南大学软件学院

38

计算机组成与结构实验指导书

模块功能:根据输入的学生成绩,计算并显示学生名次(实现算法:一个学生的名次等于成绩高于该生的学生人数加1)。

(2)Input:输入模块(如图12-3所示)。 模块输入:以学号为序从键盘输入一个班的学习成绩。各成绩用逗号隔开,以回车为输入结束标示;

模块输出:把一个班的学生成绩存入grade数组;

模块功能:接收一个班的学生成绩。调用模块decibin把从键盘得到的十进制数转为二进制数;调用子模块crlf完成回车和换行功能。

(3)rankp:

模块输入:从grade数组取得一个班的学生成绩;

模块输出:以学号为序计算出该班每个学生的名次存入rank数组; 模块功能:计算一个班的学生名次。 (4)output(如图12-4所示):

模块输入:从rank数组取得一个班的学生名次;

模块输出:把一个班的学生名次以学号为序在终端上显示出来;

模块功能:显示一个班的学生名次。调用子模块binidec把rank数组中的二进制数转换为十进制数,并在终端显示出来。调用子模块crlf完成回车和换行功能。

(5)decibin(如图12-5所示):

模块输入:从键盘取得一个十进制数。

模块输出:把该数转换为二进制并存入BX寄存器中; 模块功能:把从键盘得到的一个十进制数转换为二进制数,并将该数存入BX寄存器中。

(6)crlf(如图12-6所示):

模块输出:向终端发出回车、换行符; 模块功能:完成一次回车、换行操作。 (7)binidec(如图12-7所示):

模块输入:从BX寄存器取得一个二进制数; 模块输出:在终端屏幕上显示一个十进制数;

模块功能:把BX寄存器中的二进制转换为十进制数,并在终端显示器上显示出来。调用dec_div模块用来做除法运算并显示字符。

(8)dec_div(如图12-8所示):

模块输入:从BX寄存器中取得需转换得十进制数; 模块输出:在屏幕上显示一位十进制数;

模块功能:把BX寄存器中的二进制数除以相应的十的幂,并在屏幕上显示一位商,余数保存在BX寄存器中。

湖南大学软件学院 39

计算机组成与结构实验指导书

图12-2 Main模块 图12-6 Ctrf模块流程图 图12-7 Binidec模块流程图图 12-8 Dec_div模块流程图

图12-3 Input模块流程图 图12-4 Output模块流程图 图12-5 Derbin模块流程图

湖南大学软件学院 40

计算机组成与结构实验指导书

5. 实验软硬件环境:奔腾系列机器,操作系统为Dos或者Windows系列,相关的汇

编语言编译工具(MASM、LINK和DEBUG)以及集成编译器。 6. 实验步骤和方法:

本实验重点在于熟悉在汇编语言中,如何实现模块化,理解模块划分的思想,以及如何在模块之间进行数据交互。

下面是一个简单的实现实现流程: 对于第一个任务:

(1) 分析问题,设计算法;

(2) 根据上述分析,编写汇编语言代码; (3) 程序汇编两个不同的文件:

..\masm init.asm得到目标代码init.obj ..\masm output.asm得到目标代码output.obj

(4) 目标文件.obj链接: ..\link init.obj+output.obj 得到可执行文件init.exe;

(5) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(6) 根据实验过程和实验结果完成实验报告,并按时上交。

注意:

? 在程序中汇编是包括2个文件的,而链接就是将分别编译过的文件链

接为一个可执行文件;

对于第二个任务:

(1) 分析问题,模块划分;

(2) 根据上述流程图,编写相应的汇编代码; (3) 程序汇编为目标文件.obj;

(4) 目标文件.obj链接为可执行文件.exe;

(5) 使用Debug调试运行程序,设置断点,查询相关寄存器内容,调试直至得

到正确的结果;

(6) 根据实验过程和实验结果完成实验报告,并按时上交,特别注意需要对程

序进行详细的注释。 注意:

? 程序在汇编时要针对多个文件进行汇编,之后还要将文件链接起来形成可

执行的exe文件。

实验预习要求:预习有关汇编语言程序中链接的有关内容。 思考题:

(1) 汇编语言的模块化程序和一般的高级语言的模块化有什么不同? (2) 汇编语言在模块化过程中,不同模块之间的数据如何交互? 评分标准:

(1) 能正确实现程序的模块化,可以链接为一个可执行文件,结果正确(80%); (2) 实验报告编写认真详细,按时上交(20%)。

实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。 实验卡:

湖南大学软件学院

41

7. 8.

9.

10.

计算机组成与结构实验指导书

“组别”:填写自己的学号;

“实验数据记录”:填写程序的运行结果。 实验报告:

“实验内容”:程序实现的关键代码,挑选关键的部分填写即可; “数据记录和计算”和“结论”:说明在文件链接过程中的一些关键点; “小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括asm文件、obj文件、exe文件等; ? 文件夹的命名规则请按照实验要求设定,然后将整个文件夹压缩打包后提

交(包名中应含有学号)。

湖南大学软件学院 42

计算机组成与结构实验指导书

13. 实验十三 WinDLX使用及WinDLX汇编语言(必做)

1. 实验十三:碰撞检测。

2. 实验目的:掌握WinDLX模拟器的基本用法,了解WinDLX汇编语言的一些基本

知识,通过WinDLX模拟器的使用,对指令流水有更进一步的认识。 3. 实验要求:

(1) 本实验和课程上讲述的内容联系紧密,要依据课题所学习的内容,通过对

WinDLX模拟器的熟悉,了解WinDLX模拟器对应于指令流水所出现的问题进行的优化。

(2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

计算机体系结构中的一个关键部分就是指令流水,而WinDLX是一个图形化、交互式的DLX流水线仿真器。指令流水是为了提高计算机的效率而提出的一种技术,其主要思想是,将指令的执行分解为相对独立的不同步骤,不同步骤占用不同的硬件资源,从而实现在同一时间内同时执行多条指令,并达到在每个时钟输出一条指令的效果。

WinDLX仿真器可以装入DLX汇编语言程序,然后单步,设断点或是连续执行该程序。CPU的寄存器,流水线,I/O和存储器都可以用图形表示出来。仿真器还提供了对流水线操作的统计功能。WinDLX可以装载文件名为*.s的文件。WinDLX要求的硬件平台是IBM-PC兼容机。WinDLX是一个Windows应用程序,运行DOS3.3以上和Windows3.0以上的操作系统。

5. 实验软硬件环境:奔腾系列机器,操作系统为Windows系列,WinDLX模拟器。 6. 实验步骤和方法:

本实验重点在于理解指令流水的基本原理,然后结合WinDLX仿真器直观的了解指令流水的实现过程。本试验是一个基本实验要求大家必须熟练掌握。

下面给出的一个简单的实验流程:

(1) 熟悉WinDLX界面。直接双击“WinDLX.exe”文件,结果如图13-1所示:

图13-1 打开WinDLX 湖南大学软件学院

43

计算机组成与结构实验指导书

其中的六个子窗口分别为:

a) Statistics窗口:统计与模拟器相关的一些统计值(如图13-2)。 b) Clock Cycle Diagram窗口:显示在每个循环,每个阶段都在做的一些

工作(如图13-3)。

c) Pipeline窗口:显示DLX流水线的结构(如图13-4)。

d) Register窗口:主要用于显示寄存器内的当前值(如图13-5)。 e) Code窗口:显示被加载在内存中的DLX指令及其地址(如图13-6)。 f) Breakpoints窗口:主要用于设定、查看、改变或者删除断点,最多

可以设定20个断点(如图13-7)。

图13-2 Statistics窗口 图13-3 Clock Cycle Diagram窗口

图13-4 Pipeline窗口

湖南大学软件学院 44

计算机组成与结构实验指导书

图13-5 Register窗口

图13-6 Code窗口

图13-7 Breakpoints窗口

图13-8 打开一个.s文件

(2) 学习加载一个文件,依次点击:File—〉Reset DLX,出现对话框,点击确

定,如图13-8;

(3) 点击File->Reset ALL,出现对话框,点击确定。这样对整个模拟环境进行

初始化。然后点击:Load Code or Data,出现一个文件选择对话框,选择需

湖南大学软件学院

45

计算机组成与结构实验指导书

要模拟的.s文件(如图13-9),文件可以根据DLX汇编语言进行编写,模拟器提供了几个文件,我们可以先根据这几个文件熟悉一下整个的操作流程;

图13-9 文件选择窗口

(4) 选择,fact.s和input.s,然后,按F7,程序将在窗口中逐步执行,寄存器的值,流水线执行,代码在内存的存放位置,程序执行过程中的一些统计结果等都将显示在不同的子窗口中,如图13-10所示;

图13-9 程序在各个窗口的执行情况

(5) 根据各个窗口的变化情况,联系课题讲述的相关内容,加深计算机对指令执

行流程的理解;

(6) 完成实验报告,尤其注意要联系所学内容,论述计算机对指令的执行过程。

湖南大学软件学院

46

计算机组成与结构实验指导书

7.

8.

9.

10.

关于DLX汇编指令的相关内容,请参看附件4的相关内容,进行自学。 注意:

? 观察在程序执行过程中,各个不同子窗口之间的变化;

实验预习要求:预习WinDLX软件包中带有的说明文件及教程,提前了解仿真器的使用方法和DLX处理器的原理。同时也需要对课堂上讲述的有关指令流水的基本原理要比较清楚。 思考题:

(1) 通过实验的模拟,对于指令流水思想是否有一个更加深入的认识? (2) 在程序逐步执行过程中,对于Clock Cycle Diagram窗口中出现的一些箭头,

可否给出一些解释? 评分标准:

(1) 能够熟练使用WinDLX模拟器,并能对各个子窗口的功能有清晰的认识

(80%);

(2) 实验报告编写认真详细,按时上交(20%)。

实验报告:要求提交1份实验卡、1份实验报告、源程序代码(电子档)。 实验卡:

“组别”:填写自己的学号;

“实验数据记录”:填写所载入的.s文件的运行结果。 实验报告:

“实验内容”:填写程序执行过程中对各子窗口变化的说明;

“数据记录和计算”和“结论”:说明对于载入的程序,各子窗口所反映出的不同

结果;

“小结”:填写自己的感想。 源代码:

? 提交源程序时应提交整个文件夹,包括各种.s文件,文件夹的命名规则请

按照要求设定,然后将整个文件夹压缩打包后提交(包名中应含有学号)。

湖南大学软件学院 47

计算机组成与结构实验指导书

14. 实验十四 程序相关性问题分析(选做)

1. 实验十四:程序相关性问题分析。

2. 实验目的:通过WinDLX仿真器,掌握计算机体系结构中指令相关的不同种类,

掌握计算机体系结构中指令相关问题的消除方法。 3. 实验要求:

(1) 本实验要求利用DLX汇编语言编写一个程序,程序可以使用循环结构等造

成指令相关,然后加载到WinDLX模拟器中进行模拟,观察指令在流水线运行时由于指令相关所引起的流水中断等问题,最后,注意联系课题内容,分析在模拟器中所使用的消除相关的方法。 (2) 每人一组,独立完成。

(3) 根据实验目的,认真完成实验中给出的任务;根据实验过程和结果,完成实

验报告并及时上交相关文档;在实验报告中应认真写出自己的实验心得和体会;鼓励同学进行交流,但是禁止抄袭!

4. 实验原理及内容:

指令流水大大提高了计算机的效率,但是由于指令相关性的存在,使得我们在实际的机器运行中,不可能达到理论上的加速比。一般而言,在循环程序,计算表达式等程序中,容易出现读写相关,结构相关等相关。因此,可以使用循环结构等造成指令相关,然后加载到WinDLX模拟器中进行模拟,观察指令在流水线运行时由于指令相关所引起的流水中断等问题,最后,注意联系课堂内容,分析在模拟器中所使用的消除相关的方法。

5. 实验软硬件环境:奔腾系列机器,操作系统为Windows系列,WinDLX模拟器。 6. 实验步骤和方法:

根据课堂中讲述的指令相关的内容,以及DLX汇编语言,可以编写一个简单的程序来造成指令相关现象,也可以简单的将我们以前做过的一些实验项目根据DLX汇编语言的要求变换一下。

下面给出一个一般的实验流程:

(1) 设计一个可以产生指令相关的算法; (2) 利用DLX汇编语言实现此算法; (3) 打开WinDLX,载入该文件; (4) 按F7逐步执行;

(5) 观察在不同子窗口出现的变化,特别是Clock Cycle Diagram窗口中的

变化;

(6) 记录下存在相关的指令; (7) 根据不同的指令类型,针对WinDLX窗口出现的情况,联系课堂内容,

总结计算机是如何解决这些相关的;

(8) 完成实验报告,并按时上交。

7. 实验预习要求:预习有关DLX汇编指令的有关内容,并复习一下课堂中讲述的有

关指令相关的消除所用到的方法。 8. 思考题:

(1) DLX汇编语言和8088/8086汇编语言有何异同?

(2) 对于产生相关的一些程序,可否有什么方法来避免这些相关?

湖南大学软件学院 48

本文来源:https://www.bwwdw.com/article/h6ip.html

Top