1、汇编语言程序设计课程设计汇编语言程序设计课程设计课程设计报告(本科)课程:汇编语言程序设计学号: 姓名: 班级:教师:时间:2014.6.32014.6.19计算机科学与技术系设计名称:代码转换程序 :1.实现十六进制和十进制的相互转换 2.实现八进制和十进制的相互转换设计内容、目的与要求:实验要求:本次课程设计着重于理论与实践的相结合,运用所学知识,配合实践操作。实现代码转换程序。内容包括:设计题目;原始条件及参数;要求完成的主要任务(如:设计方案的选择与确定、设计计算、程序编制、说明书撰写等具体要求);时间安排等。计划与进度安排:1.首先明确设计要求和理论知识,了解各进制之间的转换关系。2
2、.将思路流程的进制转换表格画出,按照流程图完成设计。3.参考资料和收集代码,对题目进行编写。4.对程序进行调试和修改,在电脑上进行演示。具体时间安排: 6月3日6月12日:完成设计思路并作出草稿; 完成程序的输入; 6月13日6月16日:完成对基本功能的修改并运行无误; 增加对开始的源程序的功能; 6月17日至6月19日:修改并完成,提交验收;设计过程、步骤:系统流程图: 图1 系统流程图十进制转二进制DECibin图2 十进制到二进制转换流程二进制转八进制binioct图3 二进制转八进制转换流程八进制转二进制octbin图4 八进制转二进制转换流程二进制转十进制binidec图5 二进制转
3、十进制转换流程 同理,十六进制转换为十进制的流程与此类似。实验结果与分析: 图6 首先运行无错误图7输入1号功能变换图8输入2号功能变换数值图9 产生obj文件图10 输入2号功能实现数制转换图11 输入1号功能实现数制转换设计体会与建议:通过此次课程设计,我们获益匪浅,现总结如下:(1)我了解到汇编语言是一种基于硬件的一种语言,它相对于之前学的C语言是低级的。但是汇编语言有它最大的好处,就是运行汇编程序所占用的系统资源很小,这样的话,运行同样的程序,汇编语言的速度要大于C语言。我也查阅过资料,在我们将来要学习的单片机中,C语言和汇编语言是我们所学的可以对单片机进行编程的语言。(2)我还意识到
4、计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统。而指令是由操作码字段和操作数字段两部分组成。操作码字段指示计算机所要执行的操作,而操作数字段则指出在指令执行操作的过程中所需要的操作数。(1)汇编语言相对于我们之前学习的C语言是非常繁琐的。它有很多操作码,并且其助记符也是很难记清楚的,实践过程中遇到了很多根部想不到的困难。例如,我们自己的电脑不能运行MASM程序等问题。这是程序兼容性存在问题,最后只好在虚拟机中运行。所以,虽然我的课设题目不难,却花了我很长时间。而且我们最后完成的程序没有很好地拓展性。汇编语言不仅要求我们有严谨的逻
5、辑系统,更要求有扎实的基础和记忆。(2)我还意识到理论学习与实际操作实在是有很大差距。在今后的课程学习中,(以上王康也提到了,将来需要学习单片机。)汇编语言是必不可少的。我会认真对待每一次实践机会,努力提高自己的上机操作能力,让自己的编程能力更上一层楼。我还会继续学习汇编语言,在实践方面带来更大作用。附录:源代码十进制与八进制相互转换的程序清单:;DECIOCT;十进制与八进制相互转换;首先选择算法,1为八进制转十进制,2为十进制转八进制;* DECioct SEGMENT ASSUME CS:DECioct;主程序部分。main PROC FARstart: MOV DL,3ah ;显示提示
6、附 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 ;回车并
7、换行 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: RET
8、DECibin 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 ;输
9、出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 ;把新位移入数字
10、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高八位清零
11、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;十进制与十六进制相互转
12、换;首先选择算法,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 ;回车
13、并换行 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
14、;交换寄存器 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
15、 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二进制转化为十
16、进制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