课程设计(论文)任务书信息工程学院学院计算机科学与技术专业计算机2005-1班一、课程设计(论文)题目代码转换程序二、课程设计(论文)工作自2007年1月8日起至2007年1月12日止。三、课程设计(论文)地点:信息学院机房四、课程设计(论文)内容要求:1.本课程设计的目的(1)使学生增进对汇编语言的认识,加强用汇编语言编程的能力;(2)使学生掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。;(3)使学生了解和掌握汇编语言程序设计过程、方法及实现,为以后相关的课程的学习打下良好基础;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。2.课程设计的任务及要求1)基本要求:代码转换程序:实现大小写字母之间、二进制数和十六进制数之间以及十六进制数和十进制数转换2)创新要求:在基本要求达到后,可进行创新设计,如对一些错误信息的处理。3)课程设计论文编写要求(1)要按照书稿的规格打印誊写课程设计论文(2)设计论文装订按学校的统一要求完成4)参考文献:(1)、《IBM—PC汇编语言程序设计》(第二版)沈美明温冬婵编著清华大学出版社5)课程设计进度安排内容天数地点构思及收集资料1图书馆编写与调试3机房撰写论文1图书馆、机房学生签名:2007年1月8日课程设计(论文)评审意见(1)任务完成情况:优()、良()、中()、一般()、差();(2)工作量饱满:优()、良()、中()、一般()、差();(3)创新能力:优()、良()、中()、一般()、差();(4)论文规范:优()、良()、中()、一般()、差();(5)回答问题:优()、良()、中()、一般()、差();综合评定等级:优()、良()、中()、及格()、不及格()评阅人:职称:2007年1月12日华东交通大学课程设计报告目录一、需求分析..................1二、概要设计..................1三、详细设计..................3四、测试结果.................13五、设计体会.................14华东交通大学课程设计报告第1页一、需求分析1、实现大小写字母之间的转换:输入的字符串中,不是字母的字符不改变;大写字母改成小写字母时,若是大写字母则不改变;同样,小写字母改成大写字母时,若是小写字母则不改变2、二进制和十六进制数之间的转换:输入一个二进制数(或十六进制数),用十六进制数(或二进制数)表示输出;最多能把十六位二进制数(或四位十六进制数)用四位十六进制数(或十六位二进制数)表示输出;小于十六位(或四位)时按回车结束并输出3、十进制数和十六进制数之间的转换:输入一个十进制数(或十六进制数),用十六进制数(或十进制数)表示输出;最大能把十进制数65535(或十六进制数FFFF)转换成十六进制数FFFF(或十进制数65535)表示输出;小于65535(或FFFF)时按回车结束并输出二、概要设计整个程序由四个主要的子程序和若干个辅助子程序组成,实现六个转换功能:HEXIDEC用来把一个十六进制数转换成十进制数表示BINARY用来把十六制数转换为十六位二进制数表示DETOHE用来把一个十进制数转换成十六进制表示BETOHE用来把一个十六位二进制数转换成十六进制输出1、INPUT用来输入字符串2、HEXIBIN用来输入一个十六进制数,并存放在BX中3、BINIDEC用来把BX中十六进制转换到十进制4、DEC_DIV用来除以各位十进制的权5、PRINT用来把BX中的十六进制数转换成二进制6、DECIBIN输入一个五位的十进制数7、BINIHEX把BX中的十进制数转换成十六进制输出8、INBIN输入十六二进制数9、CRLF用来换行华东交通大学课程设计报告第2页开始输入数字((1~7),判断等于1调用BTOS等于2调用STOB等于3调用HTOB等于4调用BTOH等于5调用HTOD等于6调用DTOH调用INPUT宏展开GAIXIE调用INPUT宏展开GAIXIE调用HEXIBINCRLFPRINTCRLF调用INBINCRLFBINIHEXCRLF调用HEXIBINCRLFBINIDECCRLF调用DECIBINCRLFBINIHEXCRLF等于7则退出结束返回华东交通大学课程设计报告第3页三、详细设计GAIXIEMACROP1,P2,P3,P4,P5,P6;义该宏用来判定字母?P2:CMPBYTEPTR[SI],P3JBP5CMPBYTEPTR[SI],P4JNBP5CMPBYTEPTR[SI],'$';到$则结束JZP6P1BYTEPTR[SI],20HP5:INCSILOOPP2P6:LEADX,BUF1+2;出改写后的字母MOVAH,9;调用9号中断功能,输出字符串INT21HLEADX,BF;把BF首地址给CXMOVAH,9;调用9号中断功能INT21HJMPSTART;返回ENDMDATASEGMENT;义数据段BUFDB'**********choosetheoperation**********',0DH,0AHDB'1:bigtosmall',0DH,0AHDB'2:smalltobig',0DH,0AHDB'3:hexadecimaltobinary',0DH,0AHDB'4:binarytohexadecimal',0DH,0AHDB'5:hexadecimaltodecimal',0DH,0AHDB'6:decimaltohexadecimal',0DH,0AHDB'7:EXIT',0DH,0AH,'$'BFDB0DH,0AH,'$'BUF1DB21,?,20DUP(?);用来存放输入的字符串华东交通大学课程设计报告第4页BUF2DB'enterahexdata:$'BUF3DB'Theinputiswrong,chooseagainplease:$'BUF4DB'enteradecidata:$'BUF5DB'enterabindata:$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETBUF;出选择界面MOVAH,9;调用9号中断功能INT21HMOVAH,1;入要选择的操作INT21HPUSHAX;NT会改变AL的值,应压栈保护LEADX,BF;行MOVAH,9;调用9号中断功能INT21HPOPAX;把AX压栈保护CMPAL,'1';把AL中内容跟1比较JZBTOS;相等则跳转到CMPAL,'2'JZSTOBCMPAL,'3'JZHTOBCMPAL,'4'JZBTOHCMPAL,'5'JZHTODCMPAL,'6'华东交通大学课程设计报告第5页JZDTOHCMPAL,'7'JZEXITLEADX,BUF3;把BUF3的首地址给DXMOVAH,9INT21HCALLCRLF;调用子程序CALLJMPSTART;返回,重新选择EXIT:MOVAH,4CH;退出INT21HBTOH:CALLBETOHE;调用二进制转十六进制子程序HTOB:CALLBINARY;调用十六进制转二进制子程序HTOD:CALLHEXIDEC;调用十六进制转十进制子程序DTOH:CALLDETOHE;调用十进制转十六进制子程序BTOS:CALLINPUT;大写字母改为小写MOVCX,20;作为循环条件GAIXIEADD,NEXT1,'A','Z',N1,N2;宏GAIXIE展开STOB:CALLINPUT;小写字母改为大写MOVCX,20GAIXIESUB,NEXT2,'a','z',N3,N4INPUTPROCNEAR;输入字符串MOVDX,0;DX清零MOVDX,OFFSETBUF1;把BUF1的首地址给DXMOVAH,10;调用10号中断功能,输出字符串INT21HLEADX,BF;把BF首地址给DXMOVAH,9INT21HLEASI,BUF1+2MOVBL,[SI-1];把输入的字符个数给BLMOVBH,0;BH清零华东交通大学课程设计报告第6页MOVBYTEPTR[BX+SI+1],'$';把$作为字符串结束字符LEADX,BUF1+2MOVAH,9INT21HRET;返回INPUTENDPHEXIDECPROCNEAR;用该子程序把一个十六进制数转换成十进制数表示PUSHDS;保护初始数据段SUBAX,AX;AX清零PUSHAX;把AX压栈保护START1:LEADX,BUF2MOVAH,9INT21HCALLHEXIBIN;调用输入一个十六进制数子程序CMPAL,1BH;遇Esc则退出JZEXIT1CALLCRLF;换行CALLBINIDECCALLCRLFJMPSTART1;返回EXIT1:RETHEXIDECENDPHEXIBINPROCNEAR;输入一个十六进制数,并存放在BX中MOVBX,0;把BX清零MOVDX,0;作为输入四位的记数器INHEX:CMPDX,4;把DX跟4比较JNBHEXEND;大于则跳转MOVAH,1;输入数据INT21HCMPAL,1BH;遇到Esc则退出JZHEXEND华东交通大学课程设计报告第7页SUBAL,30H;判断是否数字或字母?否则跳出JLHEXENDCMPAL,10;判断是否数字JLADD_TO;是则存放BX中SUBAL,7;把AL内容减7转为字母CMPAL,10;判断是否小写字母(a~f)JLHEXENDCMPAL,16JLADD_TO;小于则跳转SUBAL,20H;判断是否大写字母(A~F)CMPAL,10JLHEXENDCMPAL,16JGEHEXENDADD_TO:MOVCL,4;作为循环条件SHLBX,CL;BX乘以16MOVAH,0ADDBX,AX;两数相加INCDX;DX加1JMPINHEXHEXEND:RETHEXIBINENDPBINIDECPROCNEAR;用来把BX中十六进制转换到十进制MOVCX,10000;把10000给CX,作为万位的权CALLDEC_DIV;调用除权子程序MOVCX,1000CALLDEC_DIVMOVCX,100CALLDEC_DIVMOVCX,10CALLDEC_DIV华东交通大学课程设计报告第8页MOVCX,1CALLDEC_DIVRETBINIDECENDPDEC_DIVPROCNEAR;除以各位十进制的权MOVAX,BX;把BX内容给AXMOVDX,0;DX清零DIVCXMOVBX,DXMOVDL,ALADDDL,30H;转换为ASSIIMOVAH,2INT21HRETDEC_DIVENDPCRLFPROCNEAR;换行LEADX,BFMOVAH,9INT21HRETCRLFENDPBINARYPROCNEAR;该子程序用来把十六制数转换为十六位二进制数表示START2:LEADX,BUF2MOVAH,9INT21HPUSHDS;把DS压栈SUBAX,AX;AX清零PUSHAXCALLHEXIBINCMPAL,1BHJZEXIT2华东交通大学课程设计报告第9页CALLCRLFCALLPRINTCALLCRLFJMPSTART2EXIT2:RETBINARYENDPPRINTPROCNEAR;把BX中的十六进制数转换成二进制MOVCX,16D;记数ROT:SHLBX,1D;每移一位最高位变为CFJCSET;CF为1则跳到SET,否则输出0MOVDL,30HMOVAH,2INT21HDECCXJNZROTRETSET:MOVDL,31H;输出1MOVAH,2INT21HDECCXJNZROTRETPRINTENDPDETOHEPROCNEAR;用该子程序来把一个十进制数转换成十六进制表示REPEAT:LEADX,BUF4MOVAH,9INT21HPUSHDSSUBAX,AXPUSHAX华东交通大学课程设计报告第10页CALLDECIBINCMPAL,1BHJZEXIT3CALLCRLFCALLBINIHEXCALLCRLFJ