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

上传人:wt****50 文档编号:50061631 上传时间:2018-08-06 格式:PPT 页数:28 大小:281.50KB
返回 下载 相关 举报
汇编语言程序设计 第9章_子程序设计_第1页
第1页 / 共28页
汇编语言程序设计 第9章_子程序设计_第2页
第2页 / 共28页
汇编语言程序设计 第9章_子程序设计_第3页
第3页 / 共28页
汇编语言程序设计 第9章_子程序设计_第4页
第4页 / 共28页
汇编语言程序设计 第9章_子程序设计_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《汇编语言程序设计 第9章_子程序设计》由会员分享,可在线阅读,更多相关《汇编语言程序设计 第9章_子程序设计(28页珍藏版)》请在金锄头文库上搜索。

1、网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学8086/8088和ARM核 汇编语言程序设计第第9 9章章 子程序设计子程序设计 教学重点:子程序设计方法Date1第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.2 子程序的参数传递 9.3 子程序嵌套与递归 第第9 9章章 子程序设计子程序设计9.1 子程序设计方法 9.4 子程序库Date2第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学子程序又称为过程,是能完成特定功能有一定通用性的程序段,在需要时能被其它程序调用。调

2、用子程序的程序常称为主程序。一般把源程序中反复出现的程序段或常用的功能独立的程序段设计成子程序供用 户使用。这样可以简化源程序结构、节省目标程序的存储空间,提高程序设计的效率。子程序结构也是模块化程序设计的基 础。本章主要介绍子程序的定义、子程序调用和返回、子程序的参数传递以及子程序库等知识。9.1 9.1 子程序设计方法子程序设计方法 Date3第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.1 子程序的定义 子程序的定义是由过程定义伪指令PROC和ENDP实现,格式如下 :过程名 P

3、ROCNEAR|FAR;过程体 过程名 ENDPNEAR 属性的过程只能被相同代码段的其他程序调用, FAR 属性的过程可以被不同代码段的程序调用。 (1)子程序和主程序在同一个代码段中,则子程序定义为NEAR属性。 (2)子程序和主程序不在同一个代码段中,则子程序定义为FAR属性。 (3)主程序通常定义为FAR属性,这是因为主程序被看作DOS调用的一个 子程序,以便执行完返回DOS。Date4第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.1 子程序的定义子程序可以放在代码段主程序开始

4、执行之前的位置,也可 放在代码段的末尾主程序执行终止后的位置。为了便于其他程序员能正确使用子程序,在编写子程序 时,还要养成书写子程序说明信息的良好习惯。子程序说明 信息一般包括以下内容:(1)子程序名 (2)功能描述 (3)入口和出口参数 (4)调用注意事项和说明等Date5第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.1 子程序的定义例9.1 编写一个子程序,从键盘输入一位十进制数。 ;子程序名:stdin ;功能:完成从键盘输入一位十进制数 ;入口参数:等待键盘输入 ;出口参数:

5、al中存放输入的数值 stdinprocmovah,1int21hcmpal,30hjl nextcmp al,39hjg nextand al,0fhnext: ret stdin endpDate6第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.2 子程序调用与返回 子程序调用与返回由CALL和RET指令实现。子程序调用指令首先把子程序的返回地址(即CALL 指令的下一条指令的地址)压入堆栈,然后转移到子程 序的入口地址执行子程序。根据子程序和主程序是否在同一代码段,分为段内 调用和

6、段间调用。子程序和主程序在同一个代码段中称 为段内调用;子程序和主程序不在同一个代码段中,称 为段间调用。子程序返回指令负责把压入栈区的返回地址弹出送 IP或CSIP,实现返回主程序继续往下执行。与子程序 的段内调用和段间调用相对应,子程序的返回也分为段 内返回和段间返回。Date7第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.2 子程序调用与返回 当子程序和主程序在同一个代码段中,子程序的定义和调用如下图: code segment main proc farcall subaret

7、 main endpsuba proc nearret suba endp code endsDate8第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.2 子程序调用与返回 当子程序和主程序不在同一个代码段中,子程序的定义和调用如下图: code1 segment main proc farcall far ptr subaret main endp code1 endscode2 segment suba proc farret suba endp code2 endsDate9第1章

