第6章 子程序结构
1.教学目的:掌握微型汇编语言程序分析和设计方法
2.教学要求:
熟悉汇编语言程序设计的基本步骤。
掌握程序流程图的使用,会利用其分析问题。
掌握汇编语言的顺序、分支、循环程序的设计。
了解实模式下80386及其后继机型的汇编语言的程序设计
3.教学重点:
①利用流程图分析问题。
②顺序、分支、循环程序的设计。
4.掌握难点:
①分支程序设计
②循环程序设计
5.教学进程安排:P170~190
6.教学方法:
课堂讲授
7.教学内容摘要:
6.1 子程序的概念
6.1.1 子程序概念
图6.1 主程序与子程序间的关系把可以多次调用、能够完成特定操作功能的程序段编写成独立的程序模块称为子程序,又称其为过程。主程序与子程序之间的关系如图6.1所示。
6.1.2,子程序特性
1.重复性
2.通用性
3.可浮动性
4.可递归和可重入性
6.2 子程序结构形式与操作
6.2.1 子程序定义格式,
PROCEDURE NAME PROC ATTRIBUTE
┇
PROCEDURE NAME ENDP
1.子程序名
2.属性
NEAR
FAR。
6.2.2 子程序的调用和返回
1.CALL指令
2.RET指令
6.2.3 现场保护与现场恢复
1.现场保护与现场恢复的原因
2.现场保护与现场恢复的实现
(1)PUSH/POP
(2)PUSHA/POPA
(3)PUSHAD/POPAD
6.3 子程序的参数传送
6.3.1 通过寄存器传送参数
【例6-3】十进制到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。
6.3.2 直接参数传递若子程序和调用程序在同一源文件(同一程序模块)中,则子程序可直接访问模块中的变量,进行参数传递。
【例6-4】主程序MAIN和子程序PROADD在同一源文件中,要求用子程序PROADD累加数组中的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元中去。在这里,子程序PROADD直接访问模块的数据区。
6.3.3,通过地址表传递参数地址这种方法是在主程序中建立一个地址表,把要传送给子程序的参数都存放在地址表中,然后把地址表的首地址通过寄存器BX传送到子程序中去。子程序通过地址表取得所需参数,并把结果存入指定的存储单元中去。
例6-4 采用通过地址表传送参数方法的程序实现通过堆栈传送参数或参数地址此方法是在主程序里把参数地址保存到堆栈中,在子程序里从堆栈中取出参数以达到传送参数的目的。
例6-4 采用通过堆栈传送参数地址法的程序实现。
6.3.5 增强功能的子程序定义伪操作
从MASM5.1版开始为用户提供了增强功能的子程序定义伪操作,其格式为:
PROCNAME PROC [ATTRIBUTES FIELD][USES REGISTER LIST][,PARAMETER FIELD]
┇
PROCNAME ENDP
1.属性字段
2.USES字段
3.参数字段
【例6-5】用增强功能的子程序定义伪操作的程序实现例6-4
6.4 子程序的嵌套与递归
6.4.1 子程序的嵌套
1.子程序的嵌套
2.嵌套深度。
图6.5表示了嵌套深度为2时的子程序嵌套情况。
图6.5 子程序的嵌套
【例6-7】设从BUF开始存放若干无符号字节数据,找出其中的最小值并以16进制形式输出。
子程序的调用
1.递归的概念
2.递归的特点
【例6-8】求自然数N(N>=1)的阶乘
8.参考资料:《IBM-PC汇编语言程序设计》沈美明
9.作业:P189 习题6
10.本章小结:
本部分要求理解性学习和应用,不要死记硬背,重点掌握子程序结构的应用环境和具体用法,以达到对汇编程序设计的优化。
1.教学目的:掌握微型汇编语言程序分析和设计方法
2.教学要求:
熟悉汇编语言程序设计的基本步骤。
掌握程序流程图的使用,会利用其分析问题。
掌握汇编语言的顺序、分支、循环程序的设计。
了解实模式下80386及其后继机型的汇编语言的程序设计
3.教学重点:
①利用流程图分析问题。
②顺序、分支、循环程序的设计。
4.掌握难点:
①分支程序设计
②循环程序设计
5.教学进程安排:P170~190
6.教学方法:
课堂讲授
7.教学内容摘要:
6.1 子程序的概念
6.1.1 子程序概念
图6.1 主程序与子程序间的关系把可以多次调用、能够完成特定操作功能的程序段编写成独立的程序模块称为子程序,又称其为过程。主程序与子程序之间的关系如图6.1所示。
6.1.2,子程序特性
1.重复性
2.通用性
3.可浮动性
4.可递归和可重入性
6.2 子程序结构形式与操作
6.2.1 子程序定义格式,
PROCEDURE NAME PROC ATTRIBUTE
┇
PROCEDURE NAME ENDP
1.子程序名
2.属性
NEAR
FAR。
6.2.2 子程序的调用和返回
1.CALL指令
2.RET指令
6.2.3 现场保护与现场恢复
1.现场保护与现场恢复的原因
2.现场保护与现场恢复的实现
(1)PUSH/POP
(2)PUSHA/POPA
(3)PUSHAD/POPAD
6.3 子程序的参数传送
6.3.1 通过寄存器传送参数
【例6-3】十进制到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。
6.3.2 直接参数传递若子程序和调用程序在同一源文件(同一程序模块)中,则子程序可直接访问模块中的变量,进行参数传递。
【例6-4】主程序MAIN和子程序PROADD在同一源文件中,要求用子程序PROADD累加数组中的所有元素,并把和(不考虑溢出的可能性)送到指定的存储单元中去。在这里,子程序PROADD直接访问模块的数据区。
6.3.3,通过地址表传递参数地址这种方法是在主程序中建立一个地址表,把要传送给子程序的参数都存放在地址表中,然后把地址表的首地址通过寄存器BX传送到子程序中去。子程序通过地址表取得所需参数,并把结果存入指定的存储单元中去。
例6-4 采用通过地址表传送参数方法的程序实现通过堆栈传送参数或参数地址此方法是在主程序里把参数地址保存到堆栈中,在子程序里从堆栈中取出参数以达到传送参数的目的。
例6-4 采用通过堆栈传送参数地址法的程序实现。
6.3.5 增强功能的子程序定义伪操作
从MASM5.1版开始为用户提供了增强功能的子程序定义伪操作,其格式为:
PROCNAME PROC [ATTRIBUTES FIELD][USES REGISTER LIST][,PARAMETER FIELD]
┇
PROCNAME ENDP
1.属性字段
2.USES字段
3.参数字段
【例6-5】用增强功能的子程序定义伪操作的程序实现例6-4
6.4 子程序的嵌套与递归
6.4.1 子程序的嵌套
1.子程序的嵌套
2.嵌套深度。
图6.5表示了嵌套深度为2时的子程序嵌套情况。
图6.5 子程序的嵌套
【例6-7】设从BUF开始存放若干无符号字节数据,找出其中的最小值并以16进制形式输出。
子程序的调用
1.递归的概念
2.递归的特点
【例6-8】求自然数N(N>=1)的阶乘
8.参考资料:《IBM-PC汇编语言程序设计》沈美明
9.作业:P189 习题6
10.本章小结:
本部分要求理解性学习和应用,不要死记硬背,重点掌握子程序结构的应用环境和具体用法,以达到对汇编程序设计的优化。