网站大量收购独家精品文档,联系QQ:2885784924

实验指导4分析和总结.docxVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验4子程序与多模块程序设计 一、实验目的 1、掌握子程序的定义、调用及返回方法; 2、熟悉主程序与子程序间几种参数传递方法; 3、深刻理解子程序的调用与返回对堆栈的影响; 4、熟悉多模块程序设计方法,了解多模块间参数传递方法。 二、使用的工具软件及环境 TASM 5.0软件包三、实验内容(详见实验报告4) 1、上机调试程序,指出程序中尚存在的错误,并分析该程序要实现的功能。 2、上机运行程序,该程序实现求某数据区中无符号数据最大值,观察程序执行时堆栈的变化,并画出 以下5个堆栈状态图。(1) CALL MAX指令执行之前;(2) CALL MAX指令执行之后;(3)保 护现场之前;(4)恢复现场之后;(5)执行指令POP SMAX之后。 3、阅读并运行程序,回答问题。 4、编写程序:在主程序中从键盘输入一个以飞”结尾的字符串,存储在变量BUF中,子程序把字符串中 的大写字母改为小写字母,小写字母改为大写字母,最后在主程序中显示该字符串。要求:子程序和 主程序在不同的源程序文件中。 四、实验指导1、子程序设计要点 子程序的定义 子程序的调用和返回 保护现场和恢复现场 主程序与子程序之间的信息传递 (1)子程序的定义伪指令子程序名 PROC [NEAR / FAR] 子程序名ENDP ①伪指令PROC和ENDP必须成对出现。 子程序定义写在代码段内,子程序体中至少包含一条返回指令RET。 NEAR (默认)说明该子程序只能被同一个代码段里的程序调用,称为近程子程序。近程子程序 调用和返回时只需要改变IP寄存器的值,CS寄存器的值保持不变。 ④FAR说明子程序能够被不同代码段的程序调用,也能被同一代码段的程序调用,称为远程子程序。远 程子程序调用和返回时,需要同时改变CS和IP寄存器的值。 ⑤ 可将主程序定义为FAR型过程,看作是DOS调用的一个过程。 (2)子程序的调用与返回指令 段内直接调用 CALL 子程序名 段内间接调用 CALL REG16/MEM16 段间直接调用 CALL FAR PTR子程序名 段间间接调用 CALL MEM32 返回指令 RET 带立即数的返回指令 RET D16 (3)现场的保护与恢复当子程序和主程序使用相同的寄存器,为了防止子程序破坏主程序中寄存器内容,须在子程序开始 时保存寄存器内容,子程序结束前恢复寄存器内容。 方法:利用堆栈对寄存器内容进行保护与恢复。即执行PUSH指令保护寄存器内容,执行POP 指令恢复寄存器内容。 特别注意的是:现场保护时寄存器出现的顺序与现场恢复时寄存器出现的顺序相反,且保护的寄存 器个数与恢复的寄存器个数要相同。 (4)主程序与子程序间参数传递方法 约定寄存器法 约定存储单元法 堆栈法 地址表法例1:编写一个子程序,以ax为入口参数,把AX中的各个二进制位颠倒次序后还放回AX中。例如, 入口参数处理后 AX 应为 lOOlOllllOOOHOlBo INVERT PROC PUSH CX PUSH BX MOV CX, 16 NEXT: ROLAX, 1 RCRBX, 1 LOOP NEXT MOV AX, BX POP BX POP CX RET INVERTENDP例2:从键盘输入一个字符串(长度<80),若该字符串不包括非数字字符,则显示“YES 否显示“NO”。 设计一个过程,判断字符串是否为数字串。 DATA SEGMENT STRING DB 80, ?, 81 DUP(?) YESDB ODH, OAHJYES. S NODB ODH, OAH, NO即DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOVAX, DATA MOVDS, AXMOVAH, OAH LEADX, STRINGINT21H MOVCL, STRING+1MOVCH, 0 MOV SI, 2 CALL EXAM CMP AH,0 JE NOMESS LEA DX, YES JMP DISP NOMESS: LEA DX, NO DISP: MOV AH, 09H INT 21H MOV AX, 4C00H INT 21H EXAM PROC MOV AH, 1 NEXT: MOV AL, STRING [SI] CMP AL, O JB EXIT CMP AL,9 JA EXIT INC SI LOOP NEXT JMP EXIT1 EXIT: MOV AH,0 EXIT1: RET EXAM ENDP CODE ENDS END START 例3:编写程序,判断某年是否是闰年。年份从键盘输入,输出是否是闰年的信息。 INCLUDE YLIB.HDATA SEGMENT;定义数据段 MESSO DB ODH,

文档评论(0)

scj1122111 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8113057136000004

1亿VIP精品文档

相关文档