8、 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.3寄存器内容的保护与恢复通常主程序和子程序是分别编制的,所以它们可能会使 用同一个寄存器。如果主程序中某个寄存器的内容在调用 子程序后还要用,而子程序又恰好使用了同一个寄存器, 当子程序修改了寄存器的内容后,返回到主程序时,该寄 存器的内容也就不会是调用子程序前的内容,这样,常常 会导致调用程序的出错。为此,编写子程序时,在一进入 子程序后,就把它所用到的寄存器内容压进栈,在返回前 ,再把它们弹出栈。 为什么寄存器的保护与恢复?Date10第1章

9、 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.1 9.1 子程序设计方法子程序设计方法 9.1.3寄存器内容的保护与恢复例如:若子程序例如:若子程序PROGPROG中改变了寄存器中改变了寄存器AXAX,BXBX,CXCX,DXDX的值,则的值,则可采用如下方法保护和恢复现场。可采用如下方法保护和恢复现场。 PROGPROCPUSHPUSHAXAX PUSH PUSH BX BX PUSH PUSHCXCX;保护现场保护现场 PUSHPUSHDXDX POPPOPDXDX POPPOPCXCX POPPOPBXBX;恢复现场恢复现场 POPP

10、OPAXAX RET;返回断点处 PROCENDP注意:堆栈“先进后 出”的操作特点,恢 复寄存器的顺序不能 搞错 。Date11第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.2.1用寄存器传递参数优点:直接、简便,只要把参数存放在约定的寄存器中就行了。 缺点:适用于传递参数较少的情况。 例9.3 从键盘输入一组字符,直到“0”为止。编一子程序,完 成当输入是小写字母时,则修改为大写字母。输入的字符存放 在string为首址的存储单元中。参数可以增加子程序的灵活性和通用性。调用程序传送

11、给子程序的参数称为入口参数,子程序返 回给调用程序的结果称为出口参数。Date12第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.2.1用寄存器传递参数;主程序 Data segmentstring db 100 dup(?) data ends code segmentassume cs:code,ds:datastart: mov ax,datamov ds,ax mov di,offset string again: mov ah,1 int 21h cmp al,,0 je ex

12、it call stob mov di,al inc di jmp again exit: mov ah,4ch int 21h;子程序名:stob ;功能:将小写字母修改为大写字母 ;入口参数:al存放输入的字符 ;出口参数:al存放修改后的字符 stob proc near cmp al,61h jb next cmp al,7ah ja next sub al,20hnext: ret stob endp code ends end start Date13第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传

13、递子程序的参数传递 9.2.2 用存储单元传递参数 这种方法是使用存储单元传递参数的,即主 程序在存储单元建立一个参数表,存放子程序所 要的参数,在主程序中将该参数表首地址传送给 子程序,子程序通过参数表取得所需参数,并把 结果也存放到指定存储单元中。 优点:适合于传递参数较多的情况。 第十六讲第十六讲Date14第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.2.2 用存储单元传递参数 例9.4使用存储单元传递参数的方法来实现例9.3。 ;主程序 datasegmentstringdb

14、100 dup(?)Lentdw? dataends codesegment assumecs:code,ds:data main proc farstart::push ds mov ax,,0 push ax movax,data movds,ax movcx,0 movdi,offset stringagain:movah,1 int21h cmpal,0 jenextmovdi,al incdi inccx jmpagainnext: mov lent,cx leabx,string callstob1 retDate15第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语

15、言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.2.2 用存储单元传递参数 ;子程序名:stob1 ;功能:将小写字母修改为大写字母 ;入口参数:bx存放数据存储单元首址 ;出口参数:修改后的字符存回原存储单元中 stob1proc movcx,lentagain1: moval,bx cmpal,61h jbnext1 cmpal,7ah janext1 subal,20h movbx,alnext1: incbx deccx jnzagain1 ret stob1endp mainendp codeendsend start Date16第1章 汇编语言基础知识 9 章 子程序的设计网络工程系 汇编语言程序设计汇编语言程序设计安徽工业大学9.2 9.2 子程序的参数传递子程序的参数传递 9.2.3 用堆栈传递参数 用堆栈传递入口参数时,要在调用子程序前把有关参数 依次压栈,子程序从堆栈中取得入口参数;用堆栈传递出口 参数时,要在子程序返回前,把有关参数依次压栈,主程序 就可以从

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号