资源描述:
《汇编语言程序设计实验六》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验六分支及循环程序设计一、 实验目的1、1、学习提示信息的显示及键盘输入字符的方法。2、2、掌握分支程序和循环程序的设计方法。二、 实验预习要求1、1、复习比较指令、转移指令、循环指令的用法。2、根据编程提示,编出汇编语言源程序。3、有兴趣的同学请编写出实验习题中的程序。三、 分支程序和循环程序简介1、 分支程序是根据不同条件执行不同处理过程的程序。分支程序的结构有两种:—种是二分支,—种是多分支。它们的共同特点是在满足某一条件时,将执行多个分支中的某—分支。2、 循环程序四、 实验内容在屏幕上显示提示信息“Pleaseinput10numbers:”,提示用户
2、输入10个数(数的范围在0~99之间),然后从键盘上读入这10个数。接着对这10个数从小到大进行排序,并统计0~59、60~79、80~99的数各有多少。最后在屏幕上显示排序后的数(每个数之间用逗号分隔)并显示统计的结果。显示格式如下:Sortednumbers:xx,xx,xx,xx,xx,xx,xx,xx,xx,xx0-59:xx60-79:xx80-99:xx代码:CALLDOSMACROFUNCTIONMOVAH,FUNCTIONINT21HENDMCRLFMACROMOVDL,0DHCALLDOS2MOVDL,0AHCALLDOS2ENDMDATASEGMENTMESS
3、AGEDB'Pleaseinput10number:',0DH,0AH,'$'NUMBERSDB10DUP(?)KB_BUFDB3ACTLENDB?BUFFERDB3DUP(?);输入的字符放在次区域中LE59DB0;0——5的个数GE60DB0;60——79的个数GE80DB0;80——99的个数SORTSTRDB'Sortednumbers'SORTNUMDB9DUP(20H,20H,','),20H,20H,0DH,0AHMESS00DB'0-59:',30H,30H,0DH,0AHMESS60DB'60-79:',30H,30H,0DH,0AHMESS80DB'80-99
4、:',30H,30H,0DH,0AH,'$'DATAENDS;数据段结束CODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXLEADX,MESSAGEMOVAH,09HINT21H;显示MESSAGE;从键盘读入数据并转化成二进制数保存MOVCX,10LEADI,NUMBERS;设置数据保存区指针LP11:LEADX,KB_BUFMOVAH,0AHINT21H;从键盘读入数据CMPACTLEN,0JZLP11CMPACTLEN,1JNZLP12MOVAL,BUFFER;若只有一
5、个数字ANDAL,0FH;转化成二进制JMPLP13LP12:MOVAH,BUFFER;若有二个数字MOVAL,BUFFER+1ANDAX,0F0FH;转化成BCD数AAD;转化成二进制数LP13:STOSB;保存数据CRLFLOOPLP11MOVBL,9LP21:LEASI,NUMBERSMOVCL,BLLP22:LODSB;?第一个数NiCMPAL,[SI];Ni<=Nj?JLELP23;若小于等于则不交换XCHGAL,[SI];否则交换Ni,NjMOV[SI-1],ALLP23:DECCLJNZLP22;若内循环未结束则继续DECBLJNZLP21;若外循环未结束则继续;对
6、NUMBERS中的10个数据进行统计,结果放在GE80,GE60和LE59中LEASI,NUMBERS;指向数据保存区MOVCX,10LP31:CMPBYTEPTR[SI],60JGELP32INCLE59JMPLP34LP32:CMPBYTEPTR[SI],80JGELP33INCGE60JMPLP34LP33:INCGE80LP34:INCSILOOPLP31;把排序后的10个数据转换成ASCII码依次存入SORTNUM字符中串中LEASI,NUMBERS;指向数据保存区LEADI,SORTNUM;指向字符串MOVCX,10LP41:LODSBCMPAL,10;大于10,则有
7、二位数字JGELP42ADDAL,30H;只有一位数字则直接转换MOVAH,20H;高位显示成空格JMPLP43LP42:AAM;转化成二位BCD数ADDAX,3030H;转化成ASCII码LP43:XCHGAH,AL;十位数放到AL中MOV[DI],AXADDDI,3LOOPLP41;把统计结果转化成ASCII码存入MESS80,MESS60,MESS00字符串中MOVAH,LE59CMPAH,10;大于10,则有二位数字JGELP51ADDAH,30H;只有一位数字则直接转换