第11章 子程序结构程序设计.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.利用堆栈传递参数 参数传递的第二种方法是利用堆栈,在调用子程序之前,调用程序将子程序需要的输入参数逐个压入堆栈,在进入子程序后再从堆栈中弹出这些数据。同理输出参数也可以通过堆栈来完成(看后面例子)。采用堆栈的优点是可以传递较多的参数,但要注意不可破坏断点地址以及进出栈的顺序。 利用堆栈来传递参数,既可传递数据,也可以是地址。 特别要注意堆栈中的断点保护与恢复。从调用程序进入子程序时,栈顶保存的内容为断点地址(子程序返回地址)。 【例】 试编制一个将字符串STR1传送到字符串STR2的调用程序与子程序(设两串无地址重叠)。并将STR2串送显示。 分析:这也是很简单的问题,用以体会利用堆栈传递参数的方法。为实现字符串的传送需要三个入口参数,即源串STR1的偏移首地址出入SI,目的串STR2的偏移首地址存入DI和字符串长度存入CX。在调用子程序之前,调用程序应将它们压入堆栈,进入子程序后,再经出栈指令依次取出这些参数。 私掂填馆秧谨凰黔卡镑暖客这貉灸捞尿虑辛裂侨费生磊巳愈颠接赃廷棋惶第11章 子程序结构程序设计第11章 子程序结构程序设计 DATA SEGMENT STR1 DB ‘AB……’ ;源串 N EQU $-STR1 STR2 DB N DUP(?),‘$’ DATA ENDS STAK SEGMENT STACK DW 100 DUP(?) STAK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX 荔郎装渐尚浆醉妖狠轩盟捡坯铆壬震点寸掐纫筹架嫉痞需枉岳作圃莹瞬脸第11章 子程序结构程序设计第11章 子程序结构程序设计 MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,STR1 LEA DI,STR2 MOV CX,N   PUSH CX ;入口参数3进栈 PUSH DI ;入口参数2进栈 PUSH SI ;入口参数1进栈 CALL SMOVB RET 杉侍鸯治毗任扑沈近陵另孵诺匡薄烩姻份犊南殊惧涣服错丁确祁宠攒垃烈第11章 子程序结构程序设计第11章 子程序结构程序设计 ;子程序名:SMOVB ;功能:完成字符串传送,并显示STR2 ;输入参数:源、目的串首址及字符串长度的SI,DI,CX进栈 ;输出参数:在附加段中存放STR2开始的目的串 SMOVB PROC NEAR POP BX ;取出断点地址偏移量 POP SI ;取出输入参数1 POP DI ;取出输入参数2 POP CX ;取出输入参数3 PUSH BX ;恢复断点保存,要关注断点地址 CLD ;增址方向 REP MOVSB ;重复串传送 LEA DX,STR2 ;9号功能的字符串显示 MOV AH,9 INT 21H RET SMOVB ENDP MAIN ENDP CODE ENDS END START 菩赘为梁奔艳滇趴臼拣耍侦铜贰从仰楷岔够讳酵于每羊爸谭邑挠票袍匀断第11章 子程序结构程序设

文档评论(0)

bm5044 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档