微机专业课程设计报告.doc

上传人:牧羊曲112 文档编号:1598829 上传时间:2022-12-10 格式:DOC 页数:35 大小:278KB
返回 下载 相关 举报
微机专业课程设计报告.doc_第1页
第1页 / 共35页
微机专业课程设计报告.doc_第2页
第2页 / 共35页
微机专业课程设计报告.doc_第3页
第3页 / 共35页
微机专业课程设计报告.doc_第4页
第4页 / 共35页
微机专业课程设计报告.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《微机专业课程设计报告.doc》由会员分享,可在线阅读,更多相关《微机专业课程设计报告.doc(35页珍藏版)》请在三一办公上搜索。

1、微机专业课程设计报告摘要汇编语言实质就是机器语言的一个高级的形式。微机原理与接口技术课程要求掌握汇编语言编辑,调试技术及接口芯片的编程与使用。作为自动化专业的学生这门课更是必须掌握的,是我们学习更深层次的专业知识的基础。本次课程设计利用汇编语言的特点,编写程序,通过键盘输入一个16进制数,通过屏幕提示菜单选择转换成2进制,8进制或者10进制数并显示。程序设计由一个输入16进制数的子程序、输出2进制的子程序、输出8进制的子程序、输出10进制的子程序,然后利用CALL指令及DOS指令编写出主程序及将结果在屏幕上显示出来。编写程序的过程,包括程序功能分析、划分程序模块、设计程序流程图、编写程序、调试

2、程序和结果分析。通过此课程设计的汇编语言练习,可以熟悉汇编语言的寻址方式和指令系统,BIOS和DOS系统功能调用,程序设计方法并熟悉汇编的编程环境。关键字: 汇编语言 数制转换 DOS调用 程序调试数制转换程序设计1 设计意义及要求 设计意义通过课程设计,能够对所学知识有更进一步的理解,并能掌握学习理论时没有注意的细节。调试程序,排除故障有助于提高分析问题、解决问题的能力。课程设计中碰到的挫折,有助于养成良好的学习习惯、严谨的工作作风。通过此课程设计的汇编语言练习,可以熟悉汇编语言的寻址方式和指令系统,BIOS和DOS系统功能调用,程序设计方法并熟悉汇编的编程环境。 设计要求设计内容:编写程序

3、,通过键盘输入一个16进制数,通过屏幕提示菜单选择转换成2进制,8进制或者10进制数并显示。设计要求:1) 按屏幕提示要求输入,从屏幕上获得正确结果。2)了解汇编语言的设计方法,熟悉汇编语言的寻址方式、指令系统和DOS系统功能调用画出流程图,按照自己目的编写源程序,并以模块化方式注释源程序。3)画出流程图,按照自己目的编写源程序,并以模块化方式注释源程序。4)撰写实验报告,认真完成报告。报告内容包括:软件思想,流程图,源程序及程序注释调试记录及结果分析;总结;参考资料;附录:芯片资料或程序清单。附加设计要求:若输入的16进制不是0至F间的数字,则显示出错信息,并要求重新输入。2 方案论证 需求

4、分析1)十六进制转换成二进制:输入一个十六进制数,用二进制数表示输出;最多能把四位十六进制数用十六位二进制数表示输出。2)十六进制转换成十进制数:输入一个十六进制数,用十进制数表示输出;最大能把十六进制数FFFF转换成十进制数65535表示输出。3)十六进制转换成八进制数:输入一个十六进制数,用八进制数表示输出;最大能把十六进制数FFFF转换成八进制数表示输出。要求通过键盘输入一个16进制数,通过屏幕提示菜单选择转换成2进制,8进制或者10进制数并显示。根据此要求需要设计一个输入16进制数的子程序、输出2进制的子程序、输出8进制的子程序、输出10进制的子程序,然后利用CALL指令及DOS指令编

5、写出主程序及将结果在屏幕上显示出来。 设计过程 进制介绍1)十进制数:十进制的基本运算规则是“逢十进一”的。上例中右边第一位为个位,记作100;第二位为十位,记作 101;第三、四位为百位和千位,记作 102 和103 。通常把100、101、102、103 称为是对应数位的权,各数位的权都是基数的幂。每个数位对应的数字符号称为系数。显然,某数位的数值等于该位的系数和权的乘积。 2)二进制数 ( Binary ) :与十进制类似,二进制的基数为2 ,即二进制中只有两个数字符号(0和1)。二进制的基本运算规则是“逢二进一”,各位的权为 2 的幂。 3)八进制数 ( Octal ): 在八进制中,

6、基数为8 ,它有0至8八个数字符号,八进制的基本运算规则是“逢八进一”,各数位的权是 8 的幂。 4)十六进制数 (Decimal): 在十六进制中,基数为16 ,它有 0 F 十六个数字符号,十六进制的基本运算规则是“逢十六进一”,各数位的权是 16 的幂。 进制转换1)十六进制数转换成二进制数因为四位二进制数正好表示 0 F 16个数字,所以一个十六进制数要转换成二进制数时,以小数点为界分别向左向右开始,每四位分为一组,一组一组地转换成对应的十六进制数字。若最后不足四位时,整数部分在最高位前面加 0 补足四位再转换十六进制与二进制对照表如下:表2-1 十六进制与二进制对照表16进制0123

7、45672进制0000000100100011010001010110011116进制89ABCDEF2进制100010011010101111001101111011112)十六进制数转换成十进制数把任意十六进制写成位权展开式后,再求和,就可以得到对应的十进制数。3)十六进制数转换成八进制数先将十六进制数转换成二进制数,再将二进制数转换成八进制数。八进制与二进制对照表如下:表2-2 八进制与二进制对照表8进制012345672进制000001010011100101110111由表2-1和表2-2可从16进制转换到2进制,再从2进制转换到8进制。综合以上,可编写16进制转换成2进制、16进制

8、转换成10进制、16进制转换成8进制的子程序。 概要设计整个程序由四个主要的子程序和若干个辅助子程序组成,实现3个转换功能:主要的子程序:INHEX用来输入一个十六进制数,并放在BX中;OUTBIN用来把一个十六进制数转换成二进制数输出;OUTDEC用来把一个十六进制数转换成十进制数输出;OUTOCT用来把一个十六进制数转换成八进制数输出;辅助子程序:CRLF用来换行;DEC2用来除以各位十进制的权主程序框架:L1:调用INHEX,输入一个十六进制数;再调用CRLF,换行;调用OUTBIN,输出一个二进制数;再调用CRLF,换行;再跳转到START。L2: 调用INHEX,输入一个十六进制数;

9、再调用CRLF,换行;调用OUTDEC,输出一个十进制数;再调用CRLF,换行;再跳转到START。L3:调用INHEX,输入一个十六进制数;再调用CRLF,换行;调用OUTOCT,输出一个八进制数;再调用CRLF,换行;再跳转到START。L0:输入为0时,则跳出。3流程图显示主界面选择数字转换方式AH=0,AX循环左移1位AX=1?结束AX=2?AX=3?AX=0?Y以L1为首地址以L3为首地址以L2为首地址YNYN开始YNN图3-1 主程序流程图程序开始可以由提示页面选择需要将十六进制转换成二进制、十进制、八进制,程序调用过程中,要是出现非十六进制字符便会出现出错提示返回重新填写,根据选

10、项有1(十六进制转换成二进制)、2(十六进制转换成十进制)、3(十六进制转换成八进制);输入0则退出程序。数制转换方式选择调用过程如图3-2,3-3,3-4:调用INHEX调用CRLF调用OUTOCT调用CRLF结束开始调用INHEX调用CRLF调用OUTBIN调用CRLF结束开始调用INHEX调用CRLF调用OUTDEC调用CRLF结束开始图3-2 转到L1调用过程图3-3 转到L2调用过程图3-4 转到L3调用过程图3-2是调用输出八进制的过程,通过调用CRLF、接着调用OUTOCT、然后再调用CRLF,这样的调用之后可以通过对输入数值的判断可以完成相应的由十六进制向十进制的转换功能。图3

