汇编语言程序设计第9章子程序设计.ppt
《汇编语言程序设计第9章子程序设计.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计第9章子程序设计.ppt(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学8086/80888086/8088和和ARMARM核核汇编语言程序设计汇编语言程序设计第第9 9章章 子程序设计子程序设计 教学重点教学重点:子程序设计方法子程序设计方法2/18/20231第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.3 9.3 子程序嵌套与递归子程序嵌套与递归 第第9 9章章 子程序设计子程序设
2、计9.1 9.1 子程序设计方法子程序设计方法 9.4 9.4 子程序库子程序库2/18/20232第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 子子程程序序又又称称为为过过程程,是是能能完完成成特特定定功功能能有有一一定定通通用用性性的的程序段,在需要时能被其它程序调用。程序段,在需要时能被其它程序调用。调调用用子子程程序序的的程程序序常常称称为为主主程程序序。一一般般把把源源程程序序中中反反复复出出现现的的程程序序段段或或常常用用的的功功能能独独立立的的程程序
3、序段段设设计计成成子子程程序序供供用用户使用。户使用。这这样样可可以以简简化化源源程程序序结结构构、节节省省目目标标程程序序的的存存储储空空间间,提提高高程程序序设设计计的的效效率率。子子程程序序结结构构也也是是模模块块化化程程序序设设计计的的基基础。础。本本章章主主要要介介绍绍子子程程序序的的定定义义、子子程程序序调调用用和和返返回回、子子程程序的序的参数传递参数传递以及以及子程序库子程序库等知识。等知识。9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 2/18/20233第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计
4、网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义子程序的定义是由过程定义伪指令子程序的定义是由过程定义伪指令PROCPROC和和ENDPENDP实现,格式如下:实现,格式如下:过程名过程名 PROCPROCNEAR|FARNEAR|FAR ;过程体;过程体过程名过程名 ENDPENDPNEAR NEAR 属性的过程只能被相同代码段的其他程序调用,属性的过程只能被相同代码段的其他程序调用,FAR FAR 属性
5、的过程可以被不同代码段的程序调用。属性的过程可以被不同代码段的程序调用。(1 1)子程序和主程序子程序和主程序在同一个代码段在同一个代码段中,则子程序定义为中,则子程序定义为NEARNEAR属性。属性。(2 2)子程序和主程序子程序和主程序不在同一个代码段不在同一个代码段中,则子程序定义为中,则子程序定义为FARFAR属性。属性。(3 3)主程序主程序通常定义为通常定义为FARFAR属性,这是因为主程序被看作属性,这是因为主程序被看作DOSDOS调用的一个调用的一个子程序,以便执行完返回子程序,以便执行完返回DOSDOS。2/18/20234第第1章章 汇编语言基础知识汇编语言基础知识 9章章
6、 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义 子程序可以放在代码段主程序开始执行之前的位置,也可子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。放在代码段的末尾主程序执行终止后的位置。为了便于其他程序员能正确使用子程序,在编写子程序为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明时,还
7、要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容:信息一般包括以下内容:(1 1)子程序名子程序名(2 2)功能描述功能描述(3 3)入口和出口参数入口和出口参数(4 4)调用注意事项和说明等调用注意事项和说明等2/18/20235第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义例例9.19.1 编写一个子程序,
8、从键盘输入一位十进制数。编写一个子程序,从键盘输入一位十进制数。;子程序名:;子程序名:stdinstdin;功能:完成从键盘输入一位十进制数;功能:完成从键盘输入一位十进制数;入口参数:等待键盘输入;入口参数:等待键盘输入;出口参数:;出口参数:alal中存放输入的数值中存放输入的数值stdinproc movah,1 int21h cmpal,30h jl next cmp al,39h jg next and al,0fh next:retstdin endp2/18/20236第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程
9、序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 子程序调用与返回由子程序调用与返回由CALLCALL和和RETRET指令实现。指令实现。子程序调用指令首先把子程序调用指令首先把子程序的返回地址(即子程序的返回地址(即CALLCALL指令的下一条指令的地址)压入堆栈指令的下一条指令的地址)压入堆栈,然后,然后转移到子程转移到子程序的入口地址执行子程序序的入口地址执行子程序。根据子程序和主程序是否在同一代码段,分为根据子程序和主程序是
10、否在同一代码段,分为段内段内调用调用和和段间调用段间调用。子程序和主程序在同一个代码段中子程序和主程序在同一个代码段中称称为为段内调用段内调用;子程序和主程序不在同一个代码段中子程序和主程序不在同一个代码段中,称,称为为段间调用段间调用。子程序返回指令负责把压入栈区的返回地址弹出送子程序返回指令负责把压入栈区的返回地址弹出送IPIP或或CSIPCSIP,实现返回主程序继续往下执行。与子程序,实现返回主程序继续往下执行。与子程序的段内调用和段间调用相对应,子程序的返回也分为段的段内调用和段间调用相对应,子程序的返回也分为段内返回和段间返回。内返回和段间返回。2/18/20237第第1章章 汇编语
11、言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 当子程序和主程序在同一个代码段中,子程序的定义和调用如下图当子程序和主程序在同一个代码段中,子程序的定义和调用如下图:code segmentmain proc far call suba retmain endpsuba proc near retsuba endpcode ends2/18
12、/20238第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 当子程序和主程序不在同一个代码段中,子程序的定义和调用如下图当子程序和主程序不在同一个代码段中,子程序的定义和调用如下图:code1 segmentmain proc far call far ptr suba retmain endpcode1 endscode
13、2 segmentsuba proc far retsuba endpcode2 ends2/18/20239第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 寄存器内容的保护与恢复寄存器内容的保护与恢复 通常主程序和子程序是分别编制的,所以它们可能会使通常主程序和子程序是分别编制的,所以它们可能会使用同一个寄存器。如果主程序中某个寄存器的内容在调用用同一个寄存器。如果主程序中某个
14、寄存器的内容在调用子程序后还要用,而子程序又恰好使用了同一个寄存器,子程序后还要用,而子程序又恰好使用了同一个寄存器,当子程序修改了寄存器的内容后,返回到主程序时,该寄当子程序修改了寄存器的内容后,返回到主程序时,该寄存器的内容也就不会是调用子程序前的内容,这样,常常存器的内容也就不会是调用子程序前的内容,这样,常常会导致调用程序的出错。为此,会导致调用程序的出错。为此,编写子程序时,在一进入编写子程序时,在一进入子程序后,就把它所用到的寄存器内容压进栈,在返回前,子程序后,就把它所用到的寄存器内容压进栈,在返回前,再把它们弹出栈再把它们弹出栈。为什么寄存器的保护与恢复?为什么寄存器的保护与恢
15、复?2/18/202310第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 寄存器内容的保护与恢复寄存器内容的保护与恢复例如:若子程序例如:若子程序例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DXDX的值,则的值,则的值,则的值,则 可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采
16、用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。PROGPROCPUSHPUSHAXAXPUSH PUSH BX BX PUSH PUSHCXCX;保护现场;保护现场;保护现场;保护现场PUSHPUSHDXDX POPPOPDXDXPOPPOPCXCXPOPPOPBXBX;恢复现场恢复现场恢复现场恢复现场POPPOPAXAXRET;返回断点处返回断点处PROCENDP注意注意:堆栈堆栈“先进后先进后出出”的操作特点,恢的操作特点,恢复寄存器的顺序不能复寄存器的顺序不能搞错搞错。2/18/202311第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系
17、网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 用寄存器传递参数用寄存器传递参数优点:优点:直接、简便,只要把参数存放在约定的寄存器中就行了。直接、简便,只要把参数存放在约定的寄存器中就行了。缺点:缺点:适用于传递参数较少的情况。适用于传递参数较少的情况。例例9.3 9.3 从键盘输入一组字符,直到从键盘输入一组字符,直到“0”“0”为止。编一子程序,完为止。编一子程序,完成当输入是小写字母时,则修改为大写字母。输入的字符存放成当输入是小写字母时,则修改为大写字母。输入的字符存放在在str
18、ingstring为首址的存储单元中。为首址的存储单元中。参数可以增加子程序的灵活性和通用性。参数可以增加子程序的灵活性和通用性。调用程序传送给子程序的参数称为入口参数,子程序返调用程序传送给子程序的参数称为入口参数,子程序返回给调用程序的结果称为出口参数。回给调用程序的结果称为出口参数。2/18/202312第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 用寄存器传递参数用寄存器传递参数;主程序;主程
19、序Data segment string db 100 dup(?)data endscode segment assume cs:code,ds:data start:mov ax,data mov ds,axmov di,offset stringagain:mov ah,1int 21hcmp al,,0je exitcall stobmov di,alinc dijmp againexit:mov ah,4chint 21h;子程序名:;子程序名:stob;功能:将小写字母修改为大写字母;功能:将小写字母修改为大写字母;入口参数:;入口参数:al存放输入的字符存放输入的字符;出口参数:
20、;出口参数:al存放修改后的字符存放修改后的字符stob proc nearcmp al,61hjb nextcmp al,7ahja nextsub al,20h next:retstob endpcode endsend start 2/18/202313第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.2 9.2.2 用存储单元传递参数用存储单元传递参数 这种方法是使用存储单元传递参数的,即
21、主这种方法是使用存储单元传递参数的,即主程序在存储单元建立一个参数表,存放子程序所程序在存储单元建立一个参数表,存放子程序所要的参数,在主程序中将该参数表首地址传送给要的参数,在主程序中将该参数表首地址传送给子程序,子程序通过参数表取得所需参数,并把子程序,子程序通过参数表取得所需参数,并把结果也存放到指定存储单元中。结果也存放到指定存储单元中。优点:优点:适合于传递参数较多的情况。适合于传递参数较多的情况。第十六讲第十六讲第十六讲第十六讲2/18/202314第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 章子
限制150内