免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信 息 工 程 学 院课 程 设 计 报 告 设计题目:_代码转换程序设计_名 称: 微机原理与接口课程设计 班 级:_通信工程1002班_姓 名:_卓自强 _王可_学 号: _2010013544 2010013524_设计时间: 至 指导教师:_卢清平_评 语: 评阅成绩: 评阅教师: 一、程设计的性质和目的 通过课程设计,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关软件程序设计的基本知识和基本方法,硬件电路的设计等,通过实际动手能力的培养,进一步熟悉汇编语的结构和使用方法,掌握软硬结合的控制程序设计,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平,增进对汇编语言的认识,加强用汇编语言编程的能力; 掌握汇编语言的中断调用功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制等。了解和掌握汇编语言程序设计过程、方法及实现,为以后相关的课程的学习打下良好基础。二、课程设计要求1、遵循模块化、结构化的程序设计方法。2、要求程序必须正确。3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。4、要求程序结构合理,语句使用得当。5、适当追求编程技巧和程序运行效率。三、主要仪器设备及软件 Pc机,MASM汇编软件,绘图软件,等4、 课程设计题目及要求 题目:代码转换程序要求:完成一个字母或数制之间的转化程序,主程序分别具有5种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“q”键退出。5种可选择的子功能分别为:1)实现小写字母向大写字母的转换2)实现大写字母向小写字母的转换3)实现二进制数向十六进制数的转换4)实现十六进制数向二进制数的转换5)实现十六进制数向十进制数的转换五、课题分析及设计思路1、实现大小写字母之间的转换:输入的字符串中,不是字母的字符不改变;大写字母改成小写字母时,若是大写字母则不改变;同样,小写字母改成大写字母时,若是小写字母则不改变2、二进制和十六进制数之间的转换:输入一个二进制数(或十六进制数),用十六进制数(或二进制数)表示输出;最多能把十六位二进制数(或四位十六进制数)用四位十六进制数(或十六位二进制数)表示输出;小于十六位(或四位)时按“q”结束并输出3、十进制数和十六进制数之间的转换:输入一个十六进制数,用十进制数表示输出;最大能把十六进制数FFFF转换成十进制数65535表示输出;小于FFFF时按“q”结束并输出整个程序由四个主要的子程序和若干个辅助子程序组成,实现六个转换功能:HEXIDEC用来把一个十六进制数转换成十进制数表示BINARY用来把十六制数转换为十六位二进制数表示BETOHE用来把一个十六位二进制数转换成十六进制输出1、INPUT用来输入字符串2、HEXIBIN用来输入一个十六进制数,并存放在BX中3、BINIDEC用来把BX中十六进制转换到十进制4、DEC_DIV用来除以各位十进制的权5、PRINT用来把BX中的十六进制数转换成二进制8、INBIN输入十六二进制数9、CRLF用来换行六、程序主要流程开始输入数字(16),判断等于1调用BTOS等于2调用STOB等于3调用HTOB等于4调用BTOH等于5调用HTOD调用INPUT宏展开GAIXIE调用INPUT宏展开GAIXIE调用HEXIBINCRLFPRINTCRLF调用INBINCRLFBINIHEXCRLF调用HEXIBINCRLFBINIDECCRLF返回等于7则退出结束7、 程序及主要代码与分析7.1程序及主要代码GAIXIE MACRO P1,P2,P3,P4,P5,P6 ;义该宏用来判定字母?P2: CMP BYTE PTR SI,P3 JB P5 CMP BYTE PTR SI,P4 JNB P5 CMP BYTE PTR SI,$ ;到$则结束 JZ P6 P1 BYTE PTR SI,20HP5: INC SI LOOP P2P6: LEA DX,BUF1+2 ;出改写后的字母 MOV AH,9 ;调用9号中断功能,输出字符串 INT 21H LEA DX,BF ;把BF首地址给CX MOV AH,9 ;调用9号中断功能 INT 21H JMP START ;返回 ENDMDATA SEGMENT ;义数据段BUF DB *choose the operation*,0DH,0AH DB 1:big to small,0DH,0AH DB 2:small to big,0DH,0AH DB 3:hexadecimal to binary,0DH,0AH DB 4:binary to hexadecimal,0DH,0AH DB 5:hexadecimal to decimal,0DH,0AH DB 6/q:EXIT,0DH,0AH,$BF DB 0DH,0AH,$ BUF1 DB 21,?,20 DUP(?) ;用来存放输入的字符串BUF2 DB enter a hex data:$BUF3 DB The input is wrong,choose again please:$ BUF4 DB enter a deci data:$BUF5 DB enter a bin data:$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF ;出选择界面 MOV AH,9 ;调用9号中断功能 INT 21H MOV AH,1 ;入要选择的操作 INT 21H PUSH AX ;NT 会改变AL的值,应压栈保护 LEA DX,BF ;行 MOV AH,9 ;调用9号中断功能 INT 21H POP AX ;把AX压栈保护 CMP AL,1 ;把AL中内容跟1比较 JZ BTOS ;相等则跳转到 CMP AL,2 JZ STOB CMP AL,3 JZ HTOB CMP AL,4 JZ BTOH CMP AL,5 JZ HTOD CMP AL,6 JZ EXIT CMP AL,71H JZ EXIT LEA DX,BUF3 ;把BUF3的首地址给DX MOV AH,9 INT 21H CALL CRLF ;调用子程序CALL JMP START ;返回,重新选择EXIT:MOV AH,4CH ;退出 INT 21H BTOH:CALL BETOHE ;调用二进制转十六进制子程序HTOB:CALL BINARY ;调用十六进制转二进制子程序HTOD:CALL HEXIDEC ;调用十六进制转十进制子程序BTOS:CALL INPUT ;大写字母改为小写 MOV CX,20 ;作为循环条件 GAIXIE ADD,NEXT1,A,Z,N1,N2 ;宏GAIXIE展开STOB:CALL INPUT ;小写字母改为大写 MOV CX,20 GAIXIE SUB,NEXT2,a,z,N3,N4INPUT PROC NEAR ;输入字符串 MOV DX,0 ;DX清零 MOV DX,OFFSET BUF1 ;把BUF1的首地址给DX MOV AH,10 ;调用10号中断功能,输出字符串 INT 21H LEA DX,BF ;把BF首地址给DX MOV AH,9 INT 21H LEA SI,BUF1+2 MOV BL,SI-1 ;把输入的字符个数给BL MOV BH,0 ;BH清零 MOV BYTE PTR BX+SI+1,$ ;把$作为字符串结束字符 LEA DX,BUF1+2 MOV AH,9 INT 21H RET ;返回INPUT ENDPHEXIDEC PROC NEAR ;用该子程序把一个十六进制数转换成十进制数表示 PUSH DS ;保护初始数据段 SUB AX,AX ;AX清零 PUSH AX ;把AX压栈保护START1: LEA DX,BUF2 MOV AH,9 INT 21H CALL HEXIBIN ;调用输入一个十六进制数子程序 CMP AL,71H ;遇q则退出 JZ EXIT1 CALL CRLF ;换行 CALL BINIDEC CALL CRLF JMP START1 ;返回EXIT1:RETHEXIDEC ENDPHEXIBIN PROC NEAR ;输入一个十六进制数,并存放在BX中 MOV BX,0 ;把BX清零 MOV DX,0 ;作为输入四位的记数器INHEX:CMP DX,4 ;把DX跟4比较 JNB HEXEND ;大于则跳转 MOV AH,1 ;输入数据 INT 21H CMP AL,71H ;遇到q则退出 JZ HEXEND SUB AL,30H ;判断是否数字或字母?否则跳出 JL HEXEND CMP AL,10 ;判断是否数字 JL ADD_TO ;是则存放BX中 SUB AL,7 ;把AL内容减7转为字母 CMP AL,10 ;判断是否小写字母(af) JL HEXEND CMP AL,16 JL ADD_TO ;小于则跳转 SUB AL,20H ;判断是否大写字母(AF) CMP AL,10 JL HEXEND CMP AL,16 JGE HEXENDADD_TO:MOV CL,4 ;作为循环条件 SHL BX,CL ;BX乘以16 MOV AH,0 ADD BX,AX ;两数相加 INC DX ;DX加1 JMP INHEXHEXEND:RETHEXIBIN ENDPBINIDEC PROC NEAR ;用来把BX中十六进制转换到十进制 MOV CX,10000 ;把10000给CX,作为万位的权 CALL DEC_DIV ;调用除权子程序 MOV CX,1000 CALL DEC_DIV MOV CX,100 CALL DEC_DIV MOV CX,10 CALL DEC_DIV MOV CX,1 CALL DEC_DIV RETBINIDEC ENDPDEC_DIV PROC NEAR ;除以各位十进制的权 MOV AX,BX ;把BX内容给AX MOV DX,0 ;DX清零 DIV CX MOV BX,DX MOV DL,AL ADD DL,30H ;转换为ASSII MOV AH,2 INT 21H RETDEC_DIV ENDPCRLF PROC NEAR ;换行 LEA DX,BF MOV AH,9 INT 21H RETCRLF ENDPBINARY PROC NEAR ;该子程序用来把十六制数转换为十六位二进制数表示START2:LEA DX,BUF2 MOV AH,9 INT 21H PUSH DS ;把DS压栈 SUB AX,AX ;AX清零 PUSH AX CALL HEXIBIN CMP AL,71H JZ EXIT2 CALL CRLF CALL PRINT CALL CRLF JMP START2EXIT2:RETBINARY ENDPPRINT PROC NEAR ;把BX中的十六进制数转换成二进制 MOV CX,16D ;记数ROT: SHL BX,1D ;每移一位最高位变为CF JC SET ;CF为1则跳到SET,否则输出0 MOV DL,30H MOV AH,2 INT 21H DEC CX JNZ ROT RETSET:MOV DL,31H ;输出1 MOV AH,2 INT 21H DEC CX JNZ ROT RET PRINT ENDPDECIBIN PROC NEAR ;输入一个五位的十进制数 MOV BX,0 MOV CX,0NEWCHAR:CMP CX,5 JNB EXIT4 MOV AH,1 INT 21H CMP AL,71H JZ EXIT4 SUB AL,30H JL EXIT4 CMP AL,9 JG EXIT4 CBW INC CX XCHG AX,BX MOV DX,10 MUL DX XCHG AX,BX ADD BX,AX JMP NEWCHAREXIT4:RETDECIBIN ENDPBINIHEX PROC NEAR ;把BX中的十进制数转换成十六进制输出 MOV CH,4ROTATE:MOV CL,4 ROL BX,CL ;把BX中高四位移到低四位,放到AL中 MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH ;判断是否为数字 JL PRINTIT ADD AL,7PRINTIT:MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ ROTATERETBINIHEX ENDPBETOHE PROC NEAR ;用该子程序来把一个十六位二进制数转换成十六进制数START3:LEA DX,BUF5 MOV AH,9 INT 21H PUSH DS SUB AX,AX PUSH AX CALL INBIN CMP AL,71H JZ EXIT5 CALL CRLF CALL BINIHEX CALL CRLF JMP START3EXIT5:RETBETOHE ENDPINBIN PROC NEAR ;输入十六二进制数 MOV BX,0 MOV CX,0PUTIN:CMP CX,16 JNB EXIT6 MOV AH,1 INT 21H CMP AL,1BH JZ EXIT6 SUB AL,30H JL EXIT6 CMP AL,1 JG EXIT6 CBW INC CX XCHG AX,BX MOV DX,2 MUL DX XCHG AX,BX ADD BX,AX JMP PUTINEXIT6:RETINBIN ENDPCODE ENDS END START7.2算法分析 小写字母的ASCII码比大写字母的ASC码大20H,因此,大写字母转换成小写字母就是将大写字母的ASCII码加20H,反之,小写字母转换成大写字母就是将小写字母的ASCII码减20H。二进制转换为十六进制在数据段中定义一个空间用于存储输入的二进制数,每一位二进制数占一个字节,在输入二进制的时候,假设用一个指针DI指向定义的段,每输入一位二进制数,指针就加一。当输入结束时,指针指向存储二进制最低位的位置。再用另外一个指针SI指向段。在取数时,将所取的数减30H,将它由ASCII码变成真正的二进制。首先二进制数最后一位取数,如果该数是1,就将DL加1。第一个指针DI减1,指向倒数第二位,如果倒数第二位是1,将DL加2。DI减1,再取倒数第三位,如果取得的数是1,DL就加4。DI减1,取倒数第四位,如果取得1,DL就加8。这样就将二进制的第四位求和,DL再加30H,与39H比较,如果小于39H,就将DL入栈。如果大于39H,再将DL加07H,然后将其入栈就这样向前取数,每四位像前面一样求和、入栈。每次取数后,DI减1,比较SI和DI,如果两者相等,表示数已取完,直接进入入栈操作。就这样每四位求和、转换、入栈,就将每四位作为一体转换为一位十六进制数。由于低位先入栈,所以每出栈一位并显示,最后得到的十六进制也是从高到低的十六进制转换为二进制输入一位十六进制数,将它由ASCII码形式转换为二进制形式,采用移位指令将其左移四位,再与另个输入的十六进制数的二进制形式相与得到一个八位二进制数,假设将它赋
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房屋挂户转户协议书
- 房屋改造分房协议书
- 房屋装修欠款协议书
- 房屋资产分配协议书
- 房屋转售合同协议书
- 房管中心分家协议书
- 手机上查离婚协议书
- 手机活动促销协议书
- 打人受伤协议书模板
- 打地坪工程合同范本
- 茶楼入股分红合作协议书(2025年)
- 护理操作并发症预防与处理考核试题题库及答案
- 2025年1月广西2025届高三调研考试历史试卷(含答案详解)
- 牵引变电所安装
- 英语口语直通车(浙江理工大学)知到智慧树章节答案
- CAD教程-AutoCAD2024全套教程
- 之 第十六讲 文明新路与人类命运共同体-《中华民族共同体概论》大讲堂
- 北京高考语文三年模拟真题(21-23年)知识点汇编-古诗词赏析
- 我们的队歌(三年级中队课)省公开课获奖课件市赛课比赛一等奖课件
- 2024施工现场临时用电规范管理协议版
- 大学生魅力讲话实操学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论