11、-3、图3-4的原理跟上述一样,同样可以完成十六进制向二进制和十进制的转换功能。INHEX子程序流程图如3-5:显示输入提示BX清零输入一个字符给ALAL=0DH?AL30H?AL10?AL减7,转为字母AL10?AL16?AL-20H送给ALAL16?出错提示NNYYYBX循环左移4位AL与BL相或返回NYNYNYYN开始N图3-5 输入十六进制数子程序流程图流程图为输入一个四位十六进制的数,显示操作提示,并对输入的四位十六进制数进行判断,十六进制数的各位上要是出现超出0-9、a-f,就出现错误提示,程序将不会执行,返回重新输入。OUTBIN子程序如图3-6,OUTOCT子程序如图3-7:显

12、示输出提示CX16BX循环左移一位DLBLDL最低位取反,其余位清零转换成ASCII码输出数据并显示返回BX左移1位把最右面的1位转为ASCII码显示一个字符循环计数值置为5BX循环左移3位把最右面的3位转为ASCII码显示一个字符结束Y循环计数值=0?N开始开始图3-6 转换成二进制子程序流程图 图3-7 转换成八进制子程序流程图图3-6、图3-7分别为十六进制转换成二进制和八进制的流程图,二进制的转换过程根据位权转换;而转换成八进制则是先转换成2进制再向八进制转换。图OUTDEC子程序如图3-8,除权子程序DECIV如图3-9: CX置10000d调用子程序CX置1000d调用子程序CX置

13、100d调用子程序CX置10d调用子程序CX置1d调用子程序把二进制数转入AXDX清零除法运算余数移入BX商移入DL商转为ASCII显示商结束结束开始开始图3-9 DEC2除权子程序流程图图3-8 转换成十进制子程序流程图 4程序模块1)换行子程序CRLF:将0DH(回车),0AH(换行)输出,达到换行的效果,子程序模块如下:CRLF PROC ;定义换行子程序MOV AH,02H MOV DL,0DH INT 21H MOV DL,0AH INT 21H RETCRLF ENDP2)输入一个四位十六进制数,当输入不是0 F之间的数时,则显示出错提示“input error”,将输入的十六进制

14、数存放在BX中。子程序模块INHEX如下:INHEX PROC NEAR ;定义输入一个十六进制数子程序LEA DX,mess1 ;把mess3的首地址给DX MOV AH,09H INT 21H ;调用DOS功能,输出DX中字符串并显示 MOV BX,0 ;把BX清零IHL1: MOV AH,01H ;输入一个字符并显示 INT 21H CMP AL,0DH JZ IHEXIT ;按回车键时返回 SUB AL,30H ;判断是否数字或字母 JL KKK ;小于30H时显示出错信息 CMP AL,10 ;判断是否数字 JL IHL2 SUB AL,7 ;把AL内容减7转为字母 CMP AL,1

15、0 ;判断是否小写字母(af) JL KKK CMP AL,16 JB IHL2 ;小于则跳转 SUB AL,20H ;判断是否大写字母(AF) CMP AL,10 JL KKK CMP AL,16 JGE KKKIHL2: MOV CL,4 ;作为循环条件 SHL BX,CL OR BL,AL JMP IHL1KKK: MOV AH,09H ;输入不是0F之间的数时,则提示输入错误 LEA DX,mess2 INT 21H JMP LIHEXIT: RET INHEX ENDP3)输出二进制,将BX中数据循环左移1位,再将BL中数据送给DL,将DL中数据转换为ASCII码30H或31H,调用

