欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    汇编语言程序设计第9章子程序设计.ppt

    • 资源ID:80489064       资源大小:269.13KB        全文页数:28页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    汇编语言程序设计第9章子程序设计.ppt

    网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学8086/80888086/8088和和ARMARM核核汇编语言程序设计汇编语言程序设计第第9 9章章 子程序设计子程序设计 教学重点教学重点:子程序设计方法子程序设计方法2/18/20231第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.3 9.3 子程序嵌套与递归子程序嵌套与递归 第第9 9章章 子程序设计子程序设计9.1 9.1 子程序设计方法子程序设计方法 9.4 9.4 子程序库子程序库2/18/20232第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 子子程程序序又又称称为为过过程程,是是能能完完成成特特定定功功能能有有一一定定通通用用性性的的程序段,在需要时能被其它程序调用。程序段,在需要时能被其它程序调用。调调用用子子程程序序的的程程序序常常称称为为主主程程序序。一一般般把把源源程程序序中中反反复复出出现现的的程程序序段段或或常常用用的的功功能能独独立立的的程程序序段段设设计计成成子子程程序序供供用用户使用。户使用。这这样样可可以以简简化化源源程程序序结结构构、节节省省目目标标程程序序的的存存储储空空间间,提提高高程程序序设设计计的的效效率率。子子程程序序结结构构也也是是模模块块化化程程序序设设计计的的基基础。础。本本章章主主要要介介绍绍子子程程序序的的定定义义、子子程程序序调调用用和和返返回回、子子程程序的序的参数传递参数传递以及以及子程序库子程序库等知识。等知识。9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 2/18/20233第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义子程序的定义是由过程定义伪指令子程序的定义是由过程定义伪指令PROCPROC和和ENDPENDP实现,格式如下:实现,格式如下:过程名过程名 PROCPROCNEAR|FARNEAR|FAR ;过程体;过程体过程名过程名 ENDPENDPNEAR NEAR 属性的过程只能被相同代码段的其他程序调用,属性的过程只能被相同代码段的其他程序调用,FAR FAR 属性的过程可以被不同代码段的程序调用。属性的过程可以被不同代码段的程序调用。(1 1)子程序和主程序子程序和主程序在同一个代码段在同一个代码段中,则子程序定义为中,则子程序定义为NEARNEAR属性。属性。(2 2)子程序和主程序子程序和主程序不在同一个代码段不在同一个代码段中,则子程序定义为中,则子程序定义为FARFAR属性。属性。(3 3)主程序主程序通常定义为通常定义为FARFAR属性,这是因为主程序被看作属性,这是因为主程序被看作DOSDOS调用的一个调用的一个子程序,以便执行完返回子程序,以便执行完返回DOSDOS。2/18/20234第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学 9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.1 9.1.1 子程序的定义子程序的定义 子程序可以放在代码段主程序开始执行之前的位置,也可子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。放在代码段的末尾主程序执行终止后的位置。为了便于其他程序员能正确使用子程序,在编写子程序为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明时,还要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容:信息一般包括以下内容:(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 编写一个子程序,从键盘输入一位十进制数。编写一个子程序,从键盘输入一位十进制数。;子程序名:;子程序名: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.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 9.1.2 9.1.2 子程序调用与返回子程序调用与返回 子程序调用与返回由子程序调用与返回由CALLCALL和和RETRET指令实现。指令实现。子程序调用指令首先把子程序调用指令首先把子程序的返回地址(即子程序的返回地址(即CALLCALL指令的下一条指令的地址)压入堆栈指令的下一条指令的地址)压入堆栈,然后,然后转移到子程转移到子程序的入口地址执行子程序序的入口地址执行子程序。根据子程序和主程序是否在同一代码段,分为根据子程序和主程序是否在同一代码段,分为段内段内调用调用和和段间调用段间调用。子程序和主程序在同一个代码段中子程序和主程序在同一个代码段中称称为为段内调用段内调用;子程序和主程序不在同一个代码段中子程序和主程序不在同一个代码段中,称,称为为段间调用段间调用。子程序返回指令负责把压入栈区的返回地址弹出送子程序返回指令负责把压入栈区的返回地址弹出送IPIP或或CSIPCSIP,实现返回主程序继续往下执行。与子程序,实现返回主程序继续往下执行。与子程序的段内调用和段间调用相对应,子程序的返回也分为段的段内调用和段间调用相对应,子程序的返回也分为段内返回和段间返回。内返回和段间返回。2/18/20237第第1章章 汇编语言基础知识汇编语言基础知识 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/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 endscode2 segmentsuba proc far retsuba endpcode2 ends2/18/20239第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 寄存器内容的保护与恢复寄存器内容的保护与恢复 通常主程序和子程序是分别编制的,所以它们可能会使通常主程序和子程序是分别编制的,所以它们可能会使用同一个寄存器。如果主程序中某个寄存器的内容在调用用同一个寄存器。如果主程序中某个寄存器的内容在调用子程序后还要用,而子程序又恰好使用了同一个寄存器,子程序后还要用,而子程序又恰好使用了同一个寄存器,当子程序修改了寄存器的内容后,返回到主程序时,该寄当子程序修改了寄存器的内容后,返回到主程序时,该寄存器的内容也就不会是调用子程序前的内容,这样,常常存器的内容也就不会是调用子程序前的内容,这样,常常会导致调用程序的出错。为此,会导致调用程序的出错。为此,编写子程序时,在一进入编写子程序时,在一进入子程序后,就把它所用到的寄存器内容压进栈,在返回前,子程序后,就把它所用到的寄存器内容压进栈,在返回前,再把它们弹出栈再把它们弹出栈。为什么寄存器的保护与恢复?为什么寄存器的保护与恢复?2/18/202310第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 9.1 9.1 子程序设计方法子程序设计方法子程序设计方法子程序设计方法 寄存器内容的保护与恢复寄存器内容的保护与恢复例如:若子程序例如:若子程序例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DXDX的值,则的值,则的值,则的值,则 可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。PROGPROCPUSHPUSHAXAXPUSH PUSH BX BX PUSH PUSHCXCX;保护现场;保护现场;保护现场;保护现场PUSHPUSHDXDX POPPOPDXDXPOPPOPCXCXPOPPOPBXBX;恢复现场恢复现场恢复现场恢复现场POPPOPAXAXRET;返回断点处返回断点处PROCENDP注意注意:堆栈堆栈“先进后先进后出出”的操作特点,恢的操作特点,恢复寄存器的顺序不能复寄存器的顺序不能搞错搞错。2/18/202311第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 用寄存器传递参数用寄存器传递参数优点:优点:直接、简便,只要把参数存放在约定的寄存器中就行了。直接、简便,只要把参数存放在约定的寄存器中就行了。缺点:缺点:适用于传递参数较少的情况。适用于传递参数较少的情况。例例9.3 9.3 从键盘输入一组字符,直到从键盘输入一组字符,直到“0”“0”为止。编一子程序,完为止。编一子程序,完成当输入是小写字母时,则修改为大写字母。输入的字符存放成当输入是小写字母时,则修改为大写字母。输入的字符存放在在stringstring为首址的存储单元中。为首址的存储单元中。参数可以增加子程序的灵活性和通用性。参数可以增加子程序的灵活性和通用性。调用程序传送给子程序的参数称为入口参数,子程序返调用程序传送给子程序的参数称为入口参数,子程序返回给调用程序的结果称为出口参数。回给调用程序的结果称为出口参数。2/18/202312第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 用寄存器传递参数用寄存器传递参数;主程序;主程序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存放输入的字符存放输入的字符;出口参数:;出口参数: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 用存储单元传递参数用存储单元传递参数 这种方法是使用存储单元传递参数的,即主这种方法是使用存储单元传递参数的,即主程序在存储单元建立一个参数表,存放子程序所程序在存储单元建立一个参数表,存放子程序所要的参数,在主程序中将该参数表首地址传送给要的参数,在主程序中将该参数表首地址传送给子程序,子程序通过参数表取得所需参数,并把子程序,子程序通过参数表取得所需参数,并把结果也存放到指定存储单元中。结果也存放到指定存储单元中。优点:优点:适合于传递参数较多的情况。适合于传递参数较多的情况。第十六讲第十六讲第十六讲第十六讲2/18/202314第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.2 9.2.2 用存储单元传递参数用存储单元传递参数 例例9.49.4使用存储单元传递参数的方法来实现例使用存储单元传递参数的方法来实现例9.39.3。;主程序主程序datasegment stringdb100 dup(?)Lentdw?dataendscodesegmentassumecs:code,ds:datamain proc far start::push dsmov ax,,0push axmovax,datamovds,axmovcx,0movdi,offset string again:movah,1int21hcmpal,0jenext movdi,alincdiinccxjmpagain next:mov lent,cxleabx,stringcallstob1ret2/18/202315第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.2 9.2.2 用存储单元传递参数用存储单元传递参数;子程序名:;子程序名:stob1;功能:将小写字母修改为大写字母;功能:将小写字母修改为大写字母;入口参数:;入口参数:bx存放数据存储单元首址存放数据存储单元首址;出口参数:修改后的字符存回原存储单元中;出口参数:修改后的字符存回原存储单元中stob1procmovcx,lent again1:moval,bxcmpal,61hjbnext1cmpal,7ahjanext1subal,20hmovbx,al next1:incbxdeccxjnzagain1retstob1endpmainendpcodeends end start2/18/202316第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.3 9.2.3 用堆栈传递参数用堆栈传递参数 用堆栈传递入口参数时,要在调用子程序前把有关参数用堆栈传递入口参数时,要在调用子程序前把有关参数依次压栈,子程序从堆栈中取得入口参数;用堆栈传递出口依次压栈,子程序从堆栈中取得入口参数;用堆栈传递出口参数时,要在子程序返回前,把有关参数依次压栈,主程序参数时,要在子程序返回前,把有关参数依次压栈,主程序就可以从堆栈中取到出口参数。就可以从堆栈中取到出口参数。优点:优点:适合于传递参数较多的情况。适合于传递参数较多的情况。注意注意:避免因堆栈操作而造成子程序不能正确返回的错误。避免因堆栈操作而造成子程序不能正确返回的错误。2/18/202317第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.3 9.2.3 用堆栈传递参数用堆栈传递参数 例例9.5编一子程序:求有符号字数组编一子程序:求有符号字数组array中元素的最小值。数组元素的个数中元素的最小值。数组元素的个数存放在存放在cont字单元中。字单元中。Data segmentarray dw 100,66,-1,88,20cont dw5min dw?data endsstack segmentdw 128 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart:movax,datamov ds,axmov ax,offset array push ax;数组偏移地址进栈;数组偏移地址进栈movax,contpush ax;元素个数进栈;元素个数进栈callfindminmovmin,ax;保存出口参数;保存出口参数movah,4chint21h2/18/202318第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 9.2 9.2 子程序的参数传递子程序的参数传递 9.2.3 9.2.3 用堆栈传递参数用堆栈传递参数 ;子程序名:;子程序名:findmin;功能:求有符号字数组中元素的最小值;功能:求有符号字数组中元素的最小值;入口参数:数组首地址和元素个数在堆栈中;入口参数:数组首地址和元素个数在堆栈中;出口参数:;出口参数:ax中存放最小值中存放最小值findminprocpushbpmovbp,sp;为取参数作准备;为取参数作准备pushbxpushcxmovbx,bp+6;从堆栈中取数组首地址送;从堆栈中取数组首地址送bxmovcx,bp+4;从堆栈中取元素个数送;从堆栈中取元素个数送cxdeccxmovax,bx;取出第一个元素给;取出第一个元素给AXagain:addbx,2cmpbx,ax;与下一个数据比较;与下一个数据比较jgnextmovax,bxnext:loopagainpopcxpopbxpopbpretfminendpcodeendsendstart2/18/202319第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.3 9.3 9.3 9.3 子程序嵌套与递归子程序嵌套与递归 一个子程序也可以作为调用程序去调用另一个子程序,称为子程序一个子程序也可以作为调用程序去调用另一个子程序,称为子程序嵌套。嵌套。递归子程序:如果一个子程序调用的是子程序的本身,就是递归递归子程序:如果一个子程序调用的是子程序的本身,就是递归子程序。子程序。例例9.69.6编程计算编程计算n!n!(设(设0n60n6)分析:求分析:求n!n!的递归定义为的递归定义为:1 n=0n!=n*(n-1)!n 02/18/202320第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.3 9.3 9.3 9.3 子程序嵌套与递归子程序嵌套与递归 Data segmentNum db 3Result dw?Data endsStack segment para stack stack db 100 dup(?)Stack endsCode segment assume cs:code,ds:data,ss:stackMain proc farMain proc farBegin:push ds xor ax,ax push ax mov ax,data mov ds,ax2/18/202321第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.3 9.3 9.3 9.3 子程序嵌套与递归子程序嵌套与递归 mov ah,0 mov al,num call factorcall factor mov result,ax retMain endpMain endpFactor procFactor proc push ax sub ax,1 jne f_cont pop ax jmp returnf_cont:call factorcall factor pop cx mul clreturn:retfactor endpfactor endpCode ends end beginIP1Mov result,ax 地址地址3IP2Pop cx 地址地址2IP3Pop cx 地址地址1ax=1IP POP CX 地址地址cx=2ax*cx=1*2IP POP CX 地址地址cx=3ax*cx=1*2*3IP Mov result,ax 地址地址2/18/202322第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.4 9.4 子程序库子程序库 开发大型应用程序时,通常把复杂的程序分成很多功能独开发大型应用程序时,通常把复杂的程序分成很多功能独立的模块,分别编写成子程序,对各个子程序模块单独进行汇立的模块,分别编写成子程序,对各个子程序模块单独进行汇编产生相应的目标模块(编产生相应的目标模块(OBJOBJ文件),最后再用连接程序把它们文件),最后再用连接程序把它们连接起来,形成一个完整的可执行程序。采用这种模块化程序连接起来,形成一个完整的可执行程序。采用这种模块化程序设计方法,程序不但结构清晰,也便于调试。设计方法,程序不但结构清晰,也便于调试。采用模块化程序设计,各模块之间会存在着采用模块化程序设计,各模块之间会存在着相互调用相互调用,即,即一个模块会引用在另一个模块中定义的一个模块会引用在另一个模块中定义的标识符标识符(包括变量、标(包括变量、标号、过程名等)。号、过程名等)。标识符标识符有两种:有两种:1 1)在本模块中定义,供本模块使用的标识符称为)在本模块中定义,供本模块使用的标识符称为局部标识符局部标识符;2 2)在一个模块中定义,而又在另一个模块中引用的标识符称为)在一个模块中定义,而又在另一个模块中引用的标识符称为外部标识符外部标识符。2/18/202323第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.4 9.4 子程序库子程序库为了解决各模块间标识符的交叉访问,汇编语言提供了二条为了解决各模块间标识符的交叉访问,汇编语言提供了二条伪指令伪指令PUBLICPUBLIC和和EXTRNEXTRN。(1 1)伪指令)伪指令PUBLICPUBLIC说明:当前模块中哪些标识符是能被其它模块引用的外部标说明:当前模块中哪些标识符是能被其它模块引用的外部标识符。其格式如下:识符。其格式如下:PUBLICPUBLIC 标识符,标识符,标识符,标识符,;定义标识符的模块使用;定义标识符的模块使用(2 2)伪指令)伪指令EXTRNEXTRN说明:在当前模块所使用的标识符中,哪些标识符是已在其说明:在当前模块所使用的标识符中,哪些标识符是已在其它模块中被定义为指定类型的标识符。它模块中被定义为指定类型的标识符。格式如下:格式如下:EXTRNEXTRN 标识符:类型,标识符:类型,标识符:类型,标识符:类型,;调用标识;调用标识符的模块使用符的模块使用2/18/202324第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.4 9.4 子程序库子程序库例例9.7 9.7 从键盘输入一个数从键盘输入一个数n n((0n6)(0n6),求,求n!n!,并输出结果。,并输出结果。把例把例9.19.1、例、例9.29.2例和例和9.69.6的子程序编写成子程序模块,供主程的子程序编写成子程序模块,供主程序调用。序调用。;子程序;子程序stdin.asmpublicstdincode segmentstdin procfar;例;例9.1中的输入子程序中的输入子程序stdinstdin endpcode endsend;子程序;子程序dispax.asmpublicdispaxdata segmentdb4dup(?),0ah,0dh,$data endscode segmentdispaxprocfar;例;例9.2中的输出子程序中的输出子程序dispaxdispaxendpcode endsend2/18/202325第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.4 9.4 子程序库子程序库;子程序;子程序fact.asmpublicfactcode segmentfactprocfar;例例9.6中求中求n!子程序子程序factfactendpcode endsend;主程序;主程序main.asmextrn stdin:far,fact:far,dispax:farStacksegmentDw128dup(0)StackendsCode segmentAssumecs:code,ss:stackStart:callstdinmov ah,0call factcall dispaxmov ah,4chInt 21hcode endsend start2/18/202326第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计网络工程系网络工程系 汇编语言程序设计汇编语言程序设计汇编语言程序设计汇编语言程序设计安徽工业大学9.4 9.4 子程序库子程序库 用汇编程序把它们分别汇编成目标文件用汇编程序把它们分别汇编成目标文件stdin.objstdin.obj、dispax.objdispax.obj和和fact.objfact.obj。当子程序模块很多时,可以把它们统一管理起来,存入一个当子程序模块很多时,可以把它们统一管理起来,存入一个或多个子程序库中。库文件可以把它看成是子程序的集合。或多个子程序库中。库文件可以把它看成是子程序的集合。MASMMASM系统提供了库管理程序系统提供了库管理程序LIB.EXELIB.EXE,可以建立、组织和维护子,可以建立、组织和维护子程序库。程序库。2/18/202327第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计教学要求教学要求掌握子程序设计方法掌握子程序设计方法熟悉常见程序设计问题:熟悉常见程序设计问题:子程序要利用过程定义伪指令声明子程序要利用过程定义伪指令声明子程序最后利用子程序最后利用RET指令返回主程序,主程序执行指令返回主程序,主程序执行CALL指令指令调用子程序调用子程序(3)子程序开始应该保护使用到的寄存器内容,子程序返回前相应子程序开始应该保护使用到的寄存器内容,子程序返回前相应进行恢复进行恢复(4)处理好子程序与主程序间的参数传递问题处理好子程序与主程序间的参数传递问题作业作业:P147:2、4、82/18/202328第第1章章 汇编语言基础知识汇编语言基础知识 9章章 子程序的设计子程序的设计

    注意事项

    本文(汇编语言程序设计第9章子程序设计.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开