子程序与宏指令设计.ppt

子程序与宏指令设计.ppt

ID:51605272

大小:822.36 KB

页数:129页

时间:2020-03-25

子程序与宏指令设计.ppt_第1页
子程序与宏指令设计.ppt_第2页
子程序与宏指令设计.ppt_第3页
子程序与宏指令设计.ppt_第4页
子程序与宏指令设计.ppt_第5页
资源描述:

《子程序与宏指令设计.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第六章子程序与宏指令设计为了程序共享或模块化设计的需要,可以把一段公共语句序列设计成子程序或宏指令的形式。6.1子程序结构及设计方法6.2子程序参数传递6.3嵌套与递归子程序6.4宏指令6.5宏指令库6.6重复伪指令6.7条件伪指令6.1子程序结构及设计方法6.1.1含有子程序的程序结构在汇编语言中用过程定义伪指令定义子程序。过程定义伪指令格式:过程名PROC属型…过程名ENDP1.调用程序和子程序在同一个代码段的程序结构(子程序类型可缺省,注意END后必须跟主程序名)CODESEGMENTMAINPROCFAR…CALLSUB1RETMAINENDPSUB1PROC…RET

2、SUB1ENDPCODEENDSENDMAIN2.调用程序和子程序在不同段的程序结构(SUB2既被段间调用又被段内调用,必须是FAR属性。CALL要显式说明是FAR属性)CODE1SEGMENT MAINPROCFARCALLFARPTRSUB2RETMAINENDPCODE1ENDSCODE2SEGMENTSUB1PROCFARCALLFARPTRSUB2RETSUB1ENDPSUB2PROCFARRETSUB2ENDPCODE2ENDSENDMAIN6.1.2设计子程序时应注意的问题1.子程序说明2.寄存器的保存与恢复3.密切注意堆栈状态6.2子程序参数传递可以通过给子程

3、序传递参数使其更通用。常用的参数传递方法如下:通过寄存器传递;若调用程序和子程序在同模块(源程序)中,子程序可以直接访问模块中的变量;通过地址表传递参数地址;通过堆栈传递参数或参数地址。6.2.1通过寄存器传递这种传递方式使用方便,适用于参数较少的情况。例1.把BX中的16位二进制数转换成十进制并显示在屏幕上。STASGSEGMENTDW32DUP(?)STASGENDSCODESEGMENTASSUMECS:CODEMAINPROCFARMOVBX,162EHCALLTERNMOVAX,4C00HINT21HMAINENDP程序6.3TERNPROC;二→十并显示。MOVC

4、X,10000CALLDEC_DIV;转换万位数MOVCX,1000CALLDEC_DIV;转换千位数MOVCX,100CALLDEC_DIV;转换百位数MOVCX,10CALLDEC_DIV;转换十位数MOVCX,1CALLDEC_DIV;转换个位数RETTERNENDPDEC_DIVPROC;CX中为十进制的位权MOVAX,BXMOVDX,0DIVCX;商为转换后的一位十进制数MOVBX,DXMOVDL,ALADDDL,30H;转换成ASCII码MOVAH,2;显示INT21HRETDEC_DIVENDPCODEENDSENDMAIN6.2.2同模块中的子程序可直接访问模

5、块中的变量若调用程序和子程序在同模块中,子程序可以直接访问模块中的变量。例2.实现数组求和功能。要求数组求和(不考虑溢出情况)由子程序实现,其数组元素及结果均为字型数据。见程序6.4。STACKSGSEGMENTSTACK'STK‘DW32DUP('S')STACKSGENDSDATASEGMENTARYDW1,2,3,4,5,6,7,8,9,10COUNTDW($-ARY)/2;数组元素个数SUMDW?;数组和的地址DATAENDS程序6.4CODE1SEGMENTMAINPROCFARASSUMECS:CODE1,DS:DATAPUSHDSXORAX,AXPUSHAXMO

6、VAX,DATAMOVDS,AXCALLFARPTRARY_SUMRETMAINENDPCODE1ENDSCODE2SEGMENTASSUMECS:CODE2ARY_SUMPROCFAR;数组求和子程序PUSHAX;保存寄存器PUSHCXPUSHSILEASI,ARY;取数组起始地址MOVCX,COUNT;取元素个数XORAX,AX;清0累加器NEXT:ADDAX,[SI];累加和ADDSI,TYPEARY;修改地址指针LOOPNEXTMOVSUM,AX;存和POPSI;恢复寄存器POPCXPOPAXRETARY_SUMENDPCODE2ENDSENDMAIN6.2.3通过地

7、址表传递参数地址适用于参数较多的情况。具体方法是先建立一个地址表,该表由参数地址构成。然后把表的首地址通过寄存器或堆栈传递给子程序。例3.编写一个数组求和子程序,其数组元素及结果均为字型数据。另定义两个数组,并编写一个主程序,通过调用数组求和子程序分别求出两个数组的和。见程序6.5。程序6.5STACKSGSEGMENTSTACK'STK'DW32DUP('S')STACKSGENDSDATASEGMENTARYDW1,2,3,4,5,6,7,8,9,10;数组1COUNTDW($-ARY)/2;数组1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。