宏指令及子程序设计实验一、实验目的1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。3、了解宏指令与子程序的异同以及各自的适用场合。二、实验内容1、从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。要求:①在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现;②将键盘输入的十进制数转换成二进制数由子程序DTOB实现;③在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现;④将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。程序运行结果如右图所示。COUNTEQU10DATASEGMENTNUMDB10DUP(?)IBUFDB7,0,6DUP(?)OBUFDB6DUP(?)INFOR1DBPleaseInput10numbers:,0AH,0DH,'$'INFOR2DBThemaxfoundinthe10numberis$INFOR3DB0AH,0DH,'$'DATAENDSSTACKSEGMENTstackDATA2DW40DUP(?)TOPEQULENGTHDATA2STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXMOVAX,TOPMOVSP,AXDSTRINGMACROSTRINGPUSHDXPUSHAXMOVDX,OFFSETSTRINGMOVAH,09HINT21HPOPAXPOPDXENDMDSTRINGINFOR1MOVBX,OFFSETNUMMOVCX,COUNTLOOP1:CALLDTOBDSTRINGINFOR3MOV[BX],ALINCBXLOOPLOOP1MOVAX,OFFSETNUMPUSHAXMOVCX,COUNTPUSHCXCALLFMAXDSTRINGINFOR2CALLBTOADMOVAH,4CHINT21HDTOBPROCNEARPUSHCXMOVDX,OFFSETIBUFMOVAH,0AHINT21HMOVCL,IBUF+1MOVCH,0MOVSI,OFFSETIBUF+2MOVAX,0AGAIN:MOVDX,10MULDXANDBYTEPTR[SI],0FHADDAL,[SI]ADCAH,00HINCSILOOPAGAINPOPCXRETDTOBENDPFMAXPROCNEARMOVAL,NUMMOVSI,OFFSETNUMMOVCX,9LOOP2:INCSICMPAL,[SI]JAELOOP3XCHGAL,[SI]LOOP3:DECCXJNZLOOP2XORAH,AHMOVOBUF,ALRETFMAXENDPBTOADPROCNEARMOVBX,OFFSETOBUF+5MOVBYTEPTR[BX],'$'MOVCX,10LOOP4:MOVDX,0DIVCXADDDL,30HDECBXMOV[BX],DLORAX,AXJNZLOOP4MOVDX,BXMOVAH,09HINT21HRETBTOADENDPCODEENDSENDSTART2、实验习题:计算1+2+3+……+N.要求N由键盘输入;给出必要的提示信息(由宏调用实现);累加功能由子程序调用实现;二进制数(累加和)转换为十进制数并显示子程序调用实现.(1)实验源代码:STACKSEGMENTstackDB100DUP(?)STACKENDSDATASEGMENTINF1DBPleaseinputanumberN(0-65535):$IBUFDB7,0,6DUP(?)OBUFDB6DUP(?)INF2DB0AH,0DH,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXDSTRINGMACROSTRINGPUSHDXPUSHAXMOVDX,OFFSETSTRINGMOVAH,09HINT21HPOPAXPOPDXENDMDSTRINGINF1CALLDTOBCALLADDNCALLBTOADMOVAH,4CHINT21HDTOBPROCNEARPUSHCXMOVDX,OFFSETIBUFMOVAH,0AHINT21HMOVCL,IBUF+1MOVCH,0MOVSI,OFFSETIBUF+2MOVAX,0AGAIN:MOVDX,10MULDXANDBYTEPTR[SI],0FHADDAL,[SI]ADCAH,0LOOPAGAINPOPCXRETDTOBENDPADDNPROCNEARMOVCX,AXXORAX,AXMOVBX,01HLOOP5:ADDAX,BXINCBXLOOPLOOP5RETADDNENDPBTOADPROCNEARMOVBX,OFFSETOBUF+5MOVBYTEPTR[BX],'$'MOVCX,10LOOP4:MOVDX,0DIVCXADDDL,30HDECBXMOV[BX],DLORAX,AXJNZLOOP4MOVDX,OFFSETINF2MOVAH,09HINT21HMOVDX,BXMOVAH,09HINT21HRETBTOADENDPCODEENDSENDSTART五、实验小结通过本次实验,使我对宏指令、子程序的理解有了进一步的加深,本次实验难度挺大的,实验课上没有做完,还是后来回宿舍以后,才将本次实验做完的,程序调试也不容易。但要是在做的过程中对程序有足够的理解,并且够仔细,便能提高实验的效率。