16、DOS功能,输出0或1,即输出二进制。子程序模块OUTBIN如下所示:OUTBIN PROCLEA DX,mess3 ;把mess3的首地址给DX MOV AH,09H INT 21H ;调用DOS功能,输出DX中字符串并显示 MOV CX,16 ;计数OBL1: ROL BX,1 ;循环左移一位,将BX中最到位转换成最低位 MOV DL,BL ;将BL中数据给DL AND DL,01H ;DL中最低位取反 OR DL,30H ;将DL中高四位转换为3,低四位不变 MOV AH,02H ;调用DOS2号功能,将DL中数据输出并显示为0或1 INT 21H LOOP OBL1 ;循环OBL1 R

17、ET OUTBIN ENDP4)输出十进制,将各位的权送给CX,调用除权子程序,余数送入BX,将商送给DL输出,子程序模块OUTDEC如下所示:OUTDEC PROCLEA DX,mess4 ;把mess4的首地址给DX MOV AH,9 INT 21H ;调用DOS功能,输出DX中字符串并显示DEC1: MOV CX,10000 ;把10000给CX,作为万位的权CALL DEC2 ;调用DEC2除权子程序 MOV CX,1000 ;把1000给CX,作为千位的权CALL DEC2 ;调用DEC2除权子程序 MOV CX,100 ;把100给CX,作为百位的权 CALL DEC2 ;调用DE

18、C2除权子程序 MOV CX,10 ;把10给CX,作为十位的权 CALL DEC2 ;调用DEC2除权子程序 MOV CX,1 ;把1给CX,作为各位的权 CALL DEC2 ;调用DEC2除权子程序 RETOUTDEC ENDP5)除权子程序DEC2如下所示:DEC2 PROC NEAR ;除以各位十进制的权MOV AX,BX ;把BX内容给AX MOV DX,0 ;DX清零 DIV CX MOV BX,DX MOV DL,AL ADD DL,30H ;转换为ASCII码 MOV AH,2 INT 21H RETDEC2 ENDP6)输出八进制,因为输入的是四位十六进制数,将BX送入AX,

19、循环左移1位,将AL中高7位屏蔽,再将AL转换为ASCII码显示输出;将循环计数值置为5,BX循环左移3位,将BL送入AL,将高5位屏蔽,转换为ASCII码,显示输出,直到循环计数值减为0(即循环5次,一次转换3位,共转换15位)。子程序模块OUTOCT如下所示:OUTOCT PROC NEARLEA DX,mess5 ;把mess4的首地址给DX MOV AH,09H INT 21H ;调用DOS功能,输出DX中字符串并显示OCT1: ROL BX,1 ;循环左移1位 MOV AX,BX ;把输入的数送给AL AND AL,01H ;将高七位屏蔽 ADD AL,30H ;转换为ASCII码

20、MOV DL,AL ;输出AL中数据 MOV AH,2 INT 21H MOV CH,5 ;剩余显示15位 OCT2: MOV CL,3 ;移位数字3 ROL BL,CL ;循环左移三位 MOV AL,BL ;把输入的数送AL AND AL,07H ;将高5位屏蔽 ADD AL,30H ;转换为ASCII码 MOV DL,AL ;输出AL MOV AH,2 INT 21H DEC CH ;递减CH JNZ OCT2 ;CH不为0则跳转 RETOUTOCT ENDPCODE ENDSEND START5调试结果分析 调试过程调试过程主要由编辑、汇编、链接和执行等几个步骤组成。1)源程序的编辑:编

21、辑好汇编语言源程序后,。2)源程序的汇编:调用汇编程序对源程序进行翻译,。在汇编过程中,源程序有错误生不成目标文件,经过多次修改最终生成目标文件。3)目标程序的连接:调用链接程序(LINK)将用户目标程序和库文件进行链接、定位,。4)调试可执行程序:刚开始可执行程序运行之后没有得到预想的结果,又重新检查源程序的算法错误,重新编辑、汇编、链接和执行,得到了预想的结果。 结果记录经过多次调试、修改,测试结果胜利通过,符合要求:1)键盘输入1时,提示输入一个十六进制数,输入之后按回车键,则输出一个二进制数,如图5-1所示:由图5-1所示,调试源程序,出现选择界面。当从键盘输入1时,提示输入一个十六进

