大小转换程序.docx
- 文档编号:30676478
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:22
- 大小:23.04KB
大小转换程序.docx
《大小转换程序.docx》由会员分享,可在线阅读,更多相关《大小转换程序.docx(22页珍藏版)》请在冰豆网上搜索。
大小转换程序
前言
在20世纪的最后20年中,计算机被成功的应用于工程设计和制造业中,它成倍的提高了劳动生产率,创造了空前巨大的物质文明,它把任何创新的思想转化为市场商品的时间缩短到惊人的程度计算机技术的发展日新月异,在未来的几年中,各种计算机相关技术都会得到飞速
发展和应用,使计算机变得更加人性化,智能化。
而多媒体技术与网络技术的迅猛势头
人类所使用的计算工具是随着生产的发展和社会的进步,从简单到复杂、从低级到高级的发展过程,计算工具相继出现了如算盘、计算尺、手摇机械计算机、电动机械计算机等。
1946年,世界上第一台电子数字计算机(ENIAC)在美国诞生。
这台计算机共用了18000多个电于管组成,占地170m2,总重量为30t,耗电140kw,运算速度达到每秒能进行5000次加法、300次乘法。
电子计算机在短短的50多年里经过了电子管、晶体管、集成电路(IC)和超大规模集成电路(VLSI)四个阶段的发展,使计算机的体积越来越小,功能越来越强,价格越来越低,应用越来越广泛,目前正朝智能化(第五代)计算机方向发展。
微机原理与接口技术的进步将更好更快的推动计算机技术的发展。
在未来的社会中将其这越来越重要的作用。
目录
1设计思路及流程图1
2程序段设计3
2.1实现“0”“1”输入和判断的程序段3
2.2大小写字母判断程序段设计5
2.3大小写字母转换程序设计7
2.4响铃报警程序设计8
3总程序设计及调试10
心得体会16
参考文献18
1设计思路及流程图
本次课设的题目是:
英文字母大小写转换程序设计。
要求:
1、输入英文字母串,在回车后实现大小写转换。
2、按命令要求将字符串转换为全部大写或全部小写。
3、非英文字母不允许输入并声响报警。
4、程序采用汇编语言在PC机上完成。
接到这个题目时,我首先考虑到大小写之间的转换是关键,可能要用到子程序,循环程序和中断程序以及一些比较和跳转指令等。
在经过反复思考和设计后我得到了以下的设计思路:
首先程序应该输出提示信息,以用来为下面的程序选择做准备(是选择大写转小写程序还是选择小写转大写程序),如“0”和“1”.“0”用来执行大写转小写程序,“1”用来执行小写转大写程序。
当我们按提示输入信息若是“0”程序应该输出提示输入大写字母信息,若是“1”程序应该输出提示输入小写字母信息并且存入寄存器单元,如AL,否则程序显示错误信息并返回重新输入。
在输入大写或小写字母后回车程序立即判断所输入的信息是否符合要求,若是则程序根据AL中数据分别调用小写转大写程序或大写转小写程序(大小写字母间相差20H)并输出结果,程序结束;若输入的信息不符合要求程序接下来要完成三个任务:
报警,显示错误信息,跳转回到“显示输入提示信息”程序段处重新输入信息。
总体思路出来后就要设计各个程序段。
程序段分为:
错误提示程序段,显示输出程序段,大小写字母判断程序段,大小写字母转换程序段和报警程序段。
对各个程序段分别设计,然后加以连接和协调完成最后总程序的设计。
最后在PC机上运行,根据出现的情况加以修改和完善。
程序设计流程图如下页所示:
开始
回车?
输入在31H~5AH或61H~7AH之间?
Choice为0?
调用大写转小写子程序
调用小写转大写子程序
显示结果
结束
显示错误信息
报警
显示提示信息
AL为0?
AL为1?
显示错误信息
NN
Y
Y
显示输入提示信息
Y
N
Y
YN
图1.1程序设计流程图
2程序段设计
2.1实现“0”“1”输入和判断的程序段
该程序段要实现的功能是:
首先程序应该输出提示信息,以用来为下面的程序选择做准备(是选择大写转小写程序还是选择小写转大写程序),如“0”和“1”.其中“0”用来执行大写转小写程序,“1”用来执行小写转大写程序。
若是“0”或“1”将其存储并显示输入大小写字母提示信息,若不是则显示错误信息并跳转到输入前从新输入。
程序段如下:
lp1:
movah,9;显示大小写提示信息
movdx,offsetinput_message
int21h
input:
movah,8
int21h;是否为ESC
cmpal,1bh
jeover;若是则结束
cmpal,'0'
jnenext1
movchoice,0;保存选择项
jmpbegin
next1:
cmpal,'1'
jneerror
movchoice,1
jmpbegin
over:
movah,4ch;返回DOS
int21h
error:
movdx,offseterror_message;显示错误信息
movah,9
int21h
jmpinput;转回继续输入
begin:
movdx,offsetmes2;显示输入提示信息
movah,9
int21h
movsi,offsetnum;取输入数的偏址
movdi,offsetoutput;取输出数的偏址
fff:
movah,01h;等待输入
int21h
cmpal,0dh;是否是回车
jedisp;若是则跳显示程序
disp:
mov[di],'$';将结果的最后以$结束
movdl,10;回车换行
movah,2
int21h
movdl,13
movah,2
int21h
movdx,offsetoutput;输出结果
movah,09h
int21h
jmplp1
程序段中,MOV:
数据传送指令。
将源操作数传送到目的操作数中。
CMP:
比较指令。
将源操作数和目的操作数相减,结果不存储。
影响标志位。
JMP:
无条件转移指令。
JE:
条件跳转指令。
相等则跳转。
JNE:
条件跳转指令。
不相等则跳转。
OFFSET:
取源操作数首地址。
上述程序段加上代码段和结束程序段后在DEBUG环境下运行后如图所示:
图2.1实现“0”“1”输入运行结果
在显示“pleasetakeachoice”后输入0,屏幕显示“nowentercharactors”.若在显示“pleasetakeachoice”后输入除0和1外的任意一个数如5等,运行后结果如下:
图2.2实现“0”“1”输入的判断运行结果
综上可见程序运行结果符合设计要求。
2.2大小写字母判断程序段设计
本程序段要实现对输入大小写字母的判断,若是符合要求的大小写字母则将其存储并进入下一步,若不是则显示错误信息并跳回到程序段开始处要求重新输入。
程序段如下:
cmpal,41h
jbmes2a
cmpal,5bh;比较是否为大小写字母
jbxxx;若不是则转错误处理程序
cmpal,61h
jbmes2a
cmpal,7ah
james2a
xxx:
mov[si],al;将AL内容存储
jmplp2
mes2a:
callbell;调用响铃报警程序
movah,9
movdx,offseterror_message;显示错误提示信息
int21h
jmpbegin
程序段中的一些指令功能如下:
JA:
条件跳转指令。
大于则跳转。
JB:
条件跳转指令。
小于则跳转。
程序中的重要语句解释如下:
cmpal,41h;将输入的数据与大写字母的第一个字母A(41H)进行比较。
jbmes2a:
若小于41H则al中内容既不是小写字母也不是大写字母则跳转到显示错误信息的程序段mes2a.而5bH是大写字母Z的ASCII码,61H和7aH分别是小写字母a和z的ASCII码。
若输入数据在大小写字母范围内则将其存储即mov[si],al,若不是则取错误信息的首地址movdx,offseterror_message并显示错误信息。
上述程序段加上代码段和结束程序运行后结果如下(假设第一步输入0):
图2.3大小写字母判断程序输入大写字母运行结果
若输入不是大写字母则显示错误信息并跳转到程序段开头重新输入:
图2.4大小写字母判断程序输入非大写字母运行结果
程序运行后可见结果符合预计要求。
2.3大小写字母转换程序设计
利用大小写字母间相差20H的规律,将大写字母加20H转换为小写字母,将小写字母减20H转换为大写字母。
逐个修改并取指针进行转换,完成后结束程序。
大小写字母转换程序段为:
cmpal,0
jebbb
cmpdl,5ah
jaccc
jmpeee
ccc:
subdl,20h;转换为大写
jmpeee
bbb:
cmpdl,61h
jbddd
jmpeee
ddd:
adddl,20h;转换为小写
eee:
mov[di],dl;存储转换结果
incsi;修改指针
incdi
程序中的重要指令解释如下:
JE:
条件跳转指令。
相等则跳转。
SUB:
算术减法指令。
将目的操作数减源操作数,结果送目的操作数。
ADD:
算术加法指令。
将两操作数相加,结果放目的操作数。
INC:
自动加1指令。
执行后操作数自动加1。
该程序段中,若al中数据为0且输入为大写字母则转到ddd执行大写转小写指令ddd:
adddl,20h;若al中数据为1且输入为小写字母则转到ccc执行小写转大写指令ccc:
subdl,20h。
每对字符串中的一个字母操作完成后,将存储大写或小写字母的存储单元指针加一,对下一字母进行同样的转换操作,直到字符串结束。
运行结果如图:
图2.5大小写字母转换程序运行结果
2.4响铃报警程序设计
当输入为非大小写字母时,要求系统自动进行报警。
需要设计一个报警程序段。
程序段如下:
bellproc;响铃报警程序
pushdx
pushax
pushcx
movdx,30000d;开关30000d次
inal,61h
andal,11111100b
sound:
xoral,2
out61h,al
movcx,50h;等待数值
wait1:
loopwait1
decdx
jnzsound
popcx
popax
popdx
ret
bellendp
程序段中的一些指令功能为:
PUSH:
将源操作数内容压栈,同时自动修改栈顶指针。
POP:
从堆栈弹出数据,实现与PUSH相反的操作。
XOR:
将源操作数和目的操作数按位进行异或运算。
DEC:
将操作数自动减一。
LOOP:
循环指令。
每执行一次循环次数自动减一。
3总程序设计及调试
在完成了各个功能程序段的设计后,对各个程序段进行调试和连接,加入数据段,代码段和结束程序段后得到总程序:
dsegsegment
numdb256dup(00)
outputdb256dup(00)
choicedb?
input_messagedb10,13,'0:
capitaltosmall1:
smalltocapital';大小写提示信息
db0dh,0ah
db'pleasetakeachoice(0/1):
'
db0dh,0ah,'$'
error_messagedb'inputerror!
tryagain';错误提示信息
db0dh,0ah,'$'
mes2db'nowentercharactors',0ah,0dh;输入提示信息
db0ah,0dh,'$'
dsegends
csegsegment
assumecs:
cseg,ds:
dseg
start:
movax,dseg
movds,ax
lp1:
movah,9;显示大小写提示信息
movdx,offsetinput_message
int21h
input:
movah,8
int21h;是否为ESC
cmpal,1bh
jeover;若是则结束
cmpal,'0'
jnenext1
movchoice,0;保存选择项
jmpbegin
next1:
cmpal,'1'
jneerror
movchoice,1
jmpbegin
over:
movah,4ch;返回DOS
int21h
error:
movdx,offseterror_message;显示错误信息
movah,9
int21h
jmpinput;转回继续输入
begin:
movdx,offsetmes2;显示输入提示信息
movah,9
int21h
movsi,offsetnum;取输入数的偏址
movdi,offsetoutput;取输出数的偏址
fff:
movah,01h;等待输入
int21h
cmpal,0dh;是否是回车
jedisp;若是则跳显示程序
cmpal,41h
jbmes2a
cmpal,5bh;比较是否为大小写字母
jbxxx;若不是则转错误处理程序
cmpal,61h
jbmes2a
cmpal,7ah
james2a
xxx:
mov[si],al;将AL内容存储
jmplp2
mes2a:
callbell;调用响铃报警程序
movah,9
movdx,offseterror_message;显示错误提示信息
int21h
jmpbegin
lp2:
movdl,[si]
moval,choice;根据choice内容来决定程序分支
cmpal,0
jebbb
cmpdl,5ah
jaccc
jmpeee
ccc:
subdl,20h;转换为大写
jmpeee
bbb:
cmpdl,61h
jbddd
jmpeee
ddd:
adddl,20h;转换为小写
eee:
mov[di],dl;存储转换结果
incsi;修改指针
incdi
jmpfff
disp:
mov[di],'$';将结果的最后以$结束
movdl,10;回车换行
movah,2
int21h
movdl,13
movah,2
int21h
movdx,offsetoutput;输出结果
movah,09h
int21h
jmplp1
bellproc;响铃报警程序
pushdx
pushax
pushcx
movdx,30000d;开关30000d次
inal,61h
andal,11111100b
sound:
xoral,2
out61h,al
movcx,50h;等待数值
wait1:
loopwait1
decdx
jnzsound
popcx
popax
popdx
ret
bellendp
startends;程序结束
csegends
endstart
对上述程序调试运行首先程序输出了提示信息“pleasetakeachoice”(是选择大写转小写程序还是选择小写转大写程序),“0”用来执行大写转小写程序,“1”用来执行小写转大写程序。
当按提示输入信息后显示“nowentercharactors”若是“0”程序会输出提示输入大写字母信息,若是“1”程序输出提示输入小写字母信息并且存入寄存器单元,如AL,否则程序显示错误信息并返回重新输入。
在输入大写或小写字母后回车程序立即判断所输入的信息是否符合要求,若是则程序根据AL中数据分别调用小写转大写程序或大写转小写程序(大小写字母间相差20H)并输出结果,程序结束;若输入的信息不符合要求程序接下来要完成三个任务:
报警,显示错误信息,跳转回到“显示输入提示信息”程序段处重新输入信息。
总程序在DEBUG中运行后结果如下:
图3.1总程序输入英文字母运行结果
按提示,首先输入“0”,系统提示“nowentercharactors”,输入“ABCDEFGH”回车后系统输出“abcdefgh”;按提示再输入“1”系统提示“nowentercharactors”,输入“abcdefgh”回车后输出“ABCDEFGH”。
实现了大小写字母间的转换。
图3.2总程序输入非英文字母运行结果
按提示输入“0”或“1”后输入非英文字母“7”和“@”系统均有错误提示信息“error!
Tryagain”实现了非英文字母不允许输入并提示出错的功能。
到此全部程序设计及调试过程全部结束。
结果符合任务书要求,实现了大小写英文字母转换及非英文字母不允许输入的功能。
心得体会
通过这次课程设计,提高了我独立思考和解决问题的能力。
在整个设计过程中,我分模块分别设计和调试,完成了最后的总设计。
在设计过程中,经常会遇到这样那样的情况,就是心里想老着这样的编程可以行得通,但实际运行后,总是实现不了,因此耗费在这上面的时间用去很多。
做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解,而且考试内容有限,所以在这次课程设计过程中,我从根本上了解了很多很多知识点,并且对于它们在实际中的应用有了更多的认识。
平时看课本时,有时问题老是弄不懂,做完课程设计,那些问题就迎刃而解了。
而且还可以记住很多东西。
平时看课本,这次看了,下次就忘了,认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
所以这个期末测试之后的课程设计对我的作用是非常大的。
经过一个星期的设计,过程曲折可谓一语难尽。
在此期间我也失落过,也曾一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过课程设计,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈电子设计为我们的社会付出。
我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的合作,我感觉我和同学们之间的距离更加近了;我想说,确实很累,但当我们看到自己所做的成果时,心中也不免产生兴奋;正所谓“三百六十行,行行出状元”。
我们同样可以为社会作出我们应该做的一切,这有什么不好?
我们不断的反问自己。
也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就可。
社会需要我们,我们也可以为社会而工作。
既然如此,那还有什么必要失落呢?
于是我们决定沿着自己的路,执着的走下去。
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
对我们而言,知识上的收获重要,精神上的丰收更加可喜。
挫折是一份财富,经历是一份拥有。
这次实习必将成为我人生旅途上一个非常美好的回忆!
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师的身上我们学也到很多实用的知识,在次我们表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!
此次课程设计,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。
在此,感谢黄老师的细心指导,也同样谢谢其他各组同学的无私帮助!
参考文献
[1]姚燕南,薛钧义.微型计算机原理.西安:
西安电子科技大学出版社,1998
[2]王萍.微机原理应用实践.北京:
机械工业出版社,2001
[3]冯博琴.微型计算机原理与接口技术.北京:
清华大学出版社,2002
[4]徐建民,王东.汇编语言程序设计.北京:
电子工业出版社,2005
[5]姚君遗.汇编语言程序设计.南京:
南京大学出版社,1997
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大小 转换 程序