欢迎来到天天文库
浏览记录
ID:50454977
大小:462.50 KB
页数:69页
时间:2020-03-09
《微型计算机原理与汇编语言程序设计 曲凤娟 第9章 子程序.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第9章子程序设计本章内容提示本章讲述子程序的设计,介绍了中断调用程序设计。其中,详细阐述子程序的定义、子程序设计的基本过程和设计方法以及中断的相关知识。9.1子程序基本概念9.2子程序设计9.3子程序的嵌套与递归9.4中断调用程序9.1子程序结构的基本概念9.1.1子程序定义伪指令9.1.2调用与返回指令返回本章首页9.1.1子程序的定义1.子程序:功能独立、能反复调用的程序段或语句序列。在汇编语言中,子程序又称过程。2.主调程序:主程序,调用子程序的程序。子程序定义伪指令在汇编语言中,子程序要用过程定义伪指令进行定义,定义一般格式如下:Procedure
2、nameprocAttribute∶∶(子程序体)∶∶ProcedurenameendpProcedurename为子程序名,用以标识不同的子程序,是符合语法的标识符,它是子程序入口的符号地址;属性(Attribute)是指类型属性,有两种选择:NEAR或FAR,缺省时为NEAR。若调用程序和子程序在同一个代码段,子程序属性使用NEAR,若调用程序和子程序不在同一个代码段,则选择FAR。9.1.2子程序调用和返回指令CALLlabelRET回到CALL后的指令处——返回地址子程序CALL指令分成4种类型(类似JMP)CALLLABEL;段内调用、直接寻址C
3、ALLR16/M16;段内调用、间接寻址CALLFARPTRLABEL;段间调用、直接寻址CALLFARPTRMEM;段间调用、间接寻址CALL指令需保存返回地址:段内调用——偏移地址(IP)入栈SP←(SP)-2,SS:[SP]←(IP)段间调用——偏移地址(IP)和段地址(CS)入栈SP←(SP)-2,SS:[SP]←(IP)SP←(SP)-2,SS:[SP]←(CS)9.2子程序设计包括以下几个部分:(1)子程序说明(2)保护现场和恢复现场(3)子程序体(4)子程序返回例如例如例:若子程序PROG中改变了寄存器AX,BX,CX,DX的值,则可采用如下
4、方法保护和恢复现场。PROGPROCPUSHAXPUSHBXPUSHCX;保护现场PUSHDX┆┆POPDXPOPCXPOPBX;恢复现场POPAXRET;返回断点处PROCENDP9.2.3子程序的定义和参数传递1.子程序的定义过程名PROC[NEAR/FAR]┆过程名ENDP段属性、偏移地址属性、类型属性例如2.主程序对子程序的调用(1)子程序调用指令CALL①段内直接调用格式:CALLOPR执行操作:SP(SP)-2(SP)+1,(SP)(IP)IP(IP)+16位偏移量子程序名②段内间接调用格式:CALLOPR执行操作:SP(SP)-2(S
5、P)+1,(SP)(IP)IP(EA)存储单元或寄存器③段间直接调用格式:CALLOPR执行操作:SP(SP)-2(SP)+1,(SP)(CS)SP(SP)-2(SP)+1,(SP)(IP)IP偏移地址,CS段地址子程序名④段间间接调用格式:CALLDWORDPTROPR执行操作:SP(SP)-2(SP)+1,(SP)(CS)SP(SP)-2(SP)+1,(SP)(IP)IP(EA),CS(EA+2)存储单元(2)子程序返回指令格式:①RET②RETN;(N为偶数)3.主程序与子程序参数传递方式(1)寄存器法(2)约定单元法(3
6、)堆栈法返回本节9.2.4子程序应用举例例:将一个二进制数按位转换成ASCII码字符串,送到指定的存储单元并显示。如二进制数10010011转换成字符串为‘10010011’。要求将转换过程写成子程序,子程序应具有较好通用性,而且必须能实现对8位和16位二进制数的转换。DATASEGMENTNUM8EQU93HNUM16EQU0ABCDHASCBUFDB20DUP(0)DATAENDSSSEGSEGMENTSTACKDB100DUP(0)SSEGENDSCODESEGMENTASSUMEDS:DATA,CS:CODE,SS:STACKSTART:MOVAX
7、,DATAMOVDS,AXMOVDX,0MOVDL,NUM8;二进制数送DXMOVCX,8;置位数8LEADI,ASCBUF;字符串首址→DICALLBTASC;调用BTASCMOV[DI],BYTEPTR0DHMOV[DI+1],BYTEPTR0AHMOV[DI+2],BYTEPTR‘$’LEADX,ASCBUFMOVAH,9INT21HMOVDX,NUM16MOVCX,16;置位数16LEADI,ASCBUFCALLBTASCMOV[DI],BYTEPTR0DHMOV[DI+1],BYTEPTR0AHMOV[DI+2],BYTEPTR‘$’;显示串LE
8、ADX,ASCBUFMOVAH,9INT21H;入口参数:DX存放
此文档下载收益归作者所有