微机原理和应用练习7.doc

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

练习七 子程序实验 目的 掌握主程序与子程序之间的调用关系及调用方法; 掌握子程序调用过程中近程调用与远程调用的区别; 掌握通过堆栈转送参数的方法。 内容 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。 编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符”b”的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 环境 PC微机 DOS操作系统或 Windows 操作系统 MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境 要求 第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP??程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。 第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。 第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。 预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图; 熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。 主要步骤 编辑、汇编两个源程序,生成相应的可执行文件(.EXE) 用DEBUG的R命令,T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。 检查程序执行的结果是否正确。 内容1流程图: 主程序 子程序HEXASC 子程序DISP 内容1结果: 内容2流程图: 主程序 子程序 内容2结果: 内容1代码: DATA SEGMENT BUF DB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FH DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CX,0AH LOP: MOV AL,[BX] CALL HEXASC INC BX LOOP LOP MOV AH,4CH INT 21H HEXASC PROC NEAR PUSH CX PUSH AX MOV DL,AL MOV CL,4 SHR DL,CL CALL DISP POP AX MOV DL,AL AND DL,0FH CALL DISP POP CX RET HEXASC ENDP DISP PROC NEAR CMP DL,9 JBE NEXT ADD DL,7 NEXT: ADD DL,30H MOV AH,2 INT 21H RET DISP ENDP CODE ENDS END START 内容2代码: DATA SEGMENT CHAR DB b BUF DB 50H,?,50H DUP(?) DATA ENDS MCODE SEGMENT ASSUME CS:MCODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,10 INT 21H MOV DL,0AH MOV AH,2 INT 21H LEA SI,BUF MOV CL,[SI+1] MOV CH,0 INC SI INC SI MOV AL, CHAR MOV AH,0 PUSH SI PUSH CX PUSH AX CALL FAR PTR CHECK POP AX PUSH AX MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,9 JBE J1 ADD DL,7 J1: ADD DL,30H MOV AH,

文档评论(0)

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

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

1亿VIP精品文档

相关文档