代码转换程序.docx
《代码转换程序.docx》由会员分享,可在线阅读,更多相关《代码转换程序.docx(25页珍藏版)》请在冰豆网上搜索。
代码转换程序
《微机原理及接口》
课程设计报告
课题名称
代码转换程序
学院
自动控制与机械工程学院
专业
班级
姓名
学号
时间
2011/12/31-2012/1/13
微机原理课程设计任务书……………………………………
代码转换程序课程设计报告…………………………………
一.概述…………………………………………………………
二.设计任务及预期目标和要求………………………………
1.设计任务…………………………………………………….
2.设计目的和要求…………………………………………….
三.设计思想分析……………………………………………...
四.程序设计……………………………………………………
1.程序设计流程图…………………………………………….
2.源程序代码………………………………………………….
五.运行结果……………………………………………………
六.课程设计总结报告………………………………………...
1.课程设计中遇到的主要问题和解决方法………………….
2.创新和得以之处…………………………………………….
3.课程设计中的感想和心得体会…………………………….
微机原理课程设计任务书
一.课题题目:
代码转换程序
二.课题要求:
在DOS环境中编程完成以下任务:
完成一个字母或数制之间的转换程序,主程序分别具有5种可选择的子功能,按菜单提示,选择相应的字符分别进入相应的子功能,并按屏幕提示完成相应得输入,并显示结果.按“q”健退出。
可选择的子功能分别为:
●实现小写字母向大写字母的转换
●实现大写字母向小写字母的转换
●实现二进制数向十六进制数的转换
●实现十六进制数向二进制数的转换
●实现十六进制数向十进制数的转换
1.参考设计基本思路编程实现上述功能;
2.设计说明书;包括设计思想,程序流程图和源程序
三.设计基本思路:
见课程设计指导书
四.时间进度表
序号
内容安排
时间(天)
备注
1
分析设计,收集资料准备阶段
2
2
编程调试阶段
5
上机
3
撰写课程设计论文(说明书)阶段
2
上机
4
考核评定成绩阶段
1
合计
10
五.考核方式
序号
考核内容
时间(分)
备注
1
将所设计的源程序,复制到指定目录。
并汇编,连接
2
上机
2
运行程序,验证设计结果
1
上机
3
答辩
5
上机
六.补充说明
1.设计题目必须调试成功,(生成的可执行文件必须运行并且能够实现题目实现的功能),考核时独立完成考核内容,若未完成没有成绩。
2.设计说明书必须独立完成,如果出现70%相同视为雷同,取消成绩。
七.主要参考资料
1.《微机原理与接口技术》李兰友编清华大学出版社2009
2.《微机原理与应用》潘名莲编电子科技大学1995
3.《新编深入DOS编程》求伯君主编学苑出版社1994
代码转换程序课程设计报告
一.概述
汇编语言是用指令助记符、符号地址和标号等书写程序的语言。
用汇编语言编写的程序,称为汇编语言源程序。
计算机不能直接识别和执行汇编语言,汇编语言源程序必须进行加工翻译转换为机器语言程序。
将源程序翻译成机器语言程序的过程叫汇编。
完成这种工作的语言程序称为汇编语言。
二.设计任务及目标
1.设计任务
在DOS环境中编程完成以下任务:
完成一个字母或数制之间的转换程序,主程序分别具有5种可选择的子功能,按菜单提示,选择相应的字符分别进入相应的子功能,并按屏幕提示完成相应得输入,并显示结果.按“q”健退出。
可选择的子功能分别为:
●实现小写字母向大写字母的转换
●实现大写字母向小写字母的转换
●实现二进制数向十六进制数的转换
●实现十六进制数向二进制数的转换
●实现十六进制数向十进制数的转换
1.参考设计基本思路编程实现上述功能;
2.设计说明书;包括设计思想,程序流程图和源程序
2.设计目的和要求
目的:
学习汇编语言综合应用程序设计方法,提高汇编语言实际应用能力,充分了解计算机硬件和软件,完成理论到实践的推进过程。
要求:
1.根据微机软、硬件条件,没人选定一个具有一定综合性的程序设计题目。
(1)、对题目进行模块分析
(2)、系统设计实用,功能全面
(3)、编程简练、清晰,可读性强,学习良好的程序设计风格。
按质、按量,并按时间完成课程设计的任务。
2.按照所安排的集中上机时间内完成程序调试任务。
(1)、熟悉汇编语言的程序设计,BIOS中断调用,DOS系统功能调用等相关知识。
(2)、熟悉汇编的上机环境,掌握汇编和各种程序调试方法,提高调试程序的效率。
3、撰写设计论文(说明书),要求层次清楚,语言流畅。
4,设计完成时英按时提交设计论文及设计程序。
每组一个文件夹,文件夹以自己的名字和学号命名。
5、提供可运行的课程设计程序,参加上机面试答辩。
三.设计思想分析
1.设计分析
调用BIOS的10H中断的02号功能设置光标;调用DOS系统功能调用的09号功能显示字符串:
一个有提示信息的开始界面。
调用DOS系统功能调用的1号功能,能接受从键盘输入的字符到AL寄存器。
1,首先做一个操作窗口,提示用户:
2,输入1进行大写字母到小写字母的转换:
3,输入2进行小写字母到大写字母的转换:
4,输入3进行16进制数到2进制数的转换:
5,输入4进行2进制数到16进制数的转换:
6,用户输入相应的数字,进入不同的操作界面:
7,然后输入相应的内容进行相应的转换,按回车输出结果,继续按回车返回主菜单操作界面。
8,按‘q’键退出。
1.转换分析
(1)实现大小写字母之间转换输入的字符串中,不是字母的字符不改变;大写字母改成小写字母时,若是大写字母则不改变;同样,小写字母改成大写字母时,若是小写字母则不变。
(2)二进制和十六进制之间的转换:
输入一个二进制数(或十六进制数),用十六进制数(或二进制数)输出。
数值转换是计算机科学技术中最为基础的运算,在日常生活中,人们习惯性的使用十进制数进行计算。
而在计算机内部,所有的信息(数、字符、汉字、计算机的指令、状态)都是用二进制数来表示的。
在计算机中,二进制数的运算、处理比十进制数的更容易实现。
有时为了缩短书写,在计算机中还采用十六进制数。
所以,我们需要把数从二进制数形式转换成其他进制的形式,甚至在不同的进位制之间进行转换。
3.算法分析
代码转换主要由两部分组成:
大小写转换和数制转换。
大小写字母转换就是在其原来的ASCII码的基础上或加或减20H就可得到。
数制转换是二进制、十六进制、十进制之间转换。
通过调用不同的函数避免了数值之间的转换。
对于输入的字符如果是0—10之间的就减去30H,得到其代表的数的含义,A—F之间就减去37H,a—f之间就减去57H,得到其代表的数的含义,然后乘以权值相加存于寄存器即可。
因为寄存器中存的本来就是二进制数,所以直接移位输出就可得到二进制数。
十六进制数是每四位二进制数转换成一位十六进制数即可。
通过调用DOS系统的输入输出功能,使程序具有一定的可视化程度,使用8086丰富的指令系统对输入数据进行处理,最终得到运算结果,在屏幕输出。
因为本设计需满足两个功能,并需输入多字符,故将使用汇编语言的顺序结构、分支结构和循环结构。
主程序初始化后,在提示信息下输入功能选择键,程序会根据输入的键跳入相应的子程序中执行代码转换。
这是一个分支结构。
子程序执行完毕,可以根据需要选择结束程序或继续下一次转换。
开始
调用BIOS的10H中断的02设置光标
功能选项
项
输入1小写转大写程序
输入2大写转小写程序
输入3二进制转十进制程序
输入4十六进制转二进制
调用CLEAR子程序
调用CLEAR子程序
调用CLEAR子程序
调用CLEAR子程序
设置光标位置
设置光标位置,
调用CRLF子程序
调用CRLF子程序
送入DL中,并调用02号功能输出一个字符
送入DL中,并调用02显示一个字符并输出
将二进制转为ASCLL码
将十六进制数的ASCLL码转为二进制
取MSG7的内容,输入一些二进制数
b
a
调用DOS系统1号功能输入到AL
显示主菜单
输入小写字母
判断AL中的内容是否大于“A”则加上20H
输入大写字母
比较AL中的内容,不低于“Z”,则减去20H
输入一串二进制数
取BUFFER的内容是送入AL中,设置光标位置
输入16进制数
取BUFFER的有效地址
调用DOS系统功能的09号功能显示字符串
在屏幕上输出相应结果
是否输入回车
是否按ESC退出
调用DOS系统功能的21H
返回DOS系统
结束
a
是
b
2.源程序代码
DATASSEGMENT
BUFFERDB20DUP(0)
BUFFER1DB20DUP(0)
MSG1DB"PLEASEINPUTYOURCHOICE:
$"
MSG2DB"1:
Uppercasetolowercase$"
MSG3DB"2:
LowercasetoUppercase$"
MSG4DB"3:
BinarytoHex$"
MSG5DB"4:
HextoBinary$"
MSG6DB"PLEASEINPUTSOMEALPHABET:
$"
MSG7DB"PLEASEINPUTSOMEBINARYNUMBER:
$"
MSG8DB"PLEASEINPUTSOMEHEXNUMBER:
$"
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATA,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
P:
CALLMENU;子程序调用
CMPAL,'1'
JZA;若AL=1,则转到A
CMPAL,'2'
JZB;若AL=2,则转到B
CMPAL,'3'
JNZLO
JMPCA
LO:
CMPAL,'4'
JNZEXIT1
JMPD
EXIT1:
JMPEXIT
A:
CALLCLEAR;子程序调用
MOVAH,02;设置光标位置
MOVDH,3
MOVDL,2
INT10H;中断指令
MOVSI,OFFSETMSG6;取MSG6的地址指针送入SI
MOVDX,SI
MOVAH,09;显示一个字符串
INT21H
LEASI,BUFFER;取BUFFER的有效地址给SI
S:
MOVAH,01;输入一个字符
INT21H
MOV[SI],AL
INCSI
CMPAL,0DH;回车
JNZS;若不输入回车,则继续执行S
CALLCRLF
MOVAH,02;设置光标位置
MOVDH,5
MOVDL,28
INT10H
LEASI,BUFFER
Q:
MOVAL,[SI]
CMPAL,'a'
JNBE;若AL的内容低于‘A’则转到E
ADDAL,20H;AL加上20H,大写字母转换为小写字母
E:
MOVDL,AL
MOVAH,02;显示一个字符
INT21H
INCSI
MOVAL,[SI]
CMPAL,0DH
JNZQ;若不输入回车的话,则继续执行Q
MOVAH,01
INT21H
CMPAL,0DH
JZP;若输入回车,则返回P
JMPEXIT
B:
CALLCLEAR;调用子程序
MOVAH,02
MOVDH,3
MOVDL,2
INT10H
MOVSI,OFFSETMSG6
MOVDX,SI
MOVAH,09;显示一个字符串
INT21H
LEASI,BUFFER
M:
MOVAH,01
INT21H
MOV[SI],AL
INCSI
CMPAL,0DH
JNZM;若不输入回车,则继续执行M
CALLCRLF
MOVAH,02;设置光标位置
MOVDH,5
MOVDL,28
INT10H
LEASI,BUFFER
I:
MOVAL,[SI]
CMPAL,5AH
JNGEX;若AL的内容低于‘Z’,则转到X
SUBAL,20H;小写字母转换为大写字母
X:
MOVDL,AL
MOVAH,02
INT21H
INCSI
MOVAL,[SI]
CMPAL,0DH
JNZI
MOVAH,01;输入一个字符
INT21H
CMPAL,0DH
JNZEXIT0;若不输入回车,则转到EXIT0出
JMPP
EXIT0:
JMPEXIT
CA:
CALLCLEAR
MOVAH,02;设置光标位置
MOVDH,3
MOVDL,2
INT10H
MOVSI,OFFSETMSG7
MOVDX,SI
MOVAH,09
INT21H
LEASI,BUFFER
NAA:
MOVAH,01
INT21H
MOV[SI],AL
INCSI
CMPAL,0DH
JNZNAA
CALLCRLF
LEADI,BUFFER
MOVAH,02
MOVDH,5
MOVDL,28
INT10H
Y:
MOVAL,[DI]
SUBAL,30H;将ASCII码转换为二进制
MOVBL,8D
MULBL
ADDAL,30H
MOVDL,0
ADDDL,AL
INCDI
MOVAL,[DI]
SUBAL,30H
MOVBL,4D
MULBL
ADDDL,AL
INCDI
MOVAL,[DI]
SUBAL,30H
MOVBL,2D
MULBL
ADDDL,AL
INCDI
MOVAL,[DI]
SUBAL,30H
MOVBL,1D
MULBL
ADDDL,AL
CMPDL,'9'
JNGT
ADDDL,'A'-':
'
T:
MOVAH,02
INT21H
INCDI
MOVAL,[DI]
CMPAL,0DH
JNZY
MOVAH,01
INT21H
CMPAL,0DH
JNZEXIT
JMPP
D:
CALLCLEAR
MOVAH,02
MOVDH,3
MOVDL,2
INT10H
MOVSI,OFFSETMSG8
MOVDX,SI
MOVAH,09
INT21H
LEASI,BUFFER
FF:
MOVAH,01
INT21H
MOV[SI],AL
INCSI
CMPAL,0DH
JNZFF
CALLCRLF
LEASI,BUFFER
MOVDI,OFFSETBUFFER1
RE:
MOVAL,[SI]
CMPAL,'9'
JNGZ
SUBAL,'A'-':
'
Z:
SUBAL,30H
MOVCX,4
ADDDI,4
YU:
CBW
MOVBL,2D
DIVBL
MOV[DI],AH
PUSHAX
ADDAH,30H;二进制转化为ASCII码
POPAX
DECDI
LOOPYU
ADDDI,4
INCSI
MOVAL,[SI]
CMPAL,0DH
JNZRE
INCDI
MOVAL,'$'
MOV[DI],AL
CALLCRLF
MOVSI,OFFSETBUFFER1+1
MOVAL,[SI]
RT:
ADDAL,30H
MOVDL,AL
MOVAH,02
INT21H
INCSI
MOVAL,[SI]
CMPAL,'$'
JNZRT
MOVAH,01
INT21H
CMPAL,0DH
JNZEXIT
JMPP
EXIT:
MOVAH,4CH
INT21H;返回DOS系统
MENUPROCNEAR
CALLCLEAR;调用子程序
MOVAH,02;设置光标位置
MOVDH,5;第5行
MOVDL,25;第25列
INT10H
LEASI,MSG2
MOVDX,SI
MOVAH,09;显示MSG2的内容
INT21H;输出MSG2字符串
MOVAH,02;至光标位置
MOVDH,7;第7行
MOVDL,25;第25列
INT10H
LEASI,MSG3;取MSG3的有效地址
MOVDX,SI
MOVAH,09
INT21H;输出MSG3字符串
MOVAH,02
MOVDH,9;第9行
MOVDL,25;第25列
INT10H
LEASI,MSG4;取MSG4的有效地址
MOVDX,SI
MOVAH,09
INT21H;输出MSG4字符串
MOVAH,02
MOVDH,11;第11行
MOVDL,25;第25列
INT10H
LEASI,MSG5
MOVDX,SI
MOVAH,09
INT21H;输出MSG5字符串
MOVAH,02;至光标位置
MOVDH,15;第15列
MOVDL,17;第17列
INT10H
LEASI,MSG1
MOVDX,SI
MOVAH,09
INT21H;输出MSG1字符串
MOVAH,01;键盘输入
INT21H
RET;返回
MENUENDP
CLEARPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVAH,07;屏幕初始化或下卷
MOVAL,25;下卷行数
MOVBH,70H;卷入行属性
MOVCH,0;左上角行号
MOVCL,0;左上角列号
MOVDH,24;右下角行号
MOVDL,79;右下角列号
INT10H
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
CLEARENDP
CRLFPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
MOVDL,0DH;输出回车
MOVAH,02
INT21H
MOVDL,0AH;输出换行
MOVAH,02
INT21H
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
RET
CRLFENDP
CODESENDS;代码段结束
ENDSTART;程序结束
五.运行方式和结果
程序在运行时首先会显示主界面,然后根据用户的不同选择调用的模块,实现不同的功能。
执行后跳转到主模块,若是其他字符,则显示出错信息,并返回主模块。
(一).错误分析
1.
此处把小写的a打成大写的a,虽然编译时,程序不会出错,但是运行程序时,就不能实现小写向大写的转换,使得程序运行有误。
2.
此处标注时,没打“;”造成编译错误,在标注前加“;”即可正常编译
3.
改正:
MOV[SI],AL
分析;MOV指令不能在两个内存单元之间传送数据。
传送8位数据还是16位数据,取决于立即数的形式。
4.温馨提示:
此程序代码较多,在输入程序时
①应该把代码对其,方便检查;
②注意引号里大小写字母:
③注释时,分号“;”的使用
④用MOV指令时,判断“【】”符号的使用
(二).正确运行
运行程序进入如图所示界面
1,输入1进入大写换小写操作界面运行结果如图
3,输入2进入小写换大写操作界面安回车运行结果如图
4,输入3进入2进制数转换成16进制数操作显示界面如图
5.输入4进入16进制数转换2进制数操作界面如图
六.课程设计总结报告
1.课程设计中所遇到的主要问题和解决方法
课程设计中存在的不足,需要进一步改进的思想
二进制换十六进制,输入的二进制代码只能是4的整数倍位,因为处理的时候是将4位二进制代码换算成一位16进制,程序内部的运算(大小写切换,进制转换全部通过ASCII码进行计算)
2.创新和得意之处。
用汇编语言制作可视化窗口,方便易懂,便于用户使用。
2.设计心得体会
通过这次的《微机原理》课程设计,使我又学习了很多知识,而且是课堂上不容易得到的知识。
俗话说,“实践出真知”,课堂上学习到的理论知识,如果不转换为实践的话,始终斗将知识一纸空文,,没什么大的价值。
而这次的课程设计,则给了我把理论转换为实践的机会,使我受益匪浅。
具体的来说,首先,通过课程中的程序设计,结合课堂上的理论,我能熟练的使用汇编语言编写程序,熟悉各寄存器的使用方法和数据传送于处理,了解汇编语言在计算机中运行的规律。
在汇编程序编写中,我还学到了调用DOS来辅助程序设计。
其次,此次课程设计,汇编语言并不像想象中的那么晦涩难懂,其实它也有灵活的结构和处理方式,而且强大的寻址能力使程序运行能力很快。
此外,较难处理的寄存器,使我在程序编写与调试中渐渐理解了计算机底层对各数据的处理方式和运行机理,即我们打开了计算机这个黑匣子,了解了它的内部。
因此,可以说我的视野有得到了很大的拓展。
再次,因为汇编语言与硬件联系比较紧密,通过对汇编程序的设计的深刻理解,在某种程度上帮组我对硬件的驱动与设计有了不少的认识,而且也渐渐能把软件和硬件的结合起来。
总之,本次课程设计巩固和加强了我们的汇编语言的理论知识,使我们掌握了汇编语言的程序设计方法,并让我们了解了综合问题的程序设计、研制、调试过程,对较大规模程序的设计和调试有了一个基本的认识,培养了我们些课程设计报告的能力、不可否认,初次进行汇编课程设计必然会存在不少问题和缺点,但通过这次课程设计找出了自己再学习上的不足,对以后的工作也有作用,我相信在以后的学习中会客服这些不足,达到熟练掌握汇编语言的目的!