汇编语言程序设计 第9章_子程序设计(精品).ppt
《汇编语言程序设计 第9章_子程序设计(精品).ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计 第9章_子程序设计(精品).ppt(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计8086/80888086/8088和和ARMARM核核汇编语言程序设计汇编语言程序设计第第9 9章章 子程序设计子程序设计 2/7/20231第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.2 9.2 子程序的参数传递子程序的参数传递 9.3 9.3 子程序嵌套与递归子程序嵌套与递归 第第9 9章章 子程序设计子程序设计9.1 9.1 子程序设计方法子程序设计方法 9.4 9.4 子程序库子程序
2、库2/7/20232第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 子子程程序序又又称称为为过过程程,是是能能完完成成特特定定功功能能有有一一定定通通用用性性的的程程序序段段,在在需需要要时时能能被被其其它它程程序序调调用用。调调用用子子程程序序的的程程序序常常称称为为主主程程序序。一一般般把把源源程程序序中中反反复复出出现现的的程程序序段段或或常常用用的的功功能独立的程序段设计成子程序供用户使用。能独立的程序段设计成子程序供用户使用。这这样样可可以以简简化化源源程程序序结结构构、节节省省目目标标程程
3、序序的的存存储储空空间间,提提高高程程序序设设计计的的效效率率。子子程程序序结结构构也也是是模模块块化化程程序序设设计计的的基基础础。本本章章主主要要介介绍绍子子程程序序的的定定义义、子子程程序序调调用用和和返返回回、子子程程序的序的参数传递参数传递以及以及子程序库子程序库等知识。等知识。9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 2/7/20233第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法
4、子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义子程序的定义是由过程定义伪指令子程序的定义是由过程定义伪指令PROCPROC和和ENDPENDP实现,格式如下:实现,格式如下:过程名过程名 PROCPROCNEAR|FARNEAR|FAR;过程体;过程体过程名过程名 ENDPENDPNEARNEAR属性的过程只能被相同代码段的其他程序调用,属性的过程只能被相同代码段的其他程序调用,FARFAR属性的过程可以属性的过程可以被不同代码段的程序调用。被不同代码段的程序调用。(1 1)子程序和主程序子程序和主程序在同一个代码段在同一个代码段中,则子程序定义为中,则子程序定
5、义为NEARNEAR属性。属性。(2 2)子程序和主程序子程序和主程序不在同一个代码段不在同一个代码段中,则子程序定义为中,则子程序定义为FARFAR属性。属性。(3 3)主程序主程序通常定义为通常定义为FARFAR属性,这是因为主程序被看作属性,这是因为主程序被看作DOSDOS调用的一个调用的一个子程序,以便执行完返回子程序,以便执行完返回DOSDOS。2/7/20234第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计
6、方法 9.1.1 9.1.1 子程序的定义子程序的定义MAIN PROC FAR CALL SUBR1 RETMAIN ENDP;SUBR1 PROC NEAR RETSUBR1 ENDPMAIN PROC FAR CALL SUBR1 RETSUBR1 PROC NEAR RETSUBR1 ENDPMAIN ENDP段内定义段内定义子程序可以放在代码段主程序开始执行子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主之前的位置,也可放在代码段的末尾主程序执行终止后的位置。程序执行终止后的位置。P121 2/7/20235第第9章章 子程序的设计子程序的设计 计算机科学与技术系
7、计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计SEGX SEGMENT SUBT PROC FAR RETSUBT ENDP CALL SUBT SEGX ENDS;SEGY SEGMENT CALL SUBT SEGY ENDS9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义段间定义段间定义2/7/20236第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 9.1 9.1 9
8、.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义 为了便于其他程序员能正确使用子程序,在编写子程序为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明时,还要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容:信息一般包括以下内容:(1 1)子程序名子程序名(2 2)功能描述功能描述(3 3)入口和出口参数入口和出口参数(4 4)调用注意事项和说明等调用注意事项和说明等2/7/20237第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系
9、汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义例例9.19.1 编写一个子程序,从键盘输入一位十进制数。编写一个子程序,从键盘输入一位十进制数。;子程序名:;子程序名:stdinstdin;功能:完成从键盘输入一位十进制数;功能:完成从键盘输入一位十进制数;入口参数:等待键盘输入;入口参数:等待键盘输入;出口参数:;出口参数:alal中存放输入的数值中存放输入的数值stdinproc mov ah,1 int21h cmpal,30h j
10、l next cmp al,39h jg next and al,0fhnext:retstdin endp2/7/20238第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 子程序调用与返回由子程序调用与返回由CALLCALL和和RETRET指令实现。指令实现。子程序调用指令首先把子程序调用指令首先把子程序的返回地址(即子程序的返回地址(即CALLCALL指
11、指令的下一条指令的地址)压入堆栈令的下一条指令的地址)压入堆栈,然后,然后转移到子程序转移到子程序的入口地址执行子程序的入口地址执行子程序。根据子程序和主程序是否在同。根据子程序和主程序是否在同一代码段,分为一代码段,分为段内调用段内调用和和段间调用段间调用。子程序和主程序子程序和主程序在同一个代码段中在同一个代码段中称为称为段内调用段内调用;子程序和主程序不在子程序和主程序不在同一个代码段中同一个代码段中,称为,称为段间调用段间调用。子程序返回指令负责。子程序返回指令负责把压入栈区的返回地址弹出送把压入栈区的返回地址弹出送IPIP或或CSIPCSIP,实现返回主,实现返回主程序继续往下执行。
12、与子程序的段内调用和段间调用相程序继续往下执行。与子程序的段内调用和段间调用相对应,子程序的返回也分为段内返回和段间返回。对应,子程序的返回也分为段内返回和段间返回。2/7/20239第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 当子程序和主程序在同一个代码段中,子程序的定义和调用如下图当子程序和主程序在同一个代码段中,子程序的定义和调用如下图:code
13、segmentmain proc far call suba retmain endpsuba proc near retsuba endpcode ends2/7/202310第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 当子程序和主程序不在同一个代码段中,子程序的定义和调用如下图当子程序和主程序不在同一个代码段中,子程序的定义和调用如下图:code1
14、segmentmain proc far call far ptr suba retmain endpcode1 endscode2 segmentsuba proc far retsuba endpcode2 ends2/7/202311第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.39.1.3寄存器内容的保护与恢复寄存器内容的保护与恢复 通常主程序和子程序是分别编制的,所以它们可能会使通常主程序和子程
15、序是分别编制的,所以它们可能会使用同一个寄存器。如果主程序中某个寄存器的内容在调用用同一个寄存器。如果主程序中某个寄存器的内容在调用子程序后还要用,而子程序又恰好使用了同一个寄存器,子程序后还要用,而子程序又恰好使用了同一个寄存器,当子程序修改了寄存器的内容后,返回到主程序时,该寄当子程序修改了寄存器的内容后,返回到主程序时,该寄存器的内容也就不会是调用子程序前的内容,这样,常常存器的内容也就不会是调用子程序前的内容,这样,常常会导致调用程序的出错。为此,编写子程序时,在一进入会导致调用程序的出错。为此,编写子程序时,在一进入子程序后,就把它所用到的寄存器内容压进栈,在返回前,子程序后,就把它
16、所用到的寄存器内容压进栈,在返回前,再把它们弹出栈。再把它们弹出栈。为什么寄存器需要保护与恢复?为什么寄存器需要保护与恢复?2/7/202312第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.39.1.3寄存器内容的保护与恢复寄存器内容的保护与恢复例如:若子程序例如:若子程序例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DX
17、DX的值,则的值,则的值,则的值,则 可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。PROGPROCPUSHPUSHAXAXPUSH PUSH BX BX PUSH PUSHCXCX;保护现场保护现场保护现场保护现场PUSHPUSHDXDX POPPOPDXDXPOPPOPCXCXPOPPOPBXBX;恢复现场恢复现场恢复现场恢复现场POPPOPAXAXRET;返回断点处返回断点处PROCENDP注意注意:堆栈堆栈“先进后先进后出出”的操作特点,恢的操作特点,恢复寄存器的顺序不能复寄存器的顺序不能搞错搞错。2/7/202
18、313第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.19.2.1用寄存器传递参数用寄存器传递参数优点:优点:直接、简便,只要把参数存放在约定的寄存器中就行了。直接、简便,只要把参数存放在约定的寄存器中就行了。缺点:缺点:适用于传递参数较少的情况。适用于传递参数较少的情况。例例9.39.3从键盘输入一组字符,直到从键盘输入一组字符,直到“0”0”为止。编一子程序,完为止。编一子程序,完成当输入是小写字母时,则修改为大写字母。输入的
19、字符存放成当输入是小写字母时,则修改为大写字母。输入的字符存放在在stringstring为首址的存储单元中。为首址的存储单元中。参数可以增加子程序的灵活性和通用性。调用程序传送参数可以增加子程序的灵活性和通用性。调用程序传送给子程序的参数称为入口参数,子程序返回给调用程序的结给子程序的参数称为入口参数,子程序返回给调用程序的结果称为出口参数。果称为出口参数。2/7/202314第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计 常用的常用的DOS系统功能调用系统功能调用1单字符输入(单字符输入(1号调用
20、)号调用)2单字符显示(单字符显示(2号调用)号调用)3打印输出(打印输出(5号调用)号调用)4结束调用(结束调用(4CH号调用)号调用)5显示字符串(显示字符串(9号调用)号调用)6字符串输入(字符串输入(10号调用)号调用)2/7/202315第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计1单字符输入(单字符输入(1号调用)号调用)格式:格式:MOVAH,1 INT 21H功能:从键盘输入字符的功能:从键盘输入字符的ASCII码送入寄存器码送入寄存器AL中,并中,并送显示器显示。送显示器显示。2单
21、字符显示(单字符显示(2号调用)号调用)格式:格式:MOV DL,待显示字符的待显示字符的ASCII码码 MOV AH,2 INT 21H功能:将功能:将DL寄存器中的字符送显示器显示寄存器中的字符送显示器显示.2/7/202316第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计3打印输出(打印输出(5号调用)号调用)格式格式:MOVDL,待打印字符的待打印字符的ASCII码码MOVAH,5INT21H功能:将功能:将DL寄存器中的字符送打印机打印。寄存器中的字符送打印机打印。4结束调用(结束调用(4C
22、H号调用)号调用)格式:格式:MOVAH,4CH INT21H功能:终止当前程序并返回调用程序。功能:终止当前程序并返回调用程序。2/7/202317第第9章章 子程序的设计子程序的设计 计算机科学与技术系计算机科学与技术系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计5显示字符串(显示字符串(9号调用)号调用)格式:格式:LEA DX,待显示字符串首偏移地址待显示字符串首偏移地址 MOV AH,9 INT21H功能:将当前数据区中以功能:将当前数据区中以结尾的字符串送显示器显示。结尾的字符串送显示器显示。6字符串输入(字符串输入(10号调用)号调用)格式:格式:LEA D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言程序设计 第9章_子程序设计精品 汇编语言 程序设计 子程序 设计 精品
限制150内