实验报告 子程序设计实验_第1页
实验报告 子程序设计实验_第2页
实验报告 子程序设计实验_第3页
实验报告 子程序设计实验_第4页
实验报告 子程序设计实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验5子程序实验实验目的掌握主程序与子程序之间的调用关系及调用方法;掌握子程序调用过程中近程调用与远程调用的区别;掌握通过堆栈转送参数的方法。掌握多模块程序设计方法实验内容将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。DATASSEGMENTBUFDB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B,11100010B,01010010BCANDB$-BUF;定义常量CANDATASENDSCODESSEGMENTASSUMECS:CODES,DS:DATASMAINPROCFAR;主程序块START:MOVAX,DATASMOVDS,AXMOVCL,10LEASI,BUFLOOP1:;调用子程序语句callHEXACcallDISPDECCANJNZLOOP1EXIT:MOVAH,4CHINT21HMAINENDPHEXACPROCNEAR;二进制转换成十六进制子程序MOVBL,[SI]INCSIRETHEXACENDPDISPPROCNEAR;显示子程序MOVCL,4MOVCH,2MOVE:;移位语句ROLBL,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,'9'JBEPRINTADDDL,07HPRINT:MOVAH,02H;显示语句INT21HDECCHJNZMOVEMOVDL,''MOVAH,02HINT21HRETDISPENDPCODESENDSENDSTARTD:Smasri5.0>1.cxe072122S305829324E252编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符”b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。DATASEGMENTSTR1DB0ah,0dh,'PLEASEINPUTYOURSTRING:$'STR2DB0ah,0dh,'THENUMBEROFbis:$'TABLEDB50,?,50DUP(?),'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,STR1MOVAH,9INT21HLEADX,TABLETOC\o"1-5"\h\zMOVAH,0AHINT21HLEASI,TABLEMOVCL,[SI+1]MOVCH,0INCSIINCSIMOVAL,'b'MOVAH,0PUSHSIPUSHCXPUSHAXCALLFARPTRCHECKPOPAXMOVCL,ALLEADX,STR2MOVAH,9INT21HMOVDL,CLANDDL,0FHCMPDL,9JBECANADDDL,7CAN:ADDDL,30HMOVAH,2INT21HEXIT:MOVAH,4CHINT21HCODEENDSSCODESEGMENTASSUMECS:SCODECHECKPROCFARPUSHBPMOVBP,SPMOVSI,[BP+10]MOVCX,[BP+8]MOVAX,[BP+6]XORAH,AHAGAIN:CMPAL,[SI]JNECAN1INCAHCAN1:INCSILOOPAGAINMOVAL,AHMOV[BP+10],AXPOPBPRET4CHECKENDPSCODEENDSENDSTARTPLEASEINPUTVOURSTRINC:ethuliaIhFbdasbTHENUMBEROFbis:43.请编写一个程序来实现简单的程序菜单显示。(采用多模块程序设计方法)显示一个菜单要求用户从下表中选择:(1)HEXACGAME(对应一一>程序1)(2)CHARSTATISTICSPROGRAM(对应一一>程序2)(3)PRESS"ESC”TOQUIT用户作出选择1~3时,显示输出要执行操作的名字,如“Yourselectionis1,theprogramwillexecuteHEXACNUMBERGAME!”然后转向相应的程序去执行,执行结束前进行退出的判断,显示一个提示信息“willyoucontinueprogramreally?(Y:N)”要求用户从键盘键入字符,若是“Y”键,则继续程序的执行,若是“N”键,则返回到菜单。若用户选择3,要求程序显示提示信息“PleasepressESCkeytoexit!”,并能按要求正确退出。DATASSEGMENTOPTDWYIDWERmenuDB0DH,0AH,'THEMENU:';显示菜单DB0DH,0AH,'(1)HEXACGAME';对应——>程序1DB0DH,0AH,'(2)CHARSTATISTICSPROGRAM';对应——>程序2DB0DH,0AH,'(3)PRESS"ESC"TOQUITS'BUFDB00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B,11100010B,01010010BCANDB$-BUF;定义常量CANstr1DB0DH,0AH,'Yourselectionis1,theprogramwillexecuteHEXACGAME!$'str2DB0dh,0ah,'Yourselectionis2,theprogramwillexecuteCHARSTATISTICSPROGRAM!$'str3DB0DH,0AH,'willyoucontinueprogramreally?(Y:N)$'str4DB0DH,0AH,'PleasepressESCkeytoexit!$'TABLEDB50,?,50DUP(?),'$'char1db0ah,0dh,'PLEASEINPUTYOURSTRING:$'char2db0ah,0dh,'THENUMBEROFbis:$'DATASENDSCODESSEGMENTMAINPROCFAR

ASSUMECS:CODES,DS:DATASSTART:MOVAX,DATASMOVDS,AXXORDI,DIsubbx,bxxorsi,siLEADX,menu;显示主菜单MOVAH,9INT21Hmovdl,0dh;显示回车movah,2int21hMOVDL,0AH;显示换行MOVAH,2INT21HMOVAH,1;输入选项INT21HCMPAL,'1'JEYICMPAL,'2'JEERCMPAL,'3'JEQUITYI:MOVDI,0leadx,str1movah,9int21hMOVCL,10LEASI,BUFCALLHEXACLOOP1:;调用子程序语句callHEXACcallDISPDECCANJNZLOOP1JMPCONTINUEER:MOVDI,02Hleadx,str2movah,9int21hLEADX,char1MOVAH,9INT21H

