实验报告子程序设计实验.pdf

上传人:赵** 文档编号:43650897 上传时间:2022-09-18 格式:PDF 页数:10 大小:452.35KB
返回 下载 相关 举报
实验报告子程序设计实验.pdf_第1页
第1页 / 共10页
实验报告子程序设计实验.pdf_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《实验报告子程序设计实验.pdf》由会员分享,可在线阅读,更多相关《实验报告子程序设计实验.pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、.-实验实验 5 5 子程序实验子程序实验一实验目的一实验目的1掌握主程序与子程序之间的调用关系及调用方法;2掌握子程序调用过程中近程调用与远程调用的区别;3掌握通过堆栈转送参数的方法。4.掌握多模块程序设计方法二实验容二实验容1将 BUF 开场的 10 个单元中的二进制数转换成两位十六进制数的ASCII 码,在屏幕上显示出来。要求码型转换通过子程序HEXAC 实现,在转换过程中,通过子程序 DISP 实现显示。DATAS SEGMENTBUF DB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,001

2、00100B,11100010B,01010010BCAN DB$-BUF;定义常量CANDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASMAIN PROC FAR;主程序块START:MOVAX,DATASMOVDS,AXMOVCL,10LEASI,BUFLOOP1:;调用子程序语句call HEXACcall DISPDECCANJNZLOOP1EXIT:MOVAH,4CHINT21HMAINENDPHEXAC PROC NEAR;二进制转换成十六进制子程序MOVBL,SIINCSIRETHEXAC ENDP-word.zl.-DISP PRO

3、C NEAR;显示子程序MOVCL,4MOVCH,2MOVE:;移位语句ROLBL,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,9EPRINTADDDL,07HPRINT:MOVAH,02H;显示语句INT21HDECCHJNZMOVEMOVDL,MOVAH,02HINT21HRETDISP ENDPCODESENDSENDSTART2编写一个主程序,从键盘接收假设干个字符,然后用远调用的方法,调用子程序统计字符串中字符b的个数.子程序的参数是字符串的首地址 TABLE,字符串长度 N 及字符b.子程序返回字符 b的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示

4、字符b及其个数(设为一位十六进制数)。DATASEGMENTSTR1DB0ah,0dh,PLEASE INPUT YOUR STRING:$STR2DB0ah,0dh,THE NUMBER OF b is:$TABLEDB 50,?,50 DUP(?),$DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STR1MOVAH,9INT21HLEADX,TABLE-word.zl.-MOVAH,0AHINT21HLEASI,TABLEMOVCL,SI+1MOVCH,0INCSIINCSIMOVAL,bMOV

5、AH,0PUSHSIPUSHCXPUSHAXCALLFAR PTR CHECKPOPAXMOVCL,ALLEADX,STR2MOVAH,9INT21HMOVDL,CLANDDL,0FHCMPDL,9ECANADDDL,7CAN:ADDDL,30HMOVAH,2INT21HEXIT:MOVAH,4CHINT21HCODEENDSSCODESEGMENTASSUMECS:SCODECHECKPROCFARPUSHBPMOVBP,SPMOVSI,BP+10MOVCX,BP+8MOVAX,BP+6XORAH,AHAGAIN:CMPAL,SIJNECAN1INCAH-word.zl.-CAN1:INCS

6、ILOOPAGAINMOVAL,AHMOVBP+10,AXPOPBPRET4CHECKENDPSCODE ENDSENDSTART3.请编写一个程序来实现简单的程序菜单显示。(采用多模块程序设计方法)显示一个菜单要求用户从下表中选择:1HEXAC GAME对应程序 12CHARSTATISTICS PROGRAM对应程序3PRESS“ESCTOQUIT用户作出选择 13 时,显示输出要执行操作的名字,如“Your selection is 1,the program willexecute HEXAC NUMBER GAME!然后转向相应的程序去执行,执行完毕前进展退出的判断,显示一个提示信息

7、“will you continue program really?(Y:N)要求用户从键盘键入字符,假设是“Y键,那么继续程序的执行,假设是“N键,那么返回到菜单。假设用户选择3,要求程序显示提示信息“Please press ESC key to exit!,并能按要求正确退出。DATAS SEGMENTOPTDW YIDW ERmenuDB 0DH,0AH,THE MENU:;显示菜单DB 0DH,0AH,(1)HEXAC GAME;对应程序 1DB 0DH,0AH,(2)CHARSTATISTICS PROGRAM;对应程序DB 0DH,0AH,(3)PRESS ESCTOQUIT$B

8、UFDB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B,11100010B,01010010BCANDB$-BUF;定义常量 CANstr1DB 0DH,0AH,Your selection is 1,the program will execute HEXAC GAME!$str2DB 0dh,0ah,Your selection is 2,the program will execute CHARSTATISTICSPROGRAM!$str3DB 0DH,0AH,will you

9、 continue program really?(Y:N)$str4DB 0DH,0AH,Please press ESC key to exit!$TABLEDB 50,?,50 DUP(?),$char1 db 0ah,0dh,PLEASE INPUT YOUR STRING:$char2 db 0ah,0dh,THE NUMBER OF b is:$DATAS ENDSCODES SEGMENTMAIN PROC FAR-word.zl.-ASSUME CS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXXORDI,DIsubbx,bxxorsi,siL

