完整word版汇编语言课程设计代码转换程序.docx
- 文档编号:20133757
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:27
- 大小:43.32KB
完整word版汇编语言课程设计代码转换程序.docx
《完整word版汇编语言课程设计代码转换程序.docx》由会员分享,可在线阅读,更多相关《完整word版汇编语言课程设计代码转换程序.docx(27页珍藏版)》请在冰豆网上搜索。
完整word版汇编语言课程设计代码转换程序
汇编语言课程设计报告
(2010——2011年度第2学期)
代码转换程序
专业
计算机科学与技术
学生姓名
袁帅
班级
B计算机092
学号
0910704225
指导教师
王志宏
完成日期
2011年6月24日
代码转换程序设计
1概述
1.1课程设计目的
1、通过利用汇编语言写代码转换程序,更好的掌握汇编语言,通过实践来巩固汇编语言的理论知识。
2、巩固并加深对汇编语言程序设计知识的理解
3、进一步掌握和应用汇编语言集成开发环境
4、提高运用汇编语言解决实际问题的能力
5、掌握书写程序设计开发文档的能力(书写课程设计实验报告)
1。
2课程设计内容
功能菜单的编制;小写字母向大写字母的转换;大写字母向小写字母的转换;二进制数向十六进制数的转换;十六进制数向二进制数的转换;十六进制数向十进制数的转换。
2程序需求分析
2。
1程序目标
实现代码转换:
大小写字母之间转换,二进制、十进制、十六进制之间的相互转换。
2.2主体功能
模块2、模块3选项,进行大小写字母的转换,显示出待转换的字母及转换后的字母。
在实际应用中,不仅有数值的运算,还有更多的是大量的非数值的处理,特别是在现代或今后的社会活动中,非数值处理在管理程序、文字处理和过程控制中将会得到广泛的应用。
模块4、模块6、模块7选项,进行数制的转换,显示出待转换数值及转换后的数值。
本选项的功能时实现十进制数向二进制和十六进制的转换。
由于用户输入的数一般是用十进制表示的,而这些数在计算机内存储、运算时一般都是用二进制,这就涉及到了十进制数向二进制的转换问题,所以二进制和十进制之间的转换算法是汇编语言程序员应该掌握的基本算法之一.
2.3开发环境
MicrosoftWindows7TASM
3程序概要设计
3。
1程序的功能模块划分
设计一个字母和数制之间的转化的程序,用户通过输入不同的数字,来选择要实现的功能.输入6可直接退出程序。
本程序共有7个模块:
模块5为主模块,调用模块1和模块7.
开始
显示提示信息
调用功能接收键盘输入信息
实现小写字母向大写字母的转换
实现大写字母向小写字母的转换
实现二进制数向十六进制数的转换
实现十六进制数向二进制数的转换
实现十六进制数向十进制数的转换
输出错误
是“2”?
是“3”?
是“4”?
是“5”?
是“6”?
是“1”?
退出
Y
N
Y
Y
Y
Y
Y
N
N
N
N
N
模块1又调用模块2、3、4和6四个模块,其中:
模块2实现小写字母向大写字母的转换。
模块3实现大写字母向小写字母的转换.模块4实现二进制数向十六进制数的转换。
模块6实现十六进制数向二进制数的转换。
模块7实现十六进制数向十进制数的转换。
3。
2程序流程图
图3-1程序流程图
开始
从键盘读取字符
是否a~z之间
输出对应字符的大写
输出错误
结束
Y
N
开始
从键盘读取字符
A~Z之间
输出对应字符的小写
输出错误
结束
Y
N
图3-2小写向大写转换图3—3大写向小写转换
开始
从键盘读取字符
十六进制数
输出对应二进制数
输出错误
结束
Y
N
开始
从键盘读取字符
二进制数
输出对应十六进制数
输出错误
结束
Y
N
图3-4二进制向十六进制转换图3-5十六进制向二进制转换
开始
从键盘读取字符
十六进制数
输出对应十进制数
输出错误
结束
Y
N
图3-6十六进制向十进制转换
4程序详细设计
4.1程序功能菜单模块设计
主菜单的功能选择菜单的代码如下:
;*****主程序中的提示信息*****
str1DB0AH,0DH,'******************************************************$’
str2DB0AH,0DH,’**Welcomeyou!
**$’
str3DB0AH,0DH,’**—---——--———-—-——---—--———--——-—---——--—---—-——--—-————--—-—-———-————------**$'
str4DB0AH,0DH,’**Thisisprogrammeofcodeconversion!
**$’
str5DB0AH,0DH,'**Pleaseinputyourchoice:
**$'
str6DB0AH,0DH,’**1:
LowercaseletterstoCapitalletters**$'
str7DB0AH,0DH,’**2:
CapitalletterstoLowercaseletters**$’
str8DB0AH,0DH,'**3:
BinarytoHex**$’
str9DB0AH,0DH,’**4:
HextoBinary**$'
str10DB0AH,0DH,'**5:
HextoDecimal**$'
str11DB0AH,0DH,'**6:
Quitorexit**$’
str12DB0AH,0DH,'******************************************************$'
通过disp语言将其打印在屏幕上,用户可以通过输入不同的字母来选择实现不同的功能。
(输入的字母不区分大小写)
4.2小写字母向大写字母转换模块设计
先从键盘上读取字符:
start:
pushds
subax,ax
pushax
movax,data
movds,ax
并判断字符是否有效:
again:
movah,1
int21h
cmpal,’0'
得到有效字符之后,通过ASCII值进行运算得到相应的大写字母并输出.
4.3大写字母向小写字母转换模块设计
先从键盘上读取字符:
start:
pushds
subax,ax
pushax
movax,data
movds,ax
并判断字符是否有效:
again:
movah,1
int21h
cmpal,’0'
得到有效字符之后,通过ASCII值进行运算得到相应的小写字母并输出。
4。
4二进制数向十六进制数转换模块设计
先从键盘上读取字符:
start:
pushds
subax,ax
pushax
movax,data
movds,ax
并判断字符是否有效:
again:
movah,1
int21h
cmpal,'0’
当得到有效字符时,对得到的二进制数进行运算得到十六进制数并输出,在输出时在数字的结尾加上十六进制标识符H。
4.5十六进制数向二进制数转换模块设计
先从键盘上读取字符:
start:
pushds
subax,ax
pushax
movax,data
movds,ax
并判断字符是否有效:
again:
movah,1
int21h
cmpal,’0'
当得到有效字符时,对得到的十六进制数进行运算得到二进制进制数并输出,在输出时在数字的结尾加上二进制数标识符B。
4。
6十六进制数向十进制数转换模块设计
先从键盘上读取字符:
start:
pushds
subax,ax
pushax
movax,data
movds,ax
并判断字符是否有效:
again:
movah,1
int21h
cmpal,'0’
当得到有效字符时,对得到的十六进制数进行运算得到十进制数并输出,在输出时在数字的结尾加上十进制数标识符D.
5测试
5.1测试方案
图5-1主菜单
图5—3小写字母向大写字母转换
图5—4大写字母向小写字母转换
图5-5二进制向十六进制转换
图5-6十六进制向二进制转换
图5-7十六进制向十进制转换
5.2测试结果
程序在大小写字母转换,二进制数,十进制数和十六进制数之间的相互转换中没有出错,当输入错误的指令或字符时会提示输入错误并让用户继续输入。
测试结果如下图所示:
图5—8输入错误指令时
6小结
通过此次课程设计,使我更加扎实的掌握了有关汇编语言方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。
实践出真知,通过亲自动手编程,使我们掌握的知识不再是纸上谈兵。
在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。
最终把程序调试成功。
这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在和同学的讨论下,还有网上搜索的结果下,终于游逆而解。
在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
课程设计给我很多专业知识以及专业技能上的提升,同时又给了我许多思考方法,给了我很多思考思路,给了我很大的自由发挥空间。
同时,设计让我感触很深。
使我对抽象的理论有了具体的认识.通过这次课程设计,我掌握了汇编语言更多知识,这些是课本上没有的。
我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,在实验课上,我们学会了很多学习的方法。
而这是日后最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助.
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握所学的知识,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
课程设计过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情.团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询或者同学间相互讨论,只要认真钻研,动脑思考,动手实践,就没有克服不了的难题.
参考文献
[1]刘其明.汇编语言程序设计教程[M]。
江苏:
中国矿业大学出版社,2010。
10
[2]沈美明.IBM—PC汇编语言程序设计实验教程[M].北京:
清华大学出版社,2010。
6
附录
附录1源程序清单
附录1。
1程序功能菜单模块源程序
主菜单:
extrnmain:
far,change1:
far,change2:
far,change3:
far,change4:
far,change5:
far
stacksegmentparapublic'stack’
db200dup(0)
stackends
datasegment
;*****主程序中的提示信息*****
str1DB0AH,0DH,’******************************************************$’
str2DB0AH,0DH,'**Welcomeyou!
**$'
str3DB0AH,0DH,’**--——---—-----————-—-----——---—-----—---—---—---—————---————----——-—---—-—-**$’
str4DB0AH,0DH,’**Thisisprogrammeofcodeconversion!
**$’
str5DB0AH,0DH,’**Pleaseinputyourchoice:
**$'
str6DB0AH,0DH,'**1:
LowercaseletterstoCapitalletters**$’
str7DB0AH,0DH,'**2:
CapitalletterstoLowercaseletters**$'
str8DB0AH,0DH,’**3:
BinarytoHex**$’
str9DB0AH,0DH,'**4:
HextoBinary**$’
str10DB0AH,0DH,’**5:
HextoDecimal**$’
str11DB0AH,0DH,'**6:
Quitorexit**$'
str12DB0AH,0DH,'******************************************************$’
str13DB0Ah,0Dh,'Inputerror,pleaserepess!
',’$’
str14DB0AH,0DH,0AH,0DH,’Inputyourchoice:
’,’$'
dataends
codesegment
assumecs:
code,ds:
data,ss:
stack
start:
movax,data
movds,ax
dispmacrom
leadx,m
movah,9
int21h
endm
dispstr1
dispstr2
dispstr3
dispstr4
dispstr5
dispstr6
dispstr7
dispstr8
dispstr9
dispstr10
dispstr11
dispstr12
dispstr14
lop:
movah,8
int21h
cmpal,'1'
jzltol
cmpal,’2’
jzlto2
cmpal,'3’
jzlto3
cmpal,’4’
jzlto4
cmpal,'5'
jzlto5
cmpal,’6’
jzexit
dispstr13
dispstr14
jmplop
ltol:
callmain
callchange1
jmplop
lto2:
callmain
callchange2
jmplop
lto3:
callmain
callchange3
jmplop
lto4:
callmain
callchange4
jmplop
lto5:
callmain
callchange5
jmplop
exit:
movah,4ch
int21h
codeends
endstart
子菜单:
publicinfo1,info2,bufa,bufb,buf,main,info0,info3
extrnchange1:
far,change2:
far,change3:
far,change4:
far
datasegment
info0db0ah,0dh,’thisisthechangeoflettertoleter:
$’
info1db0ah,0dh,’pleaseinputstring:
$'
info2db0ah,0dh,'outputstring:
$'
bufadb81
db?
db80dup(?
)
bufbdb80dup(?
)
info3db0ah,0dh,’thisisthechangeofdigitaltodigital:
',0ah,0dh,'$’
bufdb0dh,0ah,’thenumberis:
0100101010001111b',0ah,0dh,'theresultis:
$'
dataends
stacksegmentstack
db200dup(?
)
stackends
codesegment
mainprocfar
assumeds:
data,cs:
code,ss:
stack
movax,data
movds,ax
dispmacrom
leadx,m
movah,9
int21h
endm
callchange1
callchange2
dispinfo3
dispbuf
callchange3
callchange4
ret
mainendp
codeends
end
附录1。
2小写字母向大写字母转换模块源程序
extrninfo1:
byte,info2:
byte,bufa:
byte,bufb:
byte,info0:
byte
publicchange1
codesegment
assumecs:
code
lowtohighprocnear
cmpal,'a'
jbstop
cmpal,'z'
jastop
subal,20h
stop:
ret
lowtohighendp
change1procfar
leadx,info0
movah,9
int21h
leadx,info1
movah,9
int21h
leadx,bufa
movah,10
int21h
leasi,bufa+1
leadi,bufb
movch,0
movcl,[si]
addsi,1
next:
moval,[si]
calllowtohigh
mov[di],al
incsi
incdi
loopnext
movbyteptr[di],'$’
leadx,info2
movah,9
int21h
leadx,bufb
movah,9
int21h
ret
change1endp
codeends
end
附录1。
3大写字母向小写字母转换模块源程序
extrninfo1:
byte,info2:
byte,bufa:
byte,bufb:
byte
publicchange2
codesegment
assumecs:
code
hightolowprocnear
cmpal,’A’
jbstop
cmpal,'Z'
jastop
addal,20h
stop:
ret
hightolowendp
change2procfar
leadx,info1
movah,9
int21h
leadx,bufa
movah,10
int21h
leasi,bufa+1
leadi,bufb
movch,0
movcl,[si]
incsi
next:
moval,[si]
callhightolow
mov[di],al
incsi
incdi
loopnext
movbyteptr[di],'$'
leadx,info2
movah,9
int21h
leadx,bufb
movah,9
int21h
ret
change2endp
codeends
end
附录1.4二进制数向十六进制数转换模块源程序
extrnbuf:
byte,info3:
byte
publicchange3
codesegment
change3procfar
assumecs:
code
subax,ax
movch,4
movcl,4
movbx,4a8fh
rotate:
rolbx,cl
moval,bl
andal,0fh
addal,30h
cmpal,3ah
jlprintit
addal,7h
printit:
movdl,al
movah,2
int21h
decch
jnzrotate
movdl,'H’
movah,2
int21h
ret
change3endp
codeends
end
附录1。
5十六进制数向二进制数转换模块源程序
publicchange4
datasegment
bufdb0ah,0dh,’pleaseinputthefourhexnumber:
$’
dataends
codesegment
assumecs:
code,ds:
data
change4procfar
movax,data
movds,ax
leadx,buf
movah,9
int21h
movbx,0
movch,4
input:
movcl,4
salbx,cl
movah,1
int21h
cmpal,39h
jaaf
andal,0fh
jmpbinary
af:
andal,0fh
addal,9
binary:
orbl,al
decch
cmpch,0
jneinput
movdl,’H’
movah,2
int21h
movdl,0ah
movah,2
int21h
movdl,0dh
movah,02
int21h
movcx,16
disp:
movdl,0
rolbx,1
rcldl,1
ordl,30h
movah,02h
int21h
loopdisp
movdl,’B'
movah,2
int21h
ret
change4endp
codeends
end
附录1。
6十六进制数向十进制数转换模块源程序
publicchange5
datasegment
binarydw7fffh,50h
n=($-binary)/2
bufdb7dup(0)
info1db0ah,0dh,'thisisthechangefromhexnumbertodecimal:
$’
info2db0ah,0dh,’thenumberis:
7fffh,50h$’,0ah,0dh
info3db0ah,0dh,’the
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 汇编语言 课程设计 代码 转换 程序