汇编课程设计(2)

2019-04-02 09:38

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、嵌套与递归子程序

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


汇编课程设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018届浙江省金丽衢十二校高三第三次联考5月语文试卷及答案卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: