课程设计
更新时间:2024-06-23 08:57:01 阅读量: 综合文库 文档下载
课程设计报告
课程:学号:姓名:班级:教师:时间:(本科)
汇编语言程序设计
1310441012 1310441065
2014.6.3~2014.6.19
计算机科学与技术系
设计名称: 代码转换程序 :1.实现十六进制和十进制的相互转换 2.实现八进制和十进制的相互转换 设计内容、目的与要求: 实验要求: 本次课程设计着重于理论与实践的相结合,运用所学知识,配合实践操作。实现代码转换程序。 内容包括: 设计题目;原始条件及参数;要求完成的主要任务(如:设计方案的选择与确定、设计计算、程序编制、说明书撰写等具体要求);时间安排等。 计划与进度安排: 1.首先明确设计要求和理论知识,了解各进制之间的转换关系。 2.将思路流程的进制转换表格画出,按照流程图完成设计。 3.参考资料和收集代码,对题目进行编写。 4.对程序进行调试和修改,在电脑上进行演示。 具体时间安排: 6月3日~6月12日:完成设计思路并作出草稿; 完成程序的输入; 6月13日~6月16日:完成对基本功能的修改并运行无误; 增加对开始的源程序的功能; 6月17日至6月19日:修改并完成,提交验收; 1
设计过程、步骤: 系统流程图: 开始 八进制转十进制 选择转换方式 十进制转八进制 调用octbin 调用DECibin 调用crlf 调用crlf 调用binidec 调用binioct 调用crlf 调用crlf 结束 图1 系统流程图
2
十进制转二进制DECibin 开始 BX清零 输入数值 转ASCII <0或>9d 交换AX、BX AX乘10 交换AX、BX 加上AX 结束 图2 十进制到二进制转换流程
3
二进制转八进制binioct 开始 BX左移2位 把最右面2位转为ASCII码 显示一个字符 循环计数值置为2 BX循环左移3把最右面3位转为ASCII码 显示一个字符 循环计数值 =0? N Y 结束 图3 二进制转八进制转换流程 八进制转二进制octbin
4
开始 BX清零 输入十进制数 判定范围 <8执行 移位数字为3 <0重新输入 左移3位 AH清零 添加新二进制位 跳转输入 结束 图4 八进制转二进制转换流程 5
二进制转十进制binidec 开始 CX置10000d 开始 子程序DEC_div 把二进制数转入AX 调用子程序 DX清零 CX置1000d 除法运算 调用子程序 余数移入BX CX置100d 商移入DL 调用子程序 转为ASCII CX置10d 显示商 调用子程序 结束 CX置1d 调用子程序 结束 图5 二进制转十进制转换流程 同理,十六进制转换为十进制的流程与此类似。 6
实验结果与分析: 图6 首先运行无错误 图7输入1号功能变换 图8输入2号功能变换数值
7
图9 产生obj文件 图10 输入2号功能实现数制转换 图11 输入1号功能实现数制转换 8
设计体会与建议: 通过此次课程设计,我们获益匪浅,现总结如下: (1)我了解到汇编语言是一种基于硬件的一种语言,它相对于之前学的C语言是低级的。但是汇编语言有它最大的好处,就是运行汇编程序所占用的系统资源很小,这样的话,运行同样的程序,汇编语言的速度要大于C语言。我也查阅过资料,在我们将来要学习的单片机中,C语言和汇编语言是我们所学的可以对单片机进行编程的语言。 (2)我还意识到计算机是通过执行指令序列来解决问题的,因而每种计算机都有一组指令集供给用户使用,这组指令集就称为计算机的指令系统。而指令是由操作码字段和操作数字段两部分组成。操作码字段指示计算机所要执行的操作,而操作数字段则指出在指令执行操作的过程中所需要的操作数。 (1)汇编语言相对于我们之前学习的C语言是非常繁琐的。它有很多操作码,并且其助记符也是很难记清楚的,实践过程中遇到了很多根部想不到的困难。例如,我们自己的电脑不能运行MASM程序等问题。这是程序兼容性存在问题,最后只好在虚拟机中运行。所以,虽然我的课设题目不难,却花了我很长时间。而且我们最后完成的程序没有很好地拓展性。汇编语言不仅要求我们有严谨的逻辑系统,更要求有扎实的基础和记忆。 (2)我还意识到理论学习与实际操作实在是有很大差距。在今后的课程学习中,(以上王康也提到了,将来需要学习单片机。)汇编语言是必不可少的。我会认真对待每一次实践机会,努力提高自己的上机操作能力,让自己的编程能力更上一层楼。我还会继续学习汇编语言,在实践方面带来更大作用。
9
附录:源代码
十进制与八进制相互转换的程序清单:
;DECIOCT
;十进制与八进制相互转换
;首先选择算法,1为八进制转十进制,2为十进制转八进制 ;***************************
DECioct SEGMENT
ASSUME CS:DECioct ;主程序部分。
main PROC FAR
start: MOV DL,3ah ; MOV AH,2 INT 21h
MOV AH,1 ; INT 21h
CMP AL,32h ;进制
JE REPEat2 ;进制
REPEat1: CALL octbin ; CALL crlf ; CALL binidec ; CALL crlf ; JMP REPEat1 ;
REPEat2: CALL DECibin ;制
CALL crlf ; CALL binioct ; CALL crlf ;
JMP REPEat2 ; main ENDP
;-----------------------------
显示提示附 输入选择数字 数字为1时,执行八进制转十数字为2时,执行十进制转八键盘输入八进制数转为二进制 回车并换行 二进制转十进制 回车并换行 重复执行 键盘输入十进制数转为二进回车并换行 二进制转八进制
回车并换行 重复执行 10
;十进制转二进制
DECibin PROC NEAR
MOV BX,0 ;将BX清零 NEwchar2:
MOV AH,1
INT 21h ;21号中断输入 SUB AL,30h ;ASCII转二进制 JL exit2 ;<0则跳转 CMP AL,9d ;判断是否>9
JG exit2 ; CBW ; XCHG AX,BX ; MOV CX,10d ; MUL CX ;AX XCHG AX,BX ; ADD BX,AX ; JMP NEwchar2 ;exit2: RET DECibin ENDP
;--------------------------------------- ;二进制转八进制
binioct PROC NEAR
MOV CL,2 ROL BL,CL MOV AL,BL AND AL,03h ADD AL,30h MOV DL,AL MOV AH,2 INT 21h
MOV CH,2 rotate2:
MOV CL,3 ROL BL,CL MOV AL,BL AND AL,07h ADD AL,30h MOV DL,AL MOV AH,2 INT 21h
DEC CH
如果大于则不是十进制数 字节转为字 交换寄存器 把10放如CX 扩大10倍 交换寄存器
原数的10倍加上输入数 跳转输入 ;移位数字2 ;循环左移2位
;把输入的数送入AL ;将高六位屏蔽 ;转换为ASCII ;输出AL ;剩余显示2位 ;移位数字3 ;循环左移3位
;把输入的数送入AL ;将高五位屏蔽 ;转换为ASCII ;输出AL ;递减CH
11
JNZ rotate2 ;CH不为0则跳转 RET binioct ENDP
;--------------------------------------- ;八进制转二进制
octbin PROC NEAR
MOV BX,0 NEwchar1:
MOV AH,1 INT 21h
SUB AL,30h JL exit1
CMP AL,8d JL ADD_to1
CMP AL,10h JGE exit1 ADD_to1:
MOV CL,3 SHL BX,CL MOV AH,0 ADD BX,AX JMP NEwchar1 exit1: RET octbin ENDP
;-------------------------------------- ;二进制转十进制
binidec PROC NEAR
MOV CX,10000d CALL DEC_div
MOV CX,1000d CALL DEC_div
MOV CX,100d CALL DEC_div
MOV CX,10d CALL DEC_div
MOV CX,1d CALL DEC_div RET
;---------------------------------------
;BX清零 ;输入数字 ;转换为二进制数 ;如果<8则跳转 ;移位数字3 ;左移3位 ;AH清0
;把新位移入数字 ;跳转继续输入 ;除数为10000 ;除数为1000 ;除数为100 ;除数为10 ;除数为1 12
;子程序
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 RET DEC_div ENDP
;--------------------------------------- binidec ENDP
;---------------------------------------
;回车和换行。
crlf PROC NEAR
MOV DL,0dh MOV AH,2 INT 21h
MOV DL,0ah MOV AH,2 INT 21h RET crlf ENDP
;---------------------------------------- DECioct ENDS
;***************************************** END start
;回车 ;输出 ;换行 ;输出 13
十六进制与十进制相互转换的程序清单:
;DECIOCT
;十进制与十六进制相互转换
;首先选择算法,1为十六进制转十进制,2为十进制转十六进制 ;***************************
DECioct SEGMENT
ASSUME CS:DECioct ;主程序部分。
main PROC FAR
start: MOV DL,3ah ; MOV AH,2 INT 21h
MOV AH,1 ; INT 21h
CMP AL,32h ;十进制
JE REPEat2 ;六进制
REPEat1: CALL octbin ;制
CALL crlf ; CALL binidec ; CALL crlf ; JMP REPEat1 ;
REPEat2: CALL DECibin ;制
CALL crlf ; CALL binioct ; CALL crlf ;
JMP REPEat2 ; main ENDP
;----------------------------- ;十进制转二进制
显示提示附 输入选择数字 数字为1时,执行十六进制转数字为2时,执行十进制转十键盘输入十六进制数转为二进回车并换行 二进制转十进制 回车并换行 重复执行 键盘输入十进制数转为二进回车并换行 二进制转十六进制
回车并换行 重复执行 14
DECibin PROC NEAR
MOV BX,0 ;将BX清零 NEwchar2:
MOV AH,1
INT 21h ;21号中断输入 SUB AL,30h ;ASCII转二进制 JL exit2 ;<0则跳转 CMP AL,9d ;判断是否>9
JG exit2 ;如果大于则不是十进制数 CBW ; XCHG AX,BX ; MOV CX,10d ; MUL CX ;AX XCHG AX,BX ; ADD BX,AX ; JMP NEwchar2 ;exit2: RET DECibin ENDP
;---------------------------------------
;---------------------------------------
二进制转十六进制
Binioct proc near Mov ch,4 Rotate: mov cl,4 Rol bx,cl Mov al,bl And al,0fh Add al,30h Cmp al,3ah jl printit Add al,7h Printit:
Mov dl,al Mov ah,2 Int 21h Dec ch
Jnz rotate Ret Binioct endp
---------------------------------------
字节转为字 交换寄存器 把10放如CX 扩大10倍 交换寄存器
原数的10倍加上输入数跳转输入 15
十六进制转为二进制
octbin PROC NEAR
MOV BX,0 ; BX清零 NEwchar1:
MOV AH,1 ;输入数字 INT 21h
SUB AL,30h ; JL exit1
CMP AL,16d ; JL ADD_to1
CMP AL,10h JGE exit1 ADD_to1:
MOV CL,4 ; SHL BX,CL ; MOV AH,0 ;AH ADD BX,AX ; JMP NEwchar1 ;exit1: RET octbin ENDP
二进制转化为十进制
binidec PROC NEAR
MOV CX,10000d ; CALL DEC_div
MOV CX,1000d ; CALL DEC_div
MOV CX,100d ; CALL DEC_div
MOV CX,10d ; CALL DEC_div
MOV CX,1d ; CALL DEC_div RET
;--------------------------------------- ;子程序
DEC_div PROC NEAR
MOV AX,BX ; MOV DX,0 ;DX
转换为二进制数 如果<8则跳转 移位数字3 左移3位 清0
把新位移入数字 跳转继续输入 除数为10000 除数为1000 除数为100 除数为10 除数为1 把二进制数移入AX 高八位清零
16
DIV CX ;除数CX
MOV BX,DX ;余数移入BX MOV DL,AL ;商移入DL ADD DL,30h ;转换为ASCII MOV AH,2 ;输出十进制数位 INT 21h RET DEC_div ENDP
;--------------------------------------- binidec ENDP
;---------------------------------------
;回车和换行。
crlf PROC NEAR
MOV DL,0dh ; MOV AH,2 ; INT 21h
MOV DL,0ah ; MOV AH,2 ; INT 21h RET crlf ENDP
;---------------------------------------- DECioct ENDS
;***************************************** END start
回车 输出 换行 输出 17
正在阅读:
课程设计06-23
申请硕士学位审批表02-03
新中国成立60年会计学发展的回顾与展望06-09
关于搞好城市管理工作的几点思考和体会10-27
100道(短除法)找最小公倍数练习题07-03
《气候与水》观后感5篇03-16
健康知识趣味问答题03-28
现场会汇报材料03-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 课程
- 设计
- 施工安全技术措施报审
- 企业文化管理办法
- 植树造林美化环境1907A3植树节电子小报成品,播种绿色手抄报模板
- 2017年浙江省焊工技能试题
- 父亲的战场 读后感
- 爱丽丝漫游奇境读后感200字
- 左权县南街爱乐希望小学六大创建
- 学习的目的
- 武汉关于城建重点工程施工招标、评标的意见(武城重1号)
- 柯坪湖州双语小学教师廉洁从教承诺书
- 教科版四年级科学下册实验报告单
- 世界名犬大全之大型犬-带图
- 用友财务软件使用说明书
- 马士基改舱单保 函模版
- 机电井施工组织设计
- 真题(5)和真题(6)5月3号到5月9号做完
- 刺猬河综合治理三期工程第四监理标段细则终极版1
- 逾期贷款的处置及清收技巧课后测试
- 湘潭万达广场投标文件商务、技术部分 - 图文
- 2013高考化学考点精讲 - 考点41 - 甲烷 - 烷烃