汇编语言程序设计课程设计.doc_第1页
汇编语言程序设计课程设计.doc_第2页
汇编语言程序设计课程设计.doc_第3页
汇编语言程序设计课程设计.doc_第4页
汇编语言程序设计课程设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告(本科)课程:汇编语言程序设计学号: 姓名: 班级:教师:时间:2014.6.32014.6.19计算机科学与技术系设计名称:代码转换程序 :1.实现十六进制和十进制的相互转换 2.实现八进制和十进制的相互转换设计内容、目的与要求:实验要求:本次课程设计着重于理论与实践的相结合,运用所学知识,配合实践操作。实现代码转换程序。内容包括:设计题目;原始条件及参数;要求完成的主要任务(如:设计方案的选择与确定、设计计算、程序编制、说明书撰写等具体要求);时间安排等。计划与进度安排:1. 首先明确设计要求和理论知识,了解各进制之间的转换关系。2. 将思路流程的进制转换表格画出,按照流程图完成设计。3. 参考资料和收集代码,对题目进行编写。4. 对程序进行调试和修改,在电脑上进行演示。具体时间安排: 6月3日6月12日:完成设计思路并作出草稿; 完成程序的输入; 6月13日6月16日:完成对基本功能的修改并运行无误; 增加对开始的源程序的功能; 6月17日至6月19日:修改并完成,提交验收;设计过程、步骤:系统流程图:开始选择转换方式调用octbin调用crlf调用binidec调用crlf调用DECibin 调用crlf调用binioct 调用crlf结束八进制转十进制十进制转八进制 图1 系统流程图十进制转二进制DECibin开始BX清零输入数值转ASCII交换AX、BXAX乘10交换AX、BX加上AX结束9d图2 十进制到二进制转换流程二进制转八进制binioct开始BX左移2位把最右面2位转为ASCII码显示一个字符循环计数值置为2BX循环左移3位把最右面3位转为ASCII码显示一个字符循环计数值0? 结束NY图3 二进制转八进制转换流程八进制转二进制octbin开始BX清零输入十进制数判定范围移位数字为3左移3位AH清零添加新二进制位结束跳转输入0重新输入8执行图4 八进制转二进制转换流程二进制转十进制binidec开始CX置10000d调用子程序CX置1000d调用子程序CX置100d调用子程序CX置10d调用子程序CX置1d调用子程序结束开始把二进制数转入AXDX清零除法运算余数移入BX商移入DL转为ASCII显示商结束子程序DEC_div 图5 二进制转十进制转换流程 同理,十六进制转换为十进制的流程与此类似。实验结果与分析: 图6 首先运行无错误图7输入1号功能变换图8输入2号功能变换数值图9 产生obj文件图10 输入2号功能实现数制转换图11 输入1号功能实现数制转换设计体会与建议:通过此次课程设计,我们获益匪浅,现总结如下:(1) 我了解到汇编语言是一种基于硬件的一种语言,它相对于之前学的C语言是低级的。但是汇编语言有它最大的好处,就是运行汇编程序所占用的系统资源很小,这样的话,运行同样的程序,汇编语言的速度要大于C语言。我也查阅过资料,在我们将来要学习的单片机中,C语言和汇编语言是我们所学的可以对单片机进行编程的语言。(2) 我还意识到计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统。而指令是由操作码字段和操作数字段两部分组成。操作码字段指示计算机所要执行的操作,而操作数字段则指出在指令执行操作的过程中所需要的操作数。(1)汇编语言相对于我们之前学习的C语言是非常繁琐的。它有很多操作码,并且其助记符也是很难记清楚的,实践过程中遇到了很多根部想不到的困难。例如,我们自己的电脑不能运行MASM程序等问题。这是程序兼容性存在问题,最后只好在虚拟机中运行。所以,虽然我的课设题目不难,却花了我很长时间。而且我们最后完成的程序没有很好地拓展性。汇编语言不仅要求我们有严谨的逻辑系统,更要求有扎实的基础和记忆。(2)我还意识到理论学习与实际操作实在是有很大差距。在今后的课程学习中,(以上王康也提到了,将来需要学习单片机。)汇编语言是必不可少的。我会认真对待每一次实践机会,努力提高自己的上机操作能力,让自己的编程能力更上一层楼。我还会继续学习汇编语言,在实践方面带来更大作用。附录:源代码十进制与八进制相互转换的程序清单:;DECIOCT;十进制与八进制相互转换;首先选择算法,1为八进制转十进制,2为十进制转八进制;* DECioct SEGMENT ASSUME CS:DECioct;主程序部分。main PROC FARstart: MOV DL,3ah ;显示提示附 MOV AH,2 INT 21h MOV AH,1 ;输入选择数字 INT 21h CMP AL,32h ;数字为1时,执行八进制转十进制 JE REPEat2 ;数字为2时,执行十进制转八进制 REPEat1: CALL octbin ;键盘输入八进制数转为二进制 CALL crlf ;回车并换行 CALL binidec ;二进制转十进制 CALL crlf ;回车并换行 JMP REPEat1 ;重复执行 REPEat2: CALL DECibin ;键盘输入十进制数转为二进制 CALL crlf ;回车并换行 CALL binioct ;二进制转八进制 CALL crlf ;回车并换行 JMP REPEat2 ;重复执行 main ENDP;-;十进制转二进制DECibin PROC NEAR MOV BX,0 ;将BX清零NEwchar2: MOV AH,1 INT 21h ;21号中断输入 SUB AL,30h ;ASCII转二进制 JL exit2 ;9 JG exit2 ;如果大于则不是十进制数 CBW ;字节转为字 XCHG AX,BX ;交换寄存器 MOV CX,10d ;把10放如CX MUL CX ;AX扩大10倍 XCHG AX,BX ;交换寄存器 ADD BX,AX ;原数的10倍加上输入数 JMP NEwchar2 ;跳转输入exit2: RETDECibin ENDP;-;二进制转八进制binioct PROC NEAR MOV CL,2 ;移位数字2 ROL BL,CL ;循环左移2位 MOV AL,BL ;把输入的数送入AL AND AL,03h ;将高六位屏蔽 ADD AL,30h ;转换为ASCII MOV DL,AL ;输出AL MOV AH,2 INT 21h MOV CH,2 ;剩余显示2位rotate2: MOV CL,3 ;移位数字3 ROL BL,CL ;循环左移3位 MOV AL,BL ;把输入的数送入AL AND AL,07h ;将高五位屏蔽 ADD AL,30h ;转换为ASCII MOV DL,AL ;输出AL MOV AH,2 INT 21h DEC CH ;递减CH JNZ rotate2 ;CH不为0则跳转 RET binioct ENDP ;-;八进制转二进制octbin PROC NEAR MOV BX,0 ;BX清零NEwchar1: MOV AH,1 ;输入数字 INT 21h SUB AL,30h ;转换为二进制数 JL exit1 CMP AL,8d ;如果8则跳转 JL ADD_to1 CMP AL,10h JGE exit1ADD_to1: MOV CL,3 ;移位数字3 SHL BX,CL ;左移3位 MOV AH,0 ;AH清0 ADD BX,AX ;把新位移入数字 JMP NEwchar1 ;跳转继续输入exit1: REToctbin ENDP;-;二进制转十进制binidec PROC NEAR MOV CX,10000d ;除数为10000 CALL DEC_div MOV CX,1000d ;除数为1000 CALL DEC_div MOV CX,100d ;除数为100 CALL DEC_div MOV CX,10d ;除数为10 CALL DEC_div MOV CX,1d ;除数为1 CALL DEC_div RET;-;子程序DEC_div PROC NEAR MOV AX,BX ;把二进制数移入AX MOV DX,0 ;DX高八位清零 DIV CX ;除数CX MOV BX,DX ;余数移入BX MOV DL,AL ;商移入DL ADD DL,30h ;转换为ASCII MOV AH,2 ;输出十进制数位 INT 21h RETDEC_div ENDP;-binidec ENDP;- ;回车和换行。 crlf PROC NEAR MOV DL,0dh ;回车 MOV AH,2 ;输出 INT 21h MOV DL,0ah ;换行 MOV AH,2 ;输出 INT 21h RETcrlf ENDP;- DECioct ENDS;* END start 十六进制与十进制相互转换的程序清单:;DECIOCT;十进制与十六进制相互转换;首先选择算法,1为十六进制转十进制,2为十进制转十六进制;* DECioct SEGMENT ASSUME CS:DECioct;主程序部分。main PROC FARstart: MOV DL,3ah ;显示提示附 MOV AH,2 INT 21h MOV AH,1 ;输入选择数字 INT 21h CMP AL,32h ;数字为1时,执行十六进制转十进制 JE REPEat2 ;数字为2时,执行十进制转十六进制 REPEat1: CALL octbin ;键盘输入十六进制数转为二进制 CALL crlf ;回车并换行 CALL binidec ;二进制转十进制 CALL crlf ;回车并换行 JMP REPEat1 ;重复执行 REPEat2: CALL DECibin ;键盘输入十进制数转为二进制 CALL crlf ;回车并换行 CALL binioct ;二进制转十六进制 CALL crlf ;回车并换行 JMP REPEat2 ;重复执行 main ENDP;-;十进制转二进制DECibin PROC NEAR MOV BX,0 ;将BX清零NEwchar2: MOV AH,1 INT 21h ;21号中断输入 SUB AL,30h ;ASCII转二进制 JL exit2 ;9 JG exit2 ;如果大于则不是十进制数 CBW ;字节转为字 XCHG AX,BX ;交换寄存器 MOV CX,10d ;把10放如CX MUL CX ;AX扩大10倍 XCHG AX,BX ;交换寄存器 ADD BX,AX ;原数的10倍加上输入数 JMP NEwchar2 ;跳转输入exit2: RETDECibin ENDP;- ;-二进制转十六进制Binioct proc near Mov ch,4Rotate: mov cl,4 Rol bx,cl Mov al,bl And al,0fh Add al,30h Cmp al,3ah jl printit Add al,7hPrintit: Mov dl,al Mov ah,2 Int 21h Dec ch Jnz rotate RetBinioct endp-十六进制转为二进制octbin PROC NEAR MOV BX,0 ; BX清零NEwchar1: MOV AH,1 ;输入数字 INT 21h SUB AL,30h ;转换为二进制数 JL exit1 CMP AL,16d ;如果8则跳转 JL ADD_to1 CMP AL,10h JGE exit1ADD_to1: MOV CL,4 ;移位数字3 SHL BX,CL ;左移3位 MOV AH,0 ;AH清0 ADD BX,AX ;把新位移入数字 JMP NEwchar1 ;跳转继续输入exit1: REToctbin ENDP二进制转化为十进制binidec PROC NEAR MOV CX,10000d ;除数为10000 CALL DEC_div MOV CX,1000d ;除数为1000 CALL DEC_div MOV CX,100d ;除数为100 CALL DEC_div MOV CX,10d ;除数为10 CALL DEC_div MOV CX,1d ;除数为1 CALL DEC_div RET;-;子程序DEC_div PROC NEAR MOV AX,BX ;把二进制数移入AX MOV DX,0 ;DX高

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论