欢迎来到天天文库
浏览记录
ID:1245433
大小:307.00 KB
页数:10页
时间:2017-11-09
《实验三 编程实现子程序调用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验三编程实现子程序调用一、实验目的:1、进一步熟悉汇编语言子程序调用的思路和方法;2、掌握各类子程序的设计方思路和技巧;3、学习使用EMU8086对汇编程序进行单步调试;4、学习在WIN764位上运行汇编程序的编译、连接和运行;5、学习如何将十进制数转为ASCII码。二、实验要求:1、主程序由键盘输入一个数(<10),用子程序1实现DATA段以这个数为首连续十个整数填充字节数组buf。譬如显示提示:”Pleaseinputanumber:”,键盘输入3,执行子程序1后bufdb3,4,5,6,7,8,9,10,11,12。2、主程序实现十
2、个数求和,调用另一子程序2实现将和逐位转为ASCII码显示:”Sumis:xx”。3、提示:和不会超过十进制3位数,所以将和除以10,商即为十位数,余数即为个位数,再加上30H即分别可以得它们的ASCII码。三、实验流程图:四、实验过程:1、在EMU8086上编写程序,编写完程序的格式保存为.ASM,再保存到D:TRY文件夹里;2、打开软件DOSBOX0.74,可以看到Z:>,这是DOSBOX里的虚拟盘,我们采用mount命令将其转变到自己的D盘;如:mountd:d:try为打开D盘里的try文件夹,try文件夹作为汇编程序的存放位
3、置;3、键入D:,转换盘符;4、键入MASM,再输入汇编程序名(.asm文件):SY35、键入LINK,再输入编译程序名(.obj文件):SY36、键入SY3.EXE,运行文件四、实验结果:如上图所示。五、实验收获:通过此次实验,使我深刻的体会了如何调用子程序,在调用子程序时保护寄存器的重要性,还有如何运用堆栈保护程序运行过程中寄存器的变化。也学习了利用EMU8086对汇编程序进行单步调试,学会了从寄存器的变化中判断出程序哪里出错。其次,掌握了如何将十进制转为ASCII码,特别是三位十进制数的转换,一开始时没有考虑到“十个数的和”会超过三位
4、数,所以一旦和超过100,十位数则不是显示0-9之间的数字,而是显示到其他字符。最终将十进制转换为ASCII码的程序分为两部分,一部分是小于100的情况,另一部分是大于等于100的情况。再者,掌握了如何用一串连续的十个整数填充字节数组,如何对一个数组里的数进行求和运算。六、实验程序:;/###########################################################################*/;/#######################编程实现子程序的调用#################
5、###########*/;/###########################################################################*/stackSEGMENTstack'stack'DW2dup(0)stackENDSDATASEGMENTTSDB'Plesaseinputanumber(06、NDB100DUP(?)STACENDScodeSEGMENTMAINPROCfarassumeSS:STAC,CS:CODE,DS:DATAMOVAX,stacMOVSS,AXPUSHDSSUBAX,AXPUSHAXMOVAX,dataMOVDS,AX;/###########################################################################*/MOVDX,OFFSETTS;显示提示语MOVAH,9INT21HXORAX,AX;键入并显示一个字符,把字符的ASCII码存入AL中7、MOVAH,1INT21HMOVDL,0AH;换行PUSHAXMOVAH,2INT21HPOPAXMOVDI,OFFSETBUF;取BUF的首址存入DI中XORCX,CXCALLFUZHI;—1—调用子程序FUZHI实现DATA段以这个数为首连续十个整数填充字节数组bufXORAX,AXMOVCX,0AH;给LOOP2循环赋初值10MOVDI,OFFSETBUFLOOP2:ADDAX,[DI];主程序实现求上述十个数的和,存入AX中INCDILOOPLOOP2;循环10次CALLDELAY1S;—2—调用子函数延时1SPUSHAXCALLZ8、HUANG;—3—调用另一子程序ZHUANG实现将和逐位转为ASCII码显示POPAXMOVAH,4CH;返回DOSINT21HRETMAINENDP;/************
6、NDB100DUP(?)STACENDScodeSEGMENTMAINPROCfarassumeSS:STAC,CS:CODE,DS:DATAMOVAX,stacMOVSS,AXPUSHDSSUBAX,AXPUSHAXMOVAX,dataMOVDS,AX;/###########################################################################*/MOVDX,OFFSETTS;显示提示语MOVAH,9INT21HXORAX,AX;键入并显示一个字符,把字符的ASCII码存入AL中
7、MOVAH,1INT21HMOVDL,0AH;换行PUSHAXMOVAH,2INT21HPOPAXMOVDI,OFFSETBUF;取BUF的首址存入DI中XORCX,CXCALLFUZHI;—1—调用子程序FUZHI实现DATA段以这个数为首连续十个整数填充字节数组bufXORAX,AXMOVCX,0AH;给LOOP2循环赋初值10MOVDI,OFFSETBUFLOOP2:ADDAX,[DI];主程序实现求上述十个数的和,存入AX中INCDILOOPLOOP2;循环10次CALLDELAY1S;—2—调用子函数延时1SPUSHAXCALLZ
8、HUANG;—3—调用另一子程序ZHUANG实现将和逐位转为ASCII码显示POPAXMOVAH,4CH;返回DOSINT21HRETMAINENDP;/************
此文档下载收益归作者所有