您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 微机原理-循环设计实验报告
..一、实验目的1、掌握循环程序的设计方法。2、掌握比较指令、转移指令和循环指令的使用方法。3、进一步掌握调试工具的使用方法。二、实验预习要求1、复习比较指令、条件转移指令和循环指令。2、复习循环程序的结构、循环控制方法等知识。3、读懂“实验内容”中给出的将十进制数转换为二进制数以及将二进制数转换为十进制数的程序。4、根据“实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。5、从“实验习题”中任选一道题目,编写源程序,以便上机调试。三、实验内容计算1+2+……n=?,其中n通过键盘输入。要求在屏幕上提供如下信息:Pleaseinputanumber(1627):;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允..许累加和不大于一个32位二进制数所能表示的范围)。1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。将键盘输入的十进制数转换为二进制数的程序清单如下:DATASEGMENTINF1DBPleaseinputanumber(0-65535):$IBUFDB7,0,6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETINF1MOVAH,09HINT21HMOVDX,OFFSETIBUF;键入一个十进制数(65535)MOVAH,0AHINT21HMOVCL,IBUF+1;十进制数的位数送CXMOVCH,0..MOVSI,OFFSETIBUF+2;指向输入的第一个字符(最高位)MOVAX,0;开始将十进制数转换为二进制数AGAIN:MOVDX,10;((010+a4)10+…)10+a0MULDXANDBYTEPTR[SI],0FHADDAL,[SI]ADCAH,0INCSILOOPAGAINMOVAH,4CHINT21HCODEENDSENDSTART本程序功能:从键盘接收一个无符号十进制整数(小于65535),将其转换为二进制数,转换结果存在AX寄存器中。(2)累加结果为一个16位的二进制数,为了显示结果,必需把它们转换为十进制数。将二进制数转换为十进制数的程序清单如下:DATASEGMENTOBUFDB6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA..START:MOVAX,DATAMOVDS,AXMOVBX,OFFSETOBUF+5MOVBYTEPTR[BX],'$'MOVCX,10;做(DX):(AX)/10运算LOOP1:MOVDX,0;被除数高16位清0DIVCXADDDL,30H;将DL中的一位十进制数转换为ASCII码DECBXMOV[BX],DLORAX,AXJNZLOOP1;判断商是否为0,不为0继续MOVDX,BXMOVAH,09HINT21H;显示转换得到的十进制数MOVAH,4CHINT21HCODEENDSENDSTART..本程序功能:将存储在AX寄存器中的二进制数转换为十进制数并显示。2、流程图及程序框架(1)流程图(2)程序框架DATASEGMENTINF1DBPleaseinputanumber(0-65535):$IBUFDB7,0,6DUP(?)OBUFDB6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,AXMOVAX,0MOVBX,1LOOP2:ADDAX,BXINCBX接收从键盘输入的十进制数,并将其转换为二进制数(存AX寄存器)的指令序列从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOVCX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADDAX,BXINCBX累加和(在AX中)转换为十进制数并显示YN..LOOPLOOP2CODEENDSENDSTART3、完整源程序代码DATASEGMENTINF1DBPleaseinputanumber(0-65535):$IBUFDB7,0,6DUP(?)OBUFDB6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETINF1MOVAH,09H将AX中存放的二进制数转换为十进制数并显示的指令序列..INT21HMOVDX,OFFSETIBUFMOVAH,0AHINT21HMOVCL,IBUF+1MOVCH,0MOVSI,OFFSETIBUF+2MOVAX,0AGAIN:MOVDX,10MULDXANDBYTEPTR[SI],0FHADDAL,[SI]ADCAH,0INCSILOOPAGAINMOVCX,AXMOVAX,0MOVBX,1LOOP2:ADDAX,BXINCBXLOOPLOOP2MOVBX,OFFSETOBUF+5..MOVBYTEPTR[BX],'$'MOVCX,0AHLOOP1:MOVDX,0DIVCXADDDL,30HDECBXMOV[BX],DLORAX,AXJNZLOOP1MOVDL,0AHMOVAH,02HINT21HMOVDX,BXMOVAH,09HINT21HMOVAH,4CHINT21HCODEENDSENDSTART实验截图:..四、实验习题1、从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和累加和。显示格式为:1+2+…+n=sum其中n为累加个数,sum为累加和。datasegmentobufdb6dup(?)eudb'+','$'ebdb0dh,'=',0dh,'$'dataendsdisplaymacrostringmovdx,offsetstringmovah,09hint21h..endmcodesegmentmainprocfarassumecs:code,ds:datastart:movax,datamovds,axmovax,1movcx,0loop1:adccx,axcmpax,1jeallpushaxdisplayeupopaxall:callexchangeincaxcmpcx,60000jcloop1..pushaxpushcxdisplayebmovax,cxcallexchangepopcxpopaxmovah,4chint21hretmainendpexchangeprocnearpushaxpushbxpushcxmovbx,offsetobuf+5movbyteptr[bx],'$'movcx,10loop2:movdx,0..divcxadddl,30hdecbxmov[bx],dlorax,axjnzloop2movdx,bxmovah,09hint21hpopcxpopbxpopaxretexchangeendpcodeendsendstart实验截图:..2、从键盘输入6个加数N1、N2、N3、N4、N5和N6(均为14位的无符号十进制整数),求和并将计算结果在屏幕上显示出来。3、从键盘输入一个无符号十进制整数(小于65536),将其转换为二进制数,统计该二进制数中包含的1的个数,并将统计结果在屏幕上显示出来。4、从键盘输入N个无符号十进制整数(小于256),将其转换为二进制数后存放在字节变量BUF存储区中;对这N个数进行由大到小排序,排序后将其仍存储在BUF中;最后将排序后的结果在屏幕上显示出来。(说明,以上习题任选一道题,附上流程图及源程序代码,然后把其他的两道题删掉)五、实验小结这次实验虽然难度不大,但在做的过程中也遇到了不少困难,有些错误不容易找出来,必须仔细的看和修改,所以要求我们养成良好的编码风格和习惯,尤其是源程序很长的时候,这就显得尤为重要。
本文标题:微机原理-循环设计实验报告
链接地址:https://www.777doc.com/doc-7161758 .html