LEADX,TABLEMOVAH,0AH;输入字符串INT21HLEASI,TABLEMOVCL,[SI+1]MOVCH,0;CX中为字符串长度INCSIINCSI;SI指向串首址TABLEMOVAL,'b'MOVAH,0;AX中为待查字符PUSHSIPUSHCXPUSHAX;参数送堆栈CALLCHECKPOPAX;统计个数在AL中MOVCL,ALLEADX,char2;显示结果MOVAH,9INT21HMOVDL,CLANDDL,0FHCMPDL,9JBECAN3ADDDL,7CAN3:ADDDL,30HMOVAH,2INT21H;显示统计个数JMPCONTINUEQUIT:LEADX,str4;退出的子程序MOVAH,9INT21HMOVAH,1INT21HCMPAL,1BH;按ESC退出JEEXITCONTINUE:LEADX,str3;用户是否继续执行当前程序MOVAH,9INT21HMOVAH,1INT21HCMPAL,'Y';按y继续,按n退出,不需区分大小写JEYESCMPAL,'y'JEYESCMPAL,'N'JESTARTCMPAL,'n'JESTARTYES:JMPopt[DI];继续运行当前子程序EXIT:MOVAH,4CH;退出INT21HMAINENDPCODESENDSHEXACCODESSEGMENTASSUMECS:HEXACCODESHEXACPROCFAR;二进制转换成十六进制子程序MOVBL,[SI]INCSIRETHEXACENDPHEXACCODESENDSDISPCODESSEGMENTASSUMECS:DISPCODESDISPPROCFAR;显示子程序MOVCL,4MOVCH,2MOVE:;移位语句ROLBL,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,'9'JBEPRINTADDDL,07HPRINT:MOVAH,02H;显示语句INT21HDECCHJNZMOVEMOVDL,''MOVAH,02HINT21HRETDISPENDPDISPCODESENDSCHARCODESEGMENTASSUMECS:CHARCODE;子程序部分CHECKPROCFARPUSHBPMOVBP,SPMOVSI,[BP+10]MOVCX,[BP+8]MOVAX,[BP+6]XORAH,AHAGAIN:CMPAL,[SI]JNECAN1INCAHCAN1:INCSILOOPAGAINMOVAL,AHMOV[BP+10],AXPOPBPRET4CHECKENDPCHARCODEENDSENDSTARTTHEMENU*<1>HLXACGAHE<2>CHARSlfiTlSTICSPROGRAM<3>PREE£“ESC"'TOQ4I1T1¥ourselectionis1programwillexecuteHEX自C21220305829324E:5201t/i11youcontinuepregranrealljf?CY:H>nTHEMENU:<1>HEXACGAME<2)CHARSTATISTICSFHOGRfiH<3>PRE££"ESC"T6QUIT2selectiunis2>ClitomgfwillcxecuteCHAR5TAIISTICSPROCRflM*PLEfiSEINPUTVOURSTRING:bdbfbhbhsdjfhTHENUMBEROFbul119ducontinnepreyranj'talIjf?CY:N>nTHEMENU:<1>HEKACGAME<2>CHARSlftTISTICSFROGRAM<3>FFESSFC”TOQUIT3IdawKurewsESCkevtowxit?一tl>HEXACCftHESTfiTlSTICSFHOGRAH<3>PRESSl,ESC,JTOQUIT1gfllactionis1Pthepr-ogranwillexecuteH£XACGRnET2122自306C2932452Ljill印ucontinueprogramreallij?<Y;H>nTHEHEHU:C1>HEXACGAME<2>CMflRSTATISTICSFROGRAMC3>PRESS'TSC"TGqUTT^Durselectionis3,theprogramwillexecuteCHARSIATISUCSPROGRAM,PLEASEINPUTYOURSTRING:bdbfhbbbsdjfhTHEHUtlBEROFbic:6Millwoucontinucprovranreally?;N>nTHEHENU:COHEXftCGAME(3JCMARSTATISTICSFRQGRAM<3>PRESS"ESC"TOQUIT实验要求第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序又调用了DISP子程序,这叫子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的执行中,检查CS值是不变的。第二个程序是利用远调用的方法调用子程序的。在远调用情况下,主程序与子程序处在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS值是不同的。子程序调用后,堆栈中保留了返回地址的段地址及段内偏移量。第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及待统计的字符“b”)顺序压如堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。第三个程序,请采用分文件多模块程序设计方法实现,需注意和实验4中的习题4中采用的地址跳跃表实现方法区分开来,需注意外部符号的定义及其使用方法。预习子程序设计的基本方法,根据实验内容要求,画出子程序及主程序的流程图;熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。实验环境PC微机DOS操作系统或Windows操作系统MASM.EXE,LINK.EXE,DEBUG.COM或宏汇编集成环境实验步骤编辑、汇编三个源程序,生成相应的可执行文件(.EXE)用DEBUG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论