汇编课程设计

更新时间:2023-03-08 10:05:08 阅读量: 综合文库 文档下载

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

中北大学

汇编语言程序设计

课 程 设 计 说 明 书

学生姓名: 王昆鹏 学 号: 0905054116 学 院: 信息与通信工程学院 专 业: 自动化 题 目: 数据(学生成绩)统计程序设计

指导教师: 沈小林 职称: 副教授

2012年6月24日

中北大学

汇编语言程序设计实验 课程设计任务书

11/12 学年第 二 学期

学 院: 信息与通信工程学院 专 业: 自动化 学 生 姓 名: 王昆鹏 学 号: 0905054116

课程设计题目: 数据(学生成绩)统计程序设计 起 迄 日 期: 06月18日~06月24日

课程设计地点: 中北大学 指 导 教 师: 沈小林

系 主 任: 王忠庆

下达任务书日期: 2012年06月24日

课 程 设 计 任 务 书

1.设计目的: 通过对学生成绩数据的统计,掌握分支及循环程序设计及调试过程。 2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等): 1、程序要求 (1) 10个学生,某课程成绩分别为:56、69、70、76、73、85、88、90、96、100; (2)统计低于60、60-69、70-79、80-89、90-99、100份数段学生数; (3)将各分数段学生数分别存于S5、S6、S7、S8、S9、S10六个单元中。 2、设计内容 (1)根据要求确定解决问题的编程方法; (2)画出模块层次图; (3)写出各模块说明; (4)按照要求调试程序,记录程序运行结果; (5)写出设计总结报告。 设计报告主要内容包括:设计目的与要求、系统技术指标或设计要求、程序设计方案、主要参考资料及心得体会等 3.设计工作任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等〕: 设计总结;程序清单;程序框图;参考文献等。 【注】装订时依照封面、任务书、设计总结顺序一起装订。

课 程 设 计 任 务 书

4.主要参考文献: ? 要求按国标GB 7714—87《文后参考文献著录规则》书写,例: 1 傅承义,陈运泰,祁贵中.地球物理学基础.北京:科学出版社,1985 参考资料不得少于10篇 5.设计成果形式及要求: 设计总结;程序清单(附注释);参考文献等。 6.工作计划及进度: 6月18日 ~ 6月19日 6月20日 ~ 6月20日 6月21日 ~ 6月22日 6月23日 ~ 6月24日 调研、资料收集; 设计方案确定,设计程序 程序调试、程序必须调试通过。 撰写总结、设计报告答辩 系主任审查意见: 签字: 年 月 日 第一章 摘要

一方面,汇编语言指令是用一些具有相应含义的助忆符来表

达的,所以,它要比机器语言容易掌握和运用,但另一方面,它要直接使用CPU的资源,相对高级程序设计语言来说,它又显得难掌握。汇编语言指令是机器指令的一种符号表示,而不同类型的CPU有不同的机器指令系统,也就有不同的汇编语言,所以,汇编语言程序与机器有着密切的关系。 汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。 汇编语言的特点:

1.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。

2.与机器相关性 。保持了机器语言的优点,具有直接和简捷的特点。

3、可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。

4、目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。

5、经常与高级语言配合使用,应用十分广泛。 6、执行的高效率。 7、编写程序的复杂性。

8、调试的复杂性。高级语言程序几乎不显式地使用“转移语句”,但汇编语言程序要用到大量的、各类转移指令,这些跳转指令大大地增加了调试程序的难度。如果在汇编语言程序中也强调不使用“转移指令”,那么,汇编语言程序就会变成功能单调的顺序程序,这显然是不现实的。

总而言之,汇编语言在自动控制领域程序编写占有相当重要的地位。学好汇编是我们自动化专业学生必须的。

设计目的:

通过对学生成绩数据的统计,掌握分支及循环程序设计的原理及调试过程;进一步了解和巩固汇编语言程序设计的整个设计过程。

设计内容:

(1) 10个学生,某课程成绩分别为:56、69、70、76、73、85、88、90、96、100;

(2)统计低于60、60-69、70-79、80-89、90-99、100分数段学生数;

(3)将各分数段学生数存于S5、S6、S7、S8、S9、S10六个单元中。

第三章 子程序的设计方法

1、子程序概述

(1)、子程序的定义

子程序又称为过程,它是将功能通用、使用频繁的一些程序段设计为独立的模块,以供程序中多出调用,达到简化程序设计的目的。子程序是一种常用的程序结构形势,也是模块化程序设计的基础。

过程的定义采用过程定义伪指令,其格式为: 过程名 PROC 属性 过程体 RET 过程名 ENDP

属性可以是NEAR或FAR。和调用程序在同一代码段中的子程序使用NEAR属性,和调用程序不在同一代码段中的子程序使用FAR属性。过程体是过程的核心部分,即功能独立的程序段。RET指令总是放在过程体的末尾,用来返回主程序。 (2)、子程序的调用及返回

子程序的调用及返回使用CALL指令和RET指令。调用子程序时只要在CALL指令后写上过程名即可。其中主程序中CALL指令的下一条的地址称为断点。

根据调用程序和子程序是否在同一代码段,又可以分为两大类: ①段内调用,即子程序使用NEAR属性,调用程序和子程序在

同一代码段,调用前后代码段的地址不变。

CALL指令的功能为:

SP-2→SP,IP→(SP+1,SP),即断点的偏移地址入栈; 子程序的入口地址(偏移地址)→IP,转去执行子程序。 RET指令的功能为:

(SP+1,SP)→IP,SP+2→IP,即返回断点执行。

②段间调用,即子程序使用FAR属性,调用程序和子程序不再同一代码段,调用前后代码段的段地址要改变。

CALL指令的功能为:

SP-2→SP,CS→(SP+1,SP),即断点的段地址入栈; SP-2→SP,IP→(SP+1,SP),即断点的偏移地址入栈; 子程序的入口地址(段地址:偏移地址)→CS:IP,转去执行子程序。

RET指令的功能为:

(SP+1,SP)→IP,SP+2→SP(弹出断点的偏移地址); (SP+1,SP)→CS,SP+2→SP(弹出断点的段地址)。 注意:带立即数返回指令的格式和功能 格式:RET N(N为立即数)

功能:先从栈顶弹出断点地址,而后SP+N→SP。 (3)、模块间的调用和转移

模块化程序设计是汇编语言程序设计的基本方法。

可以将各个独立功能的程序段(可以包括一个或多个子程序)设

计为一个个模块,这些模块可以独立汇编产生目标代码,并通过链接程序把这些单独开发的程序模块组合成为一个功能完善的应用程序。

当在程序设计中使用多个模块时,需要在各模块的段定义中指明段的定位类型、组合类型和类别。若各个模块直接需要相互访问,如变量的访问和子程序的调用,则必须在变量或子程序的定义模块内将变量或子程序用PUBLIC来申明,同时在访问变量和子程序的模块中将该变量或子程序用外部(EXTRN)符号来说明。

PUBLIC和EXTRN符号的格式如下: PUBLIC符号 EXTRN符号:类型 (4)、现场保护和恢复

通常主程序和过程的设计是分开进行的,因而它们所使用的寄存器往往会发生冲突,所以在进入过程时应该将该过程所用寄存器的内容保存起来,这称为保护现场。,过程返回主程序前,应将这些寄存器内容恢复,这称为恢复现场。保护现场和恢复现场通常分别用堆栈压入指令和弹出指令来实现。

必须注意,并不是过程中用的所有寄存器内容都要保护。例如,若用寄存器在主程序和过程间传递参数就不用保护。

2、主程序和子程序之间的参数传递

在主程序调用子程序时,必须先把子程序所需的初始数据设置(即入口参数)好,子程序执行完毕返回主程序时也必须将子程序运行所得结果(即出口参数)送给主程序。子程序入口参数和出口参数

