汇编语言课程设计(论文)_第1页
汇编语言课程设计(论文)_第2页
汇编语言课程设计(论文)_第3页
汇编语言课程设计(论文)_第4页
汇编语言课程设计(论文)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程设计说明书题目: 代码转换程序院系:计算机科学与工程学院专业班级:学号:学生姓名:指导教师:2010 年12 月26 日安徽理工大学课程设计(论文任务书计算机科学与工程院系计算机硬件教研室学号学生姓名专业(班级设计题目代码转换程序设计技术参数1.熟悉汇编指令、宏汇编语言的编程方法2. BIOS中断调用、系统功能中断调用方法3.磁盘文件、及文件内容操作设计要求1.程序分七个模块编写,不同模块实现不同功能1为主模块,调用模块5和模块7,模块5又调用模块2、3、4和模块6四个模块,其中:模块2实现小写字母向大写字母的转换,模块3实现大写字母向小写字母的转换,模块4实现二进制数向十进制数的转换,

2、模块6实现十六进制数向二进制数的转换,模块7实现十进制数向十六进制数的转换。按“q”键退出2.运行程序后,屏幕上要有选择哪种转换的提示菜单3.显示结果,十进制数后要加D,十六进制数后要加H表示;二进制数要以二进制形式输出,后面要加B工作量1.完成所选题目的软件设计2.课程设计说明书1500字(不包括程序源代码左右。工作计划1. 首先认真研究老师所给的题目,了解题目要求做什么。2. 查阅资料,解决难题。3. 编写源程序并调试之。4. 写课程设计说明书4 张海藩. 软件工程.北京:人民邮电出版社,2009指导教师签字教研室主任签字2010年 12月26日安徽理工大学课程设计(论文成绩指导教师评语:

3、成绩:指导教师:年月日摘要本课程设计是代码转换程序,能够根据菜单选择具体实现小写字母转大写字母,大写字母转小写字母,二进制数转换成十进制数,十六进制数转换成二进制数,十进制数转换成十六进制数。这些功能的实现,是在基本的汇编指令及高级汇编的基础上,通过各种BIOS 调用和数据段、栈段、代码段、各模块之间的调用等的熟练运用,从而实现了此程序的功能。关键字:代码转换中断模块调用目录1.需求分析 (11.1背景分析 (11.2功能需求 (12.概要设计 (22.1 系统流程图 (23.详细设计 (33.1 系统开发环境 (33.2 程序代码设计 (33.3程序运行界面显示 (94.小结 (134.1

4、系统的优缺点 (134.2 系统设计的体会 (13参考文献 (14致谢 (151.需求分析1.1背景分析本程序通过汇编基础指令,高级汇编语言及BIOS中断来编写程序实现能够从键盘选择菜单具体实现小写字母转大写字母,大写字母转小写字母,二进制数转换成十进制数,十六进制数转换成二进制数,十进制数转换成十六进制数,本实验是在32位系统下编写和实现的。1.2功能需求利用软件工程中的可行性研究以及分析方法,进行系统分析。其设计主要是要求在基本汇编指令及高级汇编的基础上,利用BIOS中断调用编写程序,能够实现从键盘选择菜单具体实现小写字母转大写字母,大写字母转小写字母,二进制数转换成十进制数,十六进制数转

5、换成二进制数,十进制数转换成十六进制数。2.1 系统流程图本系统是代码转换程序,实现小写字母转大写字母,大写字母转小写字母, 二进制数转换成十进制数, 十六进制数转换成二进制数, 十进制数转换成十六进制数。该程序实现了从键盘输入不同的大写字母来选择调用这些功能,并且可以循环执行下去。具体如图2-1。开始界面选择H,N orQ十进制向十六进制的转换进入选择U,L,D,B 界面退出程序输入H 输入N输入Q小写字母转大写字母大写字母转小写字母二进制向十进制的转换十六进制向二进制的转换输入U 输入L输入D输入B选择U,L,D or B图2-1 系统流程图3.1 系统开发环境本程序通过汇编基础指令,高级

6、汇编语言及BIOS中断来编写程序实现能够从键盘选择菜单具体实现小写字母转大写字母,大写字母转小写字母,二进制数转换成十进制数,十六进制数转换成二进制数,十进制数转换成十六进制数。本实验是在MasmEdit软件中编写编译运行。3.2 程序代码设计1.主模块(1.asm:本程序主要就是显示一下菜单(如图3-1: 图3-1 菜单选择由于本模块要多次用到显示字符串信息,所以为了避免多次调用21h的9号功能,写了宏disp macro m 。之后为了能够选择不同的转换,需要从键盘输入转换提示信息前的大写字母H,N,Q。当输入H时调用模块7,当输入N时调用模块5,当输入Q时,退出程序。具体代码:extrn

7、 main:far,change7:farpublic info4,info6stack segment para public 'stack'db 800 dup (0stack endsdata segment;*主程序中的提示信息*; 0A换行 0D回车str1 DB 0AH,0DH, '*$'str2 DB 0AH,0DH, '* *$'str3 DB 0AH,0DH, '* programme of converting *$'str4 DB 0AH,0DH, '* choose a operation from

8、 the menu below: *$'str5 DB 0AH,0DH, '* H: convert decimal into hexdecimal *$'str6 DB 0AH,0DH, '* N: now you can go to U or L or D or B *$'str7 DB 0AH,0DH, '* U: convert lowercase into upper *$'str8 db 0AH,0DH, '* L: convert uppercase into lower *$'str9 db 0AH,0DH

9、, '* D: convert binary digit into decimal *$'str10 DB 0AH,0DH,'* B: convert hexadecimal into binary *$'str11 DB 0AH,0DH, '* Q: quit the programme *$'str12 DB 0AH,0DH,'* *$'str13 DB 0AH,0DH, '*$'str14 db 0ah,0dh,'Oops! misinput.try again:','$'in

10、put db 0ah,0dh,'Please put your choice:','$'info4 db 0ah,0dh,'input some decimal digits(maximum size is 4:$'info6 db 0ah,0dh,'the converted digits are:$'data endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,ax;定义宏指令disp,形参为m,将形参m的地址送到dx中,int 21h

11、中ah=9显示字符串,且DS:DX 等于显示字符串的首地址disp macro mlea dx,mmov ah,9int 21hendm;调用宏disp显示菜单disp str1disp str3disp str4disp str5disp str6disp str7disp str8disp str9disp str10disp str11disp str12disp str13;lop循环,根据从键盘接收的不同的大写字母进入不同的跳转。当输入N时,调用模块5中的main过程;当输入H时,调用模块7中的change7过程;当输入Q时,退出本系统。lop:disp inputmov ah,1i

12、nt 21hcmp al,'N'jz toMaincmp al,'H'jz to7cmp al,'Q'jz exitdisp str12jmp loptoMain: call mainjmp lopto7: call change7jmp lopexit: mov ah,4chint 21hcode endsend start2.模块5(5.asm:这一模块主要是根据提示信息前的大写字母U,L,D,B从键盘输入你的选择。当输入U时,调用模块2,实现小写字母向大写字母的转换;当输入L时,调用模块3,实现大写字母向小写字母的转换;当输入D时,调用模块

13、4,实现二进制向十进制的转换;当输入B时,调用模块6,实现十六进制向二进制的转换。具体代码:;public 之后的变量和过程为在本模块中定义,其他模块调用的。extrn 之后的过程为本模块调用的其他模块的过程。public info0,info1,info5,bufa,bufb,main,outNumextrn change2:far,change3:far,change4:far,change6:fardata2 segmentinfo0 db 0ah,0dh,'input a string of lowercase:$'info1 db 0ah,0dh,'input

14、 a string of uppercase:$'info5 db 0ah,0dh,'the converted string is:$'info db 0ah,0dh,'please put U or L or D or B:$'bufa db 81db ?db 80 dup (?bufb db 80 dup (?outNum db 200 dup(?data2 endsstack segment stackdb 400 dup (?stack endscode2 segmentmain proc farassume ds:data2,cs:code2

15、,ss:stackstart: mov ax,data2mov ds,ax;标号pp的作用是根据从键盘接收的U,L,D,B,分别调用不同的模块。pp:lea dx,infomov ah,9int 21hmov ah,1int 21h;当从键盘接收的是U时,调用2模块中的change2过程。cmp al,'U'jz to2;当从键盘接收到是L时,调用3模块中的change3过程。cmp al,'L'jz to3;当从键盘接收的是D时,调用4模块中的change4过程。cmp al,'D'jz to4;当从键盘接收的是B时,调用6模块中的change

16、6过程。cmp al,'B'jz to6to2: call change2jmp ppto3:call change3jmp ppto4:call change4jmp ppto6:call change6jmp ppretmain endpcode2 endsend1.模块7(7.asm:本模块实现十进制向十六进制的转换。关键代码:lea dx,info4mov ah,9int 21hxor bx,bxmov cl,4A:mov ah,08h ;输入请求但不显示int 21hcmp al,30hjb Lcmp al,39hja Lmov dl,al ;如果输入的字符是在0-9

17、之间则显示mov ah,02hint 21hsub al,30h ;将ASCII转为数值xor ah,ah ;最高位清零xchg bx,ax ;bx存入输入的数,执行该命令则将ax和bx的数互换mov dh,10mul dh ;之前输入的数乘上10add bx,ax ;再与刚输入的数相加L: cmp al,20h ;输入空格则退出,满足0,1,2,4位数的输入loopnz A2.模块2(2.asm:本模块实现小写字母向大写字母的转换。关键代码:;循环next对字符串中的每个字母进行处理,每次处理都调用过程lowtohigh.next:mov al,sicall lowtohighmov di,

18、alinc siinc diloop nextmov byte ptr di,'$'3.模块3(3.asm:本模块实现大写字母向小写字母的转换。关键代码:;循环next对字符串中的每个字母进行处理,每次处理都调用过程hightolow.next:mov al,sicall hightolowmov di,alinc siinc diloop nextmov byte ptr di,'$'4.模块4(4.asm:本模块实现二进制向十进制的转换。关键代码:;input过程循环调用newchar,newchar先对输入的二进制数的每个数字转换成数字,然后左移乘2再加它

19、之后的数字。input proc nearmov bx,0newchar:mov ah,1int 21hsub al,30hcmp al,1Hja exitmov cl,1shl bx,clmov ah,0add bx,axjmp newcharexit:retinput endp;实现二进制到十进制的转换bindec proc nearmov cx,10000dcall dec_divmov cx,1000dcall dec_divmov cx,100dcall dec_divmov cx,10dcall dec_divmov cx,1dcall dec_divretbindec endpd

20、ec_div proc nearmov ax,bxmov dx,0div cxmov bx,dxmov dl,aladd dl,30hmov ah,2int 21hretdec_div endp5.模块6(6.asm:本模块实现十六进制向二进制的转换。关键代码:mov bx,0mov ch,4 ;ch设置为4,主要是要对十六进制的每个数字分别进行处理lab1: ;lab1主要是对十六进制中的数字分几种情况处理。mov ah,1int 21hcmp al,'0'jb lab1cmp al,'9' ;当是0-9中的数字时跳入lab3jbe lab3cmp al,&#

21、39;A'jb lab1cmp al,'F' ;当是A-F时跳入lab22jbe lab22cmp al,'a'jb lab1cmp al,'f'ja lab1lab2:sub al,20hlab22:sub al,37hjmp lab4lab3:and al,0fhlab4:mov cl,4shl bx,cladd bl,aldec chjnz lab1mov cx,163.3程序运行界面显示1.开始运行时菜单提示界面(图3-2: 图3-2 菜单提示2.当选择H时,主模块调用模块7实现十进制向十六进制的转换。例如输入的最多四位的十进制数

22、字是12,转换后的数字是000CH,运行界面如图3-3: 图3-3 十进制向十六进制的转换3.当选择N时,主模块调用模块5,这时便可以选择U,L,D,B。如果选择U,这时模块5又调用模块2实现小写字母到大写字母的转换。例如输入小写字母am,转换后的大写字母为AM,运行界面如图3-4: 图3-4 小写字母向大写字母转换1.当选择L时,模块5调用模块3实现大写字母到小写字母的转换。例如输入大写字母LL,转换后的小写字母是ll,运行界面如图3-5: 图3-5 大写字母向小写字母的转换2.当输入D时,模块5调用模块4实现二进制到十进制的转换。例如输入一个最多八位的二进制数11时,转换后的十进制数是00

23、003D,运行界面如图3-6: 图3-6 二进制向十进制的转换3.当输入B时,模块5调用模块6实现十六进制到二进制的转换。例如当输入四位十六进 图3-7 十六进制向二进制的转换4.小结4.1 系统的优缺点本课程设计是代码转换程序,实现小写字母转大写字母,大写字母转小写字母,二进制数转换成十进制数,十六进制数转换成二进制数,十进制数转换成十六进制数。该程序实现了从键盘输入不同的大写字母来选择调用这些功能,并且可以循环执行下去。当然缺点还是不少的,例如当想选择U,L,D,B时必须在输入N后才可以,我们可以采用参数传递调用子模块的方式避免这个缺点,还就是一旦输入N进入选择U,L,D,B时就没用办法跳回到选

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论