22、制,输入2A时,则输出的16位二进制数为:1010,结果正确。图5-1 十六进制转换为二进制2)键盘输入2时,提示输入一个十六进制数,输入之后按回车键,则输出一个十进制数,如图5-2:如右图5-2所示,调试源程序,出现选择界面。当从键盘输入2时,提示输入一个十六进制,输入2A时,则输出的五位十进制数为:00042,结果正确。 图5-2 十六进制转换为十进制3)键盘输入3时,提示输入一个十六进制数,输入之后按回车键,则输出一个八进制数,如图5-3:如右图5-3所示,调试源程序,出现选择界面。当从键盘输入3时,提示输入一个十六进制,输入2A时,则输出的八进制数为:00052,结果正确。 图5-3

23、十六进制转换为八进制4)键盘输入1或2或3时,会提示输入一个十六进制数,若此时输入的输入十六进制数不是0 F之间的数,则会提示出错信息“input error”并提示重新输入,如图5-4:如右图5-4所示,调试源程序,出现选择界面。当从键盘输入1或2或3时,提示输入一个十六进制,输入K时,则显示出错信息“input error”,并提示重新输入,与预期结果一致。 图5-4 输入出错提示5)键盘输入0时,则退出DOS界面。6)修改选择界面,输入四位十六进制数的进制转换结果如图5-5: 如图5-5所示,修改后的选择界面比较简短,当从键盘输入1时,输入四位十六进制数2A34时,输出二进制为:0100

24、;当从键盘输入2时,输入四位十六进制数6586时,此时输出十进制为25990;当从键盘输入3时,输入四位十六进制数6BD1,此时输出八进制数为65721。与预期结果一致。 图5-5输入四位十六进制数由以上调试得到的图形可知,调试结果与预期结果是一致的,程序可实现预期的功能。6创新设计在源程序的基础上通过修改程序过增加不同功能的子程序,通过过程间的相互调用,即可增加程序的功能,比如通过改进程序增加数制之间的转换,或者使出错信息显示出颜色等等。 增加数制转换功能原程序要求从十六进制转换到二进制、十进制、八进制,现利用原程序框架增加辅助子程序,可以增加以下辅助功能:1)从二进制转换到十六进制,子程序

25、如下:INBIN 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 ;AX和BX内容交换 MOV DX,2 MUL DX XCHG AX,BX ADD BX,AX JMP PUTINEXIT6: RETINBIN ENDPBETOHE PROC NEAR ;把一个十六位二进制数

26、转换成十六进制输出START3:LEA DX,BUF5MOV AH,9 INT 21H PUSH DS SUB AX,AX PUSH AX CALL INBIN CMP AL,1BH JZ EXIT5 CALL CRLF CALL BINIHEXCALL CRLFJMP START3EXIT5:RETBETOHE ENDP调用子程序即可实现从二进制数转换到十六进制数,具体实现过程与源程序相似,主程序是类似的,不多加叙述,具体调试结果也不作记录。 显色功能当输入不是十六进制数时,会显示出错信息input error,此时出错信息是黑底白字的。现在改进程序,利用BIOS中10H号功能调用,显示字符

27、串为黑底蓝字。BIOS中10H号功能调用表在附录中,在此不作详述。对数据段定义改变如下:DATA SEGMENT MENU db Please Input your Choice:,0dh,0ah db 1: Hex -Bin,0dh,0ah db 2: Hex -Dec,0dh,0ah db 3: Hex -Oed,0dh,0ah db 0: Exit. ,0dh,0ah,$mess1 db Please input a Hex number:$mess2 db input error ,0DH,0AHLENME EQU $-mess2 ;mess2定义的数据段长度 mess4 db Out