的送入和送出称为主程序和子程序的参数传递。参数传递的方法主要有以下3种:

(1)利用寄存器传递参数。这种方法是将子程序的输入参数由主程序放入规定的寄存器带入子程序中。执行子程序后的结果也放入规定的寄存器中带回主程序,采用该方法设计子程序时,主、子程序必须按约定在指定的寄存器中取出或存入指定参数。通常某个寄存器既可以用作存放输入参数的寄存器,又同时可以用作存放输出参数的寄存器。这种方法适用于传递参数较少的场合。

(2)利用内存单元传递参数。主程序在调用前将所有输入参数按约定好的次序存入存储区,进入子程序后按约定从存储区中取出输入参数进行处理,所得输出参数也按约定的次序存入指定存储区。返回主程序后就可取得结果。通常我们还可以通过用寄存器存放存储区首址,来实现多参数情况下的传递。这种方法适用于传递参数较多的场合。

(3)利用堆栈传递参数。用堆栈传递参数的方法是在调用子程序之前,用PUSH指令将输入参数压入堆栈,在子程序中通过出栈方式依次获得这些参数,经过子程序操作处理后再将输出参数压入堆栈,返回主程序后再通过出栈获得结果。这种方法也是适用于传递参数较多的场合,但特别要注意堆栈中断点的保存与恢复。

3、嵌套与递归子程序

如果某程序调用一个或若干个子程序,我们称为子程序的一般调用。如果某程序调用某一个子程序,而该子程序又调用了其他的子程

序,则称为子程序嵌套。子程序在多层嵌套中,要格外注意程序中的堆栈操作,要确保子程序在每次返回时,SP指向的是正确的返回地址,而不是数据或其他信息。

递归也是子程序嵌套的一种形式,它嵌套调用的过程就是它自身。同样在编写递归子程序时,要特别注意堆栈状态的变化。

子程序设计:

子程序的设计过程归纳为一下几步: (1)确定子程序的名称和调用属性。

(2)确定子程序入、出口参数,以及适当的参数传递方式。 (3)确定子程序的算法,画出流程图,并编写程序。 (4)确定子程序的寄存器和存储单元使用情况,并进行现场保护。

(5)编写子程序说明文档。

由于子程序通常是要反复使用或供他人使用的,在设计子程序的同时就应当建立子程序的说明文档,清楚地描述该子程序的功能和调用方法,以便于以后正确使用和维护。一般来说子程序说明文档应包括以下内容:

(1)子程序名:一般应使用具有一定含义的标识符。 (2)功能:说明该子程序完成的具体任务。

(3)入口参数:说明子程序运行所需的参数及其存取方式。 (4)出口参数:说明子程序运行结果及其存取方式。 (5)工作寄存器及存储单元:说明该子程序运行中寄存器和存

储单元的占用情况。

(6)坐着及最后修改日期:注明程序作者及修改日期,以便今后的维护。

(7)示例:在必要时,通过具体例子示范参数的使用,并起验证作用。

第四章 程序设计分析

分析:

将各分数段人数的统计放在子程序中完成,主程序把存放成绩的单元首地址、各分数段人数的存放单元地址以及要统计的总人数利用堆栈传递给子程序。统计的方法可以采用多分支结构,也可以利用成绩的十位数减去5作为变址值,从而实现在对应的分数段人数单元加1的功能,显然,后一种方法编制的程序效率更高。

子程序名:COUNT

功 能:统计低于60、60~69、70~79、80~89、90~99及100分的人数

入口参数:将统计的总人数、存放成绩的单元首地址、统计各分数段人数的单元首地址压入堆栈

出口参数:各分数段人数在数据存储区中

第五章 程序流程图

开始 主程序 存放成绩单元首地址送SI 各分数段人数的单元首地址送DI 要统计的人数送CX 调用子程序 个人成绩除以10的商减5的值 对应的地址空间内容加1 NO 10次循环 YES 结束 第六章 各模块说明