10、EADX,menu;显示主菜单MOVAH,9INT21Hmovdl,0dhmovah,2int21hMOVDL,0AHMOVAH,2INT21HMOVAH,1INT21HCMPAL,1JEYICMPAL,2JEERCMPAL,3JEQUITYI:MOVDI,0leadx,str1movah,9int21hMOVCL,10LEASI,BUFCALLHEXACLOOP1:callHEXACcallDISPDECCANJNZLOOP1JMPCONTINUEER:MOVDI,02Hleadx,str2movah,9int21hLEADX,char1MOVAH,9INT21H-;显示回车;显示换行;输入

11、选项;调用子程序语句word.zl.-LEADX,TABLEMOVAH,0AH;输入字符串INT21HLEASI,TABLEMOVCL,SI+1MOVCH,0;CX 中为字符串长度INCSIINCSI;SI 指向串首址 TABLEMOVAL,bMOVAH,0PUSHSIPUSHCXPUSHAXCALLCHECKPOPAXMOVCL,ALLEADX,char2MOVAH,9INT21HMOVDL,CLANDDL,0FHCMPDL,9ECAN3ADDDL,7CAN3:ADDDL,30HMOVAH,2INT21HJMPCONTINUEQUIT:LEADX,str4MOVAH,9INT21HMOVAH

12、,1INT21HCMPAL,1BHJEEXITCONTINUE:LEADX,str3MOVAH,9INT21HMOVAH,1INT21HCMPAL,YJEYES-;AX 中为待查字符;参数送堆栈;统计个数在 AL 中;显示结果;显示统计个数;退出的子程序;按 ESC 退出;用户是否继续执行当前程序;按 y 继续,按 n 退出,不需区分大小写word.zl.-CMPAL,yJEYESCMPAL,NJESTARTCMPAL,nJESTARTYES:JMPoptDI;继续运行当前子程序EXIT:MOVAH,4CH;退出INT21HMAIN ENDPCODES ENDSHEXACCODES SEGME

13、NTASSUME CS:HEXACCODESHEXAC PROC FARMOVBL,SIINCSIRETHEXAC ENDPHEXACCODES ENDSDISPCODES SEGMENTASSUME CS:DISPCODESDISP PROCFARMOVCL,4MOVCH,2MOVE:ROLBL,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,9EPRINTADDDL,07HPRINT:MOVAH,02HINT21HDECCHJNZMOVEMOVDL,MOVAH,02HINT21HRET-;二进制转换成十六进制子程序;显示子程序;移位语句;显示语句word.zl.-DIS

14、P ENDPDISPCODESENDSCHARCODESEGMENTASSUME CS:CHARCODE;子程序局部CHECKPROCFARPUSHBPMOVBP,SPMOVSI,BP+10MOVCX,BP+8MOVAX,BP+6XORAH,AHAGAIN:CMPAL,SIJNECAN1INCAHCAN1:INCSILOOPAGAINMOVAL,AHMOVBP+10,AXPOPBPRET4CHECKENDPCHARCODE ENDSEND START-word.zl.-三实验要求三实验要求1第一个实验程序用子程序的近程调用实现。由于在调用HEXASC 子程序时,子程序又调用了 DISP 子程序

15、,这叫子程序的嵌套调用。实验过程中可以从堆栈的容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段偏移量。在每个子程序的执行中,检查 CS 值是不变的。2第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS 值,它与主程序中的CS 值是不同的。子程序调用后,堆栈中保存了返回地址的段地址及段偏移量。3 第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数 此处是串首址 TABLE,串的长度N 及待统计的字符“b顺序压如堆栈,在子程序调用后,通过 BP 指针对堆栈中的参数访问,并将统计的结果通过堆

16、栈返回。有关该方法的原理此处不再介绍。4第三个程序,请采用分文件多模块程序设计方法实现,需注意和实验 4 中的习题 4中采用的地址跳跃表实现方法区分开来,需注意外部符号的定义及其使用方法。5预习子程序设计的根本方法,根据实验容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。四实验环境四实验环境PC 微机DOS 操作系统或 Windows 操作系统MASM.EXE,LINK.EXE,DEBUG.或宏汇编集成环境五实验步骤五实验步骤1编辑、汇编三个源程序,生成相应的可执行文件.EXE2 用 DEBUG 的 R 命令,T 命令或 G 命令和 D 命令检查远程调用

17、及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。3检查程序执行的结果是否正确。六实验报告要求六实验报告要求-word.zl.-1说明用堆栈传送参数的过程及其具体方法。2分析实验结果及所遇到问题,并说明解决的方法。3、列出各实验题目的程序实现清单,写清楚程序设计思路、各程序模块调用关系及参数传递方式,源程序中对子程序的入口参数和出口参数及功能应进展适当的注释。七思考题七思考题分析远程调用与近程调用的区别,在用DEBUG 有关命令观察时,执行过程有何不同。子程序的远程调用是段间的调用,子程序的远程调用是段间的调用,也就是主程序和子程序不在一个段。也就是主程序和子程序不在一个段。近近程的调用是段的调用程的调用是段的调用。八、实验小结八、实验小结-word.zl.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