还剩14页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
一.实验目的及实验环境实验环境
1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法
23、了解宏指令与子程序的异同以及各自的适用场合实验环境系列微型计算机一台以及进行汇编语言程序设计所必需的编程工具:80x86(文本编辑器、ASM.EXE.LINK.EXE DEBUG.EXE)S二.实验内容从键盘输入10个无符号十进制飞MS-DOS方式Jnra二隹|圜囹|宜同Aj区8x12J[数(小于),将其转换为二进制数并存放在字节型变量中,找出其中的最256NUM大数,并将找出的最大数在屏幕上显示出来numbers要求
①在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现;
②将键盘输入的十进制数转换成二进制数由子程序DTOB实现;in the10numbers is234
③在个无符号字节型二进制数中找出最大数的功能由子程序实现;N FMAX
④将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现:\hDeT31942608353022e2416\32511-P-D150MOV AH,4CHINT21HDTOB PROCNEARPUSH CXMOV DX,OFFSET IBUFMOV AH,0AHINT21HMOV CLJBUF+1MOV CH,0MOV SI,OFFSET IBUF+2MOV AX,0AGAIN:MOV DX,10MUL DXANDBYTE PTR[SI],0FHADD AL,[SI]ADC AH,OOHINC SILOOPAGAINPOP CXRETDTOBENDPFMAX PROC NEARMOV AL,NUMMOV SI,OFFSET NUMMOV CX,9LOOP2:INC SICMPAL,[SI]JAE LOOP3XCHG AL,[SI]LOOP3:DEC CXJNZ LOOP2XOR AH,AHMOV OBUF,ALRETFMAX ENDPBTOADPROC NEARMOV BX,OFFSET OBUF+5MOV BYTE PTRMOV CX,10LOOP4:MOV DX,0DIV CXADDDL,30HDEC BXMOV[BX],DLOR AX,AXJNZ LOOP4MOV DX,BXMOV AH,09HINT21HRETBTOAD ENDPCODEENDSEND START2实验课后习题源代码STACK SEGMENTSTACKDB100DUPSTACK ENDSDATASEGMENTINF1DB Pleaseinput a number N:$HIBUF DB7,0,6DUPOBUF DB6DUPINF2DB OAHQDHWDATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX□STRING MACROSTRINGPUSH DXPUSHAXMOV DX,OFFSET STRINGMOVAH,09HINT21HPOP AXPOPDXENDM□STRING INF1CALL DTOBCALLADDNCALL BTOADMOVAH,4CHINT21HDTOB PROCNEARPUSH CXMOV DX,OFFSET IBUFMOVAH,0AHINT21HMOV CLJBUF+1MOV CH,0MOV SI,OFFSET IBUF+2MOV AX,0AGAIN:MOV DX,10MUL DXANDBYTEPTR[SI],0FHADD AL,[SI]ADC AH,0INC SILOOPAGAINPOP CXRETDTOBENDPADDN PROCNEARMOV CX,AXXOR AX,AXMOV BX,01HLOOP5:ADD AX,BXINC BXLOOPLOOP5RETADDN ENDPBTOADPROCNEARMOV BX,OFFSET OBUF+5MOV BYTEPTR[BX],$MOV CX,10LOOP4:MOVDX,0DIV CXADDDL,30HDEC BXMOV[BX],DLXOR AX,0JNZLOOP4MOVDX,OFFSET INF2MOVAH,09HINT21HMOV DX,BXMOV AH,09HINT21HRETBTOADENDPCODE ENDSENDSTART程序运行结果如右图所示三,方案设计
1、编程指导1显不提不信息的宏指令DSTRING的编写宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择DSTRING MACROSTRINGPUSH DXPUSHAXMOV DX,OFFSET STRINGMOVAH,09HINT21HPOP AXPOPDXENDM下面给出实现提示信息显示的宏指令的定义请读者注意,宏指令应该先定义,后调用因此,宏定义通常紧跟在代码段中段寄存器赋值指令之后给出将键盘输入的十进制数转换为二进制数的子程序的编写2DTOB子程序的定义方法请参阅教材子程序设计”一节将十进制数转换为“564二进制数的程序代码请参阅本书
24.3实验内容,中“编程指导”部分在个无符号字节型二进制数中找出最大数的子程序的编写3N FMAX请参阅教材循环程序设计”一节例“
5635.12o4将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序的编写BTOAD程序代码请参阅本书实验内容”中“编程指导”部分“
2432、程序框架COUNT EQU10DATA SEGMENTNUMDB10DUPIBUF DB7,0,6DUPOBUF DB6DUPINFOR1DB Tleaseinput10numbers:”QAH,ODH,$INFOR2DB HThemax found in the10numbers is$HINFOR3DB0AH,0DH,TDATA ENDSSTACKSEGMENT stackDATA2DW40DUPTOP EQULENGTH DATA2STACK ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACKstart:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOP定义显示字符串信息的宏指令DSTRINGMOV SP,AXDSTRING INFOR1MOVBX,OFFSET NUMMOVCX,COUNTLOOP1:CALL DTOBDSTRING INFOR3MOV[BX],ALINC BXLOOPLOOP1MOV AX,OFFSET NUMPUSHAX;通过堆栈向子程序传递参数(数据个数及数据在数据段内的偏移地址)MOVCX,COUNTPUSH CXCALLFMAX□STRING INFOR2CALL BTOADMOVAH,4CH定义将键盘输入的十进制数转换为二进制数的子程序DTOBINT21H定义在个无符号字节型二进制数中找出最大数的子程序N FMAX定义将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序BTOADCODE ENDSENDstart、实验习题3计算要求由键盘输入;给出必要的提示信息(由宏调用实现);累加功1+2+3+……No N.测试数据及运行结果!1!能由子程序调用实现;二进制数(累加和)转换为十进制数并显示由子程序调用实现
(1)从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来:\MASMMASM AicrosoftR MacroAssembler Version
5.00opyright CMicrosoft Corp1981-1985,
1987.All rightsreserved.Ibject filenameLA.OBJ]:tource listing[NUL.LSI]:ross-reference[NUL.CRF]:49946+414694Bytes symbolspace free0Warning Errors0Severe Errorsl:\MASMLINK ABMPersonal ComputerLinkerVersion
2.00OCopyright IBMCorp1981,1982,1983tun File[A.EXE]ist File[NUL.MAPI:ibraries[.LIB]:10numbers:foundin the10numbers is92()课后题2计算要求由键盘输入;给出必要的提示信息(由宏调用实现);1+2+3+……No N累加功能由子程序调用实现;二进制数(累加和)转换为十进制数并显示由子程序调用实现D:\MASMMASM BMicrosoftR MacroAssembler Version
5.00Copyright CMicrosoft Corp1981-1985,
1987.All rightsreserved.Object filename[B.OBJ]:Source listing[NUL.LST]:Cross-reference[NUL.CRF]:49948+414692Bytes symbolspace free0Warning Errors0Severe ErrorsD:\MASMLINK BIBMPersonal ComputerLinkerVersion
2.00OCopyright IBMCorp1981,1982,1983Run File[B.EXE1:List File[NUL.MAP1:Libraries[.LIB]:D:\MASMBPlease inputa numberN:136986425TXame37280308h1D:\MASMBPlease inputa numberN:1055D:\MASMBPlease inputanumberN:1005050五.总结通过此次实验我熟悉了宏指令、宏定义、宏调用以及宏展开的概念,掌握了宏指令的定义与调用的方法,子程序的定义、调用以及调用程序与子程序之间参数的传递方法,并了解了宏指令与子程序的异同以及各自的适用场合这次实验总体来说较难,一开始没有成功,最终通过研究课本和同学讨论,再此进行调试才得到了正确的程序要想熟练地掌握会汇编语言,还要更多地练习六.附录1宏指令及子程序设计源代码COUNT EQU10DATA SEGMENTNUMDB10DUPIBUF DB7,0,6DUPOBUF DB6DUPINFOR1DB Tleaseinput10numbers:”QAH,ODH;$INFOR2DB HThemax foundinthe10numbers is$”INFOR3DB0AHQDH,$DATA ENDSSTACKSEGMENT stackDATA2DW40DUPTOP EQULENGTH DATA2STACK ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AX□STRING MACROSTRINGPUSH AXMOVDX,OFFSET STRINGMOVAH,09HINT21HPOP AXPOPDXENDM□STRING INFOR1MOVBX,OFFSET NUMMOVCX,COUNTLOOP1:CALL DTOB□STRING INFOR3MOV[BX],ALINC BXLOOPLOOP1MOV AX,OFFSET NUMPUSHAXMOV CX,COUNTPUSH CXCALLFMAX□STRINGINFOR2CALL BTOAD。