欢迎来到天天文库
浏览记录
ID:41588981
大小:226.50 KB
页数:37页
时间:2019-08-28
《汇编语言程序设计 第9章_子程序设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、8086/8088和ARM核汇编语言程序设计第9章子程序设计7/22/20211第9章子程序的设计9.2子程序的参数传递9.3子程序嵌套与递归第9章子程序设计9.1子程序设计方法9.4子程序库7/22/20212第9章子程序的设计子程序又称为过程,是能完成特定功能有一定通用性的程序段,在需要时能被其它程序调用。调用子程序的程序常称为主程序。一般把源程序中反复出现的程序段或常用的功能独立的程序段设计成子程序供用户使用。这样可以简化源程序结构、节省目标程序的存储空间,提高程序设计的效率。子程序结构也是模块化程序设计的基础。本章主要介绍子程序的
2、定义、子程序调用和返回、子程序的参数传递以及子程序库等知识。9.1子程序设计方法7/22/20213第9章子程序的设计9.1子程序设计方法9.1.1子程序的定义子程序的定义是由过程定义伪指令PROC和ENDP实现,格式如下:过程名PROC[NEAR
3、FAR]…;过程体过程名ENDPNEAR属性的过程只能被相同代码段的其他程序调用,FAR属性的过程可以被不同代码段的程序调用。(1)子程序和主程序在同一个代码段中,则子程序定义为NEAR属性。(2)子程序和主程序不在同一个代码段中,则子程序定义为FAR属性。(3)主程序通常定义为FAR属性,这
4、是因为主程序被看作DOS调用的一个子程序,以便执行完返回DOS。7/22/20214第9章子程序的设计STACKSEGMENTPARASTACK'STACK'DB1024DUP(?)STACKENDSDATASEGMENTPARA'DATA'HELLODB'WelcometoBEIJING!',0dh,0ah,'$'DATAENDSCODESEGMENTPARA'CODE'ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKMAINPROCFARSTART:PUSHDSXORAX,AXPUSHAXMOVAX,DAT
5、AMOVDS,AXLEADX,HELLOMOVAH,9INT21HRETMAINENDPCODEENDSENDSTART7/22/20215第9章子程序的设计9.1子程序设计方法9.1.1子程序的定义子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容:(1)子程序名(2)功能描述(3)入口和出口参数(4)调用注意事项和说明等7/22/20216第9章子程序的设计9.1子程序设计方法
6、9.1.1子程序的定义例9.1编写一个子程序,从键盘输入一位十进制数。;子程序名:stdin;功能:完成从键盘输入一位十进制数;入口参数:等待键盘输入;出口参数:al中存放输入的数值stdinprocmovah,1int21hcmpal,30hjlnextcmpal,39hjgnextandal,0fhnext:retstdinendp7/22/20217第9章子程序的设计9.1子程序设计方法9.1.2子程序调用与返回子程序调用与返回由CALL和RET指令实现。子程序调用指令首先把子程序的返回地址(即CALL指令的下一条指令的地址)压入堆
7、栈,然后转移到子程序的入口地址执行子程序。根据子程序和主程序是否在同一代码段,分为段内调用和段间调用。子程序和主程序在同一个代码段中称为段内调用;子程序和主程序不在同一个代码段中,称为段间调用。子程序返回指令负责把压入栈区的返回地址弹出送IP或CS∶IP,实现返回主程序继续往下执行。与子程序的段内调用和段间调用相对应,子程序的返回也分为段内返回和段间返回。7/22/20218第9章子程序的设计9.1子程序设计方法9.1.2子程序调用与返回当子程序和主程序在同一个代码段中,子程序的定义和调用如下图:codesegmentmainprocfa
8、r……callsuba……retmainendpsubaprocnear……retsubaendpcodeends7/22/20219第9章子程序的设计9.1子程序设计方法9.1.2子程序调用与返回当子程序和主程序不在同一个代码段中,子程序的定义和调用如下图:code1segmentmainprocfar……callfarptrsuba……retmainendpcode1endscode2segmentsubaprocfar……retsubaendpcode2ends7/22/202110第9章子程序的设计9.1子程序设计方法9.1.3寄
9、存器内容的保护与恢复PROGPROCPUSHAXPUSHBXPUSHCX;保护现场PUSHDX┆POPDXPOPCXPOPBX;恢复现场POPAXRET;返回断点处PROCENDP注意:堆栈“
此文档下载收益归作者所有