1、成绩传送模块。将存放数据的段首地址送给SI,通过对SI加2

来实现对各个数据的传送。

2、成绩分段并传送模块。将取出来的成绩经过调用子程序,通过子程序处理后得到的分数段个数送到各自对应的分数段单元中。 3、各个分数段个数的显示。调用DOS中断,将个数显示到计算机屏幕上。

4、子程序模块。对从数据段中取出来的数据进行处理和判断。实现方法如下:将分数除以10得到十位数,将十位数减去5,可以得到小于5的数,然后加上分数段个数存放单元的首地址,即可以存放在指定的单元中。

第七章 程序清单

设计方案:

统计的方法采用多分支结构 程序:

DSEG SEGMENT

TABL DB 56、69、70、76、73、85、88、90、96、100; N EQU 0 A DB 0

B DB 0 C DB 0 D DB 0 E DB 0 F DB 0 DSEG ENDS

SSEG SEGMENT STACK DB 200 DUP(?) SSEG ENDS CSEG SEGMENT

ASSUME CS:CSEG,DS:DSEG,SS:SSEG STACK:MOV AX ,DSEG MOV DS ,AX LEA SI ,TABL MOV CX ,N LP: MOV AL ,[SI] CMP AL ,60 JB S50 CMP AL ,70 JB S60 CMP AL ,80 JB S70

CMP AL ,90 JB S80

CMP AL,100 JB S90 S100:INC A

JMP NEXT S90: INC B

JMP NEXT S80: INC C

JMP NEXT S70:INC D JMP NEXT S60: INC E JMP NEXT S50: INC F NEXT:INC SI LOOP LP EXIT: MOV AH ,4CH

INT 21H

CSEG ENDS END START

第八章 程序运行结果及分析

运行结果:

结果分析

从图表中可以看出:S5中的数据为1,S6中的数据为1,S7中的数据为3,S8中的数据为2,S9中的数据为2,S10中的数据为1。与题目要求完全相符。

第九章 设计总结

此次课程设计的内容是“数据(学生成绩)统计程序设计”。我的程序是子程序的调用来完成的。在做课设的过程中我们遇到了不少的困难,在老师的的帮助下程序的错误顺利被消除,程序的调试也顺利的出了结果。

在这次课程设计中我受益匪浅。我们遇到的第一个问题就是子程序的设计和调用。通过查阅资料我了解掌握了子程序的设计和调用。详细信息如下:过程(子程序)定义伪指令PROC、ENDP。一个过程可以被其他程序所调用(用CALL指令),过程控制的最后一条指令是返回指令(RET);过程定义伪指令的格式为<过程名> PROC [类型名]┅ ┅ RET <过程名> ENDP ,其中类型名有两种NEAR—(默认类型)表时段内调用,FAR—表示段间调用。PROC和ENDP必须成对出现。

此外,本次课程设计时间虽然不长,但是通过这几天的准备使我对以前学过的汇编语言有了一个较为全面的复习。对汇编程序的各个指令的功能有了进一步的理解掌握,尤其器RET指令,在以前认识的基础上更加清除和明了的理解了其返回功能。还有,通过本次课设我对用汇编指令和机器指令编程更加熟练,加强了我遇到实际问题后解决问题和动手能力。

总而言之,本次课程设计中我学到了很多,在此,我谢谢老师为我们这次课设的付出。

参考文献:

1. 沈美明,温冬婵,《IBM-PC汇编语言程序设计(第2版)》,清华大学出版社,2006

2. 吴向军等,《汇编语言程序设计》,高等教育出版社,2002 3. 李国安/李敏,《汇编语言编程技术》,郑州大学出版社 ,2007 4. 王成耀, 80x86 汇编语言程序设计(第 2 版) ,人民邮电出版社,2008

5. 钱晓捷等,《汇编语言程序设计》,电子工业出版社,2000

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

Top