student 联系客服

发布时间 : 星期一 文章student更新完毕开始阅读62218adbad51f01dc281f14f

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

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. 评分标准:

湖南大学软件学院 35

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

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

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

实验卡:

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

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

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

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

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

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

湖南大学软件学院 36

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

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所示)。 模块输入:从键盘输入一个班的学生成绩; 模块输出:显示一个班的学生名次;

湖南大学软件学院

37

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

模块功能:根据输入的学生成绩,计算并显示学生名次(实现算法:一个学生的名次等于成绩高于该生的学生人数加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寄存器中。

湖南大学软件学院 38