28、put Bin is: $ mess5 db Output Dec is: $ mess6 db Output Oec is: $ TABLE dw L0,L1,L2,L3DATA ENDS利用INT 10H中AH设置显示方式,显示字符串方式,设置字符串属性,则可改变出错信息的显示。INHEX子程序中标号KKK定义改变如下:KKK: MOV AL,3 ;设置彩色方式 MOV AH,0 ;设置显示方式 INT 10H MOV BP,SEG mess2 MOV ES,BP ;把串mess2基地址给ES MOV BP,OFFSET mess2 ;把串mess2偏移地址给BP MOV CX,LENME

29、 ;把串mess2长度给CXMOV DX,0 ;DX清零 MOV BL,01H ;设置为黑底蓝字 MOV AL,1 ;光标跟随移动 MOV AH,13H ;显示字符串 INT 10H JMP L ;跳转到L将改变后的程序,重新在源程序中编辑,则可实现预期功能,出错信息显示为蓝字。调试结果如图6-1,6-2: 图6-1 输入正确时调试结果 图6-2 输入错误时调试结果由图6-1可以看出,当输入为0至F之间的十六进制数时,没有出错信息提示,调试结果为预期结果;由图6-2可以看出,当输入不为0至F之间的十六进制数时,有出错信息的提示,并且出错信息input error显示为蓝色,得到了预期结果。由以

30、上设计可知,在源程序的基础上,稍作修改或增加辅助的子程序,通过过程间的相互调用,即可增加程序的功能。7 心得体会通过这次的课程设计,让我对汇编有了更进一步的认识,加强了我对汇编语言编程的应用能力。汇编语言程序设计是一门很抽象的学科,只是通过课堂的学习,会让我们刚开始很难接受,也不知道学这个最后能够有什么作用,学起来也比较乏味。在理论学习中感到课程的困难,甚至想要放弃。但在这次课程设计中,让我逐渐熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,突然发现原来语言的功能是很强大的,能够给我们带来不少乐趣。这次的汇编课程设计,我自己所选的题目是数制转换程序设计,要求实现十六进制

31、向二进制、十进制、八进制的转换。在程序设计过程中遇到了不少问题,比如运行界面出现乱码、不能得到相应的转换等等问题,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT指令会改变AL的值,在编程时应注意这方面的问题。当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到了编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。在与同学间的交流中发现原来大家都有各种各样的感受,从毫无头绪到

32、慢慢的找到一些方向,在对课题的探讨中发现原来有些程序是很好玩的,原来通过我们自己的编程就能实现现实生活中我们碰到的一些很好玩的功能,像电子琴、计数器等,都可以用我们自己的程序实现,实在是很令人兴奋的事情。总之,这次课程设计我锻炼了动手能力,熟悉了汇编的编程环境,并巩固了课程相关知识,收益很多。实践出真知,而且我们要有创新的精神,在课程设计中不忘在小处创新,希望在下一次课程设计中能有更大的突破!参考文献1汤书森.微机原理接口技术实验于实践教程.北京:清华大学出版社,20082余朝琨.IBM-PC汇编语言程序设计.北京:机械工业出版社. 20083宋江.微机原理与接口技术.北京:机械工业出版社.

33、20054金泉涌.微型计算机应用经验汇编.北京:清华大学出版社,20075沈美玲.IBM-PC汇编语言程序设计.北京:清华大学出版社,19936吴耿峰.十六位微型计算机原理接口及应用.北京:7戴梅萼.微型计算机技术与应用.北京:清华大学出版社. 19928罗省贤汇编语言程序设计教程北京:电子工业出版社,20049吴向军汇编语言程序设计北京:高等教育出版社,2008附录附录A 源程序清单DATA SEGMENT MENU db *,0dh,0ah db * *,0dh,0ah db * welcome you ! *,0dh,0ah db * *,0dh,0ah db * this is programme of shuzhizhuanhuan *,0dh,0ah db * *,0dh,0ah db * *,0dh,0ah db * press 0 to exit ! *,0dh,0ah db * *,0dh,0ah db *

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号