4.2 主程序与子程序间的参数传递.ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
4.2 主程序与子程序间的参数传递

4.2 主程序与子程序间的参数传递 利用寄存器传递参数 利用寄存器传递参数(续) 利用约定存储单元传递 利用堆栈传递参数 1. 堆栈传递参数的优缺点 2. 主程序调用操作的一般步骤 3. 子程序获取入口参数的一般步骤 4. 例题 主程序调用子程序STRLEN部分代码 堆栈变化示意 堆栈变化示意 堆栈变化示意 子程序STRLEN的主要处理步骤 子程序STRLEN获取入口参数 堆栈变化示意 子程序STRLEN测字符长度 子程序STRLEN的结束部分 堆栈变化示意 子程序STRLEN 主程序平衡堆栈 5. 关于例题的讨论 堆栈变化示意 6. C程序函数调用的实现 6. C程序函数调用的实现(续) 6. C程序函数调用的实现(续二) 7. 堆栈传递参数小结 4.2 主程序与子程序间的参数传递 * 利用寄存器传递参数 利用约定存储单元传递参数 利用堆栈传递参数 利用CALL后续区传递参数 DSEG SEGMENT BUFF DB 4 DUP(0),0DH,0AH,‘$’ DSEG ENDS ; CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV DX,0FFFFH MOV ES,DX MOV AX,ES:[0] MOV SI,OFFSET BUFF CALL TOHEXS MOV DX,OFFSET BUFF MOV AH,9 INT 21H MOV AH,4CH INT 21H ;****************************** TOHEXS PROC MOV CX,4 MOV DX,AX HEX1: ROL DX,1 ROL DX,1 ROL DX,1 ROL DX,1 MOV AL,DL CALL TOASC MOV [SI],AL INC SI LOOP HEX1 RET TOHEXS ENDP ;************************* TOASC PROC 。。。。 。。。。 TOASC ENDP ; CSEG ENDS END START DSEG SEGMENT BUFF DB 4 DUP(0),0DH,0AH,‘$’ DSEG ENDS ; CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV DX,0FFFFH MOV ES,DX MOV AX,ES:[0] CALL TOHEXS MOV DX,OFFSET BUFF 。。。。。。 。。。。。。 CSEG ENDS END START TOHEXS PROC MOV DI,0 HEX1: ROL DX,1 ROL DX,1 ROL DX,1 ROL DX,1 MOV AL,DL MOV AL,DL CALL TOASC MOV BUFF[DI],AL INC DI LOOP HEX1 RET TOHEXS ENDP 可以利用堆栈传递入口参数; 也可以利用堆栈传递出口参数。 高级语言的库函数一般是利用堆栈传递入口参数,而利用寄存器传递出口参数。 (1)优点 不占用寄存器 无需专门分配存储单元 便于代码定位 (2)缺点 较为复杂 效率稍低 主程序把入口参数依次压入堆栈; 主程序调用子程序; 主程序平衡堆栈; MOV AX,ARGU1 ;压栈 PUSH  AX MOV AX,ARGU2 PUSH AX CALL SUBR ;调用 ADD SP,4       ;平衡堆栈 子程序进行取入口参数的准备; 子程序根据需要对堆栈进行其他操作 子程序从堆栈获取需要的入口参数; 写一个测量字符串长度的子程序。设字符串以0为结束标志。 利用堆栈来传递入口参数:字符串的起始地址(设包括段值和偏移); 利用寄存器传递出口参数:字符串的长度。 设子程序STRLEN是一个近过程:主程序在调用它时,只把返回地址的偏移压入堆栈。 ;...... MOV AX, SEG STRMESS ;把入口参数压入堆栈 PUSH AX MOV AX, OFFSET STRMESS PUSH AX ; CALL STRLEN  ;调用子程序 ; ADD SP, 4 ; MOV LEN, AX

文档评论(0)

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

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

1亿VIP精品文档

相关文档