您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 分支与循环程序设计实验
一.实验目的及实验环境实验目的:1、掌握分支程序的设计方法。2、掌握宏定义及宏调用的基本方法。3、了解小写和大写字母的ASCII码表示及其转换方法。了解数字及其它字符在的ASCII码表示方法。4、掌握循环程序的设计方法。5、掌握比较指令、转移指令和循环指令的使用方法。6、进一步掌握调试工具的使用方法实验环境:80x86系列微型计算机一台以及进行汇编语言程序设计所必需的编程工具(文本编辑器、ASM.EXE、LINK.EXE、DEBUG.EXE)二.实验内容1、从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。若输入为小写字母,显示“YouInputaLowercaseLetter!”;若输入为大写字母,显示“YouInputaUppercaseLetter!”;若输入为数字,显示“YouInputaDigit!”;若输入为其它字符,显示“YouInputOtherLetter!”。2、计算1+2+……n=?,其中n通过键盘输入。要求在屏幕上提供如下信息:Pleaseinputanumber(1627):;出现此信息后通过键盘输入一个小于628的无符号整数1+2+…..n=sum;其中n为用户输入的数,sum为所求的累加和程序运行情况如下图所示(说明:图中所运行程序允许累加和不大于一个32位二进制数所能表示的范围)。三.方案设计(一)分支程序设计实验1、编程指导数字09的ASCII码为30H39H;大写字母的ASCII码为41H5AH,小写字母的ASCII码为61H7AH。本题目将字符分为小写字母、大写字母、数字及其它字符,根据键入字符的ASCII码值判断其所属类型,并显示相应的信息。字符串显示使用功能号为09H的DOS功能调用,接收键盘输入的单个字符使用功能号为01H的DOS功能调用。2、流程图及程序框图(1)流程图(2)程序框架DATASEGMENTINFOR1DB0AH,0DH,PleasePressAnyKeytoinputaletter:$INFOR2DB0AH,0DH,YouInputaLowercaseLetter!$INFOR3DB0AH,0DH,YouInputaUppercaseLetter!$INFOR4DB0AH,0DH,YouInputaDigit!$INFOR5DB0AH,0DH,YouInputOtherLetter!$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETINFOR1MOVAH,09HCMPAL,'0'YYYYYY显示提示信息“PleasePressAnyKeytoinputaletter”及功能号为1的接收键盘输入单个字符的指令序列开始结束素、、(AL)’0’(AL)=’9’(AL)’A’(AL)=’Z’(AL)’a’(AL)=’z’输入的是小写字母,显示信息输入的是大写字母,显示信息输入的是数字,显示有关信息输入的是其它字符,显示信息显示信息“PleasePressAnyKeytoinputaletter”的指令序列以及接收从键盘输入一个字符的指令序列JBOTHERCMPAL,'9'JBEDIGITCMPAL,'A'JBOTHERCMPAL,'Z'JBEUPPERCMPAL,'a'JBOTHERCMPAL,'z'JBELOWERJMPPENDLOWER:JMPPEND;注意执行完一个分支后应使程序跳出UPPER:JMPPENDDIGIT:MOVDX,OFFSETINFOR4JMPPENDOTHER:PEND:MOVAH,4CHINT21HCODEENDSENDSTART3、课后习题在屏幕上显示信息“Areyoureallywanttoexit?”,然后从键盘输入一个字符,若输入“Y”或“y”,则显示“Thankyouforyourusing!”后程序结束;若输入“N”或“n”,则显示“Let'scontinue!”后程序结束;若输入其它字符,则显示“Youpressanerrorkey!”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。(二)循环程序设计实验1、编程指导(1)键盘输入的十进制数如368在计算机中是以33H,36H,38H形式存放的,如何将它们转换为一个二进制数101110000B,以便对累加循环的循环次数进行控制是本程序首先要解决的问题。将键盘输入的十进制数转换为二进制数的程序清单如下:显示“YouInputaLowercaseLetter!”的指令序列显示“YouInputaUppercaseLetter”的指令序列显示“YouInputaDigit!”的指令序列显示“YouInputOtherLetter!”的指令序列DATASEGMENTINF1DBPleaseinputanumber(0-65535):$IBUFDB7,0,6DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETINF1MOVAH,09HINT21HMOVDX,OFFSETIBUF;键入一个十进制数(65535)MOVAH,0AHINT21HMOVCL,IBUF+1;十进制数的位数送CXMOVCH,0MOVSI,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:DATASTART: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,BXINCBXLOOPLOOP2CODEENDSENDSTART3、实验习题从自然数1开始累加,直到累加和大于60000为止,显示累加的自然数的个数和接收从键盘输入的十进制数,并将其转换为二进制数(存AX寄存器)的指令序列将AX中存放的二进制数转换为十进制数并显示的指令序列从键盘输入一个十进制数,并将其转换为二进制数,存放在AX中开始结束素、、(CX)-1=0累加循环次数送CX(MOVCX,AX)AX清0(AX中存放累加和)BX送1(BX存放每次循环累加的数,每循环一次,BX值加1)ADDAX,BXINCBX累加和(在AX中)转换为十进制数并显示YN累加和。显示格式为:1+2+…+n=sum,其中n为累加个数,sum为累加和四.测试数据及运行结果1.分支程序设计实验课后题:2.循环程序设计实验课后题:五.总结通过实验三(分支程序设计实验),我熟悉掌握了分支程序的设计方法以及宏定义及宏调用的基本方法,了解了小写和大写字母的ASCII码表示及其转换方法以及数字及其它字符在的ASCII码表示方法,并对分支程序和宏指令更加熟悉,进一步理解和巩固课堂学习内容。通过实验二(循环程序设计实验),我学习和掌握了循环程序的设计方法以及比较指令、转移指令和循环指令的使用方法,并进一步掌握了调试工具的使用方法。只有熟练掌握,理解题目,对各个功能实现的先后顺序和之前执行的程序对之后执行的程序的影响心中有数,这样才能实现程序的功能。六.附录:1、分支程序设计实验(1)从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符。若输入为小写字母,显示“YouInputaLowercaseLetter!”;若输入为大写字母,显示“YouInputaUppercaseLetter!”;若输入为数字,显示“YouInputaDigit!”;若输入为其它字符,显示“YouInputOtherLetter!”。DATASEGMENTINFOR1DB0AH,0DH,PLEASEPRESSANYKEYTOINPUTALETTER:$INFOR2DB0AH,0DH,YOUINPUTALOWERCASELETTER!$INFOR3DB0AH,0DH,YOUINPUTAUPPERCASELETTER!$INFOR4DB0AH,0DH,YOUINPUTADIGIT!$INFOR5DB0AH,0DH,YOUINPUTOTHERLETTER!$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETINFOR1MOVAH,09HINT21HMOVAH,01HINT21HMOVDX,OFFSETINFOR1MOVAH,09HCMPAL,'0'JBOTHERCMPAL,'9'JBEDIGITCMPAL,'A'JBOTHERCMPAL,'Z'JBEUPPERCMPAL,'a'JBOTHERCMPAL,'z'JBELOWERJMPPENDLOWER:MOVDX,OFFSETINFOR2MOVAH,09HINT21HJMPPENDUPPER:MOVDX,OFFSETINFOR3MOVAH,09HINT21HJMPPENDDIGIT:MOVDX,OFFSETINFOR4MOVDX,OFFSETINFOR4MOVAH,09HINT21HJMPPENDOTHER:MOVDX,OFFSETINFOR5MOVAH,09HINT21HPEND:MOVAH,4CHINT21HCODEENDSENDSTART(2)在屏幕上显示信息“Areyoureallywanttoexit?”,然后从键盘输入一个字符,若输入“Y”或“y”,则显示“Thankyouforyourusing!”后程序结束;若输入“N”或“n”,则显示“Let'scontinue!”后程序结束;若输入其它字符,则显示“Youpressanerrorkey!”后程序结束(要求尽量使用宏指令以便使源程序更加简洁)。DATASEGMENTINFOR1DB0AH,0DH,PLEASEPRESSANYKEYTOINPUTALETTER:$INFOR2DB0AH,0DH,YOUINPUTALOWERCASELETTER!$INFOR3DB0AH,0DH,YOUINPUTAUPPERCASELETTER!$INFOR4DB0AH,0DH,YOUINPUTADIGIT!$INFOR5DB0AH,0DH,YOUINPUTOTHERLETTER!$DATAENDSCODESEGMENTASSUMECS:CODE,DS:D
本文标题:分支与循环程序设计实验
链接地址:https://www.777doc.com/doc-5667470 .html