为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

英文字母大小写转换程序设计

2014-01-14 24页 doc 168KB 134阅读

用户头像

is_254962

暂无简介

举报
英文字母大小写转换程序设计课程设计任务书 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 题 目:英文字母大小写转换程序设计 初始条件: 具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1、输入英文字母串,在回车后实现大小写转换 2、按命令要求将字符串转换为全部大写或全部小写 3、非英文字母不允许输入并声响报警 4、程序采用汇编语言在PC机上完成 5...
英文字母大小写转换程序设计
课程任务 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 题 目:英文字母大小写转换程序设计 初始条件: 具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 1、输入英文字母串,在回车后实现大小写转换 2、按命令要求将字符串转换为全部大写或全部小写 3、非英文字母不允许输入并声响报警 4、程序采用汇编语言在PC机上完成 5、完成符合学校要求的设计说明书 时间安排: 一周,其中2天程序设计,2天程序调试,1天完成课程设计报告书及答辩 指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日 目 录 1 DOS功能调用 2总体方案论证 3程序图及程序设计 3.1主程序设计 3.1.1流程图及其分析 3.1.2程序设计 3.2 chos字符串转换子程序设计 3.2.1流程图及其分析 3.2.2程序设计 3.3小写转大写子程序设计 3.3.1流程图及其分析 3.3.2程序设计 3.4大写转小写子程序设计 3.4.1流程图及其分析 3.4.2程序设计 4 总程序 5 课程设计心得体会 21 摘 要 汇编语言是用指令的助记符、符号地址、标号等书写程序的语言,实际上是机器语言的一种符号表示,主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。汇编语言是能够利用计算机所有硬件特性进而直接控制硬件的唯一语言。本次课程设计的任务是用汇编语言做一个英文字母大小写转换程序,按照用户的要求完成对输入数据的大写或者小写转换。先输入要转换的数据,再对数据进行检验判断其合法性,对不合法的数据进行警报并重新输入数据,对合法的数据按照要求进行大写或者小写转换,最后显示转换后的字符串。 关键词:DOS功能调用 大写英文 小写英文 转换 1 DOS功能调用 在进行设计之前,先要弄清楚INT 21H软中断的DOS功能调用。 MS DOS操作系统为程序设计者提供了可以直接调用的软中断处理程序,每一个中断处理程序完成一个特定的功能操作。依据编程需要选择适当的处理程序,编程者不需再重新编写程序,而是使用INT n软中断指令。每执行一种不同类型码n的软中断指令,就执行一个中断处理程序,其主要功能如下。     ① 磁盘的读/写控制。   ② 内存管理、文件操作和目录管理。     ③ 基本输入/输出(对键盘、打印机和显示器等)控制,另外还有日期、时间管理等。     当类型码n=05H~1FH时,调用BIOS的中断处理程序;类型码n=20H~3FH时,调用DOS的中断处理程序,这次课程设计使用的是DOS中断处理程序。 INT 21H软中断是一个具有几十种功能的大型中断服务程序,给这些子功能程序分别予以编号,称为功能号。每个功能程序完成一种特定的操作和处理。对INT 21H软中断指令对应的功能子程序的调用称为DOS系统功能调用。调用系统功能子程序时,不必了解所使用设备的物理特性、接口方式及内存分配等,也不必编写繁琐的控制程序,这样给应用者带来了很大的方便。     应用INT 21H系统功能调用的方法如下。     ① 入口参数送指定的寄存器或内存。     ② 功能号送AH中。     ③ 执行INT 21H软中断指令。     有的子功能程序不需要入口参数,但大部分需要把参数送入指定位置。程序员只要给出这三方面的信息,不必关心程序具体如何执行,在内存中的存放地址如何,DOS就会根据所给的参数信息自动转入相应的子程序去执行并产生相应结果。下面介绍常用的功能调用。 (1) 键盘输入并显示(1号功能调用) 格式: MOV AH, 01H        INT 21H     功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。如果按下的是Ctrl+Break组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中。 (2) 键盘输入但不显示输入字符(8号功能调用) 格式: MOV AH, 08H        INT 21H 功能:同1号功能调用,但字符不在屏幕上显示。   (3) 屏幕显示一个字符(2号功能调用) 格式: MOV DL, '字符'        MOV AH, 02H        INT 21H 功能:将置入DL寄存器中的字符在屏幕上显示输出。 (4) 打印输出(5号功能调用) 格式: MOV DL, '字符'        MOV AH, 05H        INT 21H 功能:将置入DL寄存器中的字符送打印机接口,打印输出。 (5) 屏幕显示字符串(9号功能调用) 格式: MOV DX, 字符串的偏移地址        MOV AH, 09H        INT 21H 功能:在屏幕上显示字符串。 在使用9号功能调用时,应当注意以下问题。 ① 待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号作为结束标志。② 应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。 (6) 字符串输入功能调用(0AH号功能调用) 格式: MOV DX, 已定义缓冲区的偏移地址            MOV AH, 0AH            INT 21H 功能:从键盘接收字符,并存放到内存缓冲区。 在使用0AH号功能调用时,应当注意以下问题。     ① 执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第二个字节保留,在执行程序完毕后存入输入的实际字符个数。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,且响铃示警,一直到输入回车键为止。整个缓冲区的长度等于最大字符个数再加2。     ② 应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。 (7) 返回DOS操作系统(4CH号功能调用) 格式: MOV AH, 4CH        INT 21H 功能:终止当前程序的运行,并把控制权交给调用的程序,即返回DOS系统,屏幕出现DOS提示符,如“C: \ >”,等待DOS命令。 除了这几种功能调用,还有其他的,这里就不再一一介绍了。 2总体方案论证 该课程设计的任务是做一个英文字母大小写转换程序,完成对输入数据的大写或者小写转换。 输入部分:在输入之前,先利用INT 21H的9号功能调用输出显示输入字符串提示符'please input the string:'再利用INT 21H的8号功能调用输入字符串(在屏幕上并不显示)。由于键盘输入的并不一定是英文字母,所以要对输入的每一个字符进行判别,如果输入的字符串都是英文字符则进行大小写转换,并将字符串存储到缓冲区,且将字符输出显示到屏幕上;如果输入的字符串中有非英文字符,则产生报警声并返回重新输入数据,直至输入的字符符合要求为止。 转换部分:由于要求要有两种转换方式,即大写字母转换为小写字母或者由小写字母转换为大写字母,所以要求用户在进行转换前输入提示要转换的方法。为解决这个问题,先利用INT 21H的9号功能调用输出显示转换方法选择提示符‘please choose the type to output(1or2):’ ,1为Uppercase,2为Lowercas。再利用INT 21H的8号功能调用输入1或者2(在屏幕上并不显示)。如果此时输入为1,则进行字符串小写转大写的转换,如果此时输入为2,则进行字符串大写转小写的转换。 输出部分:先利用INT 21H的9号功能调用输出显示输出提示符'the result is:',再利用INT 21H的9号功能调用输出显示转换后的字符串。 3程序流程图及程序设计分析 3.1主程序设计 3.1.1流程图及其分析 主程序的流程图如图3-1所示. 图3-1 主程序流程图 首先在屏幕上输出显示字符串输入提示符,再进行字符串的输入,然后对输入的第一个字符进行判别。如果该字符不等于0DH,则继续判断该字符是否为英文字符。如果结果为否则产生报警声并返回重新输入数据,直至输入的字符符合要求为止;如果结果为是则将字符存储到缓冲区,并将字符输出显示到屏幕上。然后进行下一个字符的判别,直至出现一个字符等于0DH,此时字符串验证完毕,调用子程序chos进行字符串的大小写转换,转换完后结果输出显示到屏幕上,并结束程序。 3.1.2程序设计 程序如下: start: mov ax,data mov ds,ax mov ah,9 ;输出显示输入提示符:‘please input the string:’ lea dx,ms1 int 21h mov si,0 ;源串偏移地址SI置0 again: mov ah,8 ;输入字符串 int 21h cmp al,13 ;将AL与0DH进行比较,若相等,则转移到CHANGE je change cmp al,41h ;将AL与’A’进行比较,若AL小于’A’,则转移到SING jb sing cmp al,5bh ;将AL与’Z’进行比较,若AL小于等于’Z’,则转移到CHG jb chg cmp al,61h ;将AL与’a’进行比较,若AL小于’a’,则转移到SING jb sing cmp al,7bh ;将AL与’z’进行比较,若AL小于等于’z’,则转移到CHG jb chg sing: ;输入为非英文字母,发出警报,并重新输入 mov ah,2 mov dl,07h int 21h jmp again chg: ;将英文字母存入缓冲区,并在屏幕中显示 mov [buffer+si],al mov dl,al mov ah,2 int 21h inc si jmp again change: ;转换过程 mov [buffer+si],'$' call chos ;调用chos子程序 mov ah,2 mov dl,10 ;回车 int 21h mov dl,13 ;换行 int 21h mov ah,9 ;输出显示输出提示符 lea dx,ms2 int 21h mov ah,9 lea dx,buffer ;屏幕显示转换结果 int 21h mov ah,1 int 21h mov ah,4ch ;结束程序 int 21h 3.2 chos字符串转换子程序设计 3.2.1流程图及其分析 chos字符串转换子程序的流程图如图3-2所示 图3-2 chos子程序流程图 首先,应该把断点地址及一些寄存器的值压入堆栈,保护现场。在屏幕上输出转换方法选择提示符,用户根据需要输入数据1或者2。若输入的数据为1则调用子程序aa,完成字符串由小写转换为大写;若输入的数据是2则调用子程序ba,完成字符串由大写转换为小写。转换完了以后,把断点地址及一些寄存器的值弹出堆栈,最后返回主程序。 3.2.2程序设计 程序如下: chos proc ;chos子程序 push ax ;AX,DX入栈 push dx mov ah,2 mov dl,10 ;回车 int 21h mov dl,13 ;换行 int 21h mov ah,9 ;屏幕显示转换方法选择提示符 lea dx,ms3 int 21h re: mov ah,8 ;输入数据1或者2,但不显示 int 21h cmp al,31H ;输入为1,程序转移至UP je up cmp al,32H ;输入为2,程序转移至LO je lo mov ah,2 ;输入不为1也不为2时,发出警报,并重新输入数据 mov dl,7 int 21h jmp re up: call aa ;调用子程序aa jmp out1 lo: call ba ;调用子程序ba out1: pop dx ;DX,AX出栈 pop ax ret ;返回主程序 chos endp 3.3小写转大写子程序设计 3.3.1流程图及其分析 小写转大写子程序的流程图如图3-3所示 图3-3 小写转大写子程序aa的流程图 首先,应该把断点地址及AX,CX,DI寄存器压入堆栈,保护现场。再将SI的值赋给CX,将0赋给DI。取出BUFFER单元中的字符,并判断该字符是否为大写的英文字母,如果是,则不必进行转换;如果不是,则将小写字母转化为大写字母并替代原来的小写字母。循环判断其他的字符,直至CX的值为0,结束循环,返回主程序。 3.3.2程序设计 程序如下: aa proc ;子程序aa push ax ;AX,CX,DI入栈 push cx push di mov cx,si ;CX=SI mov di,0 ;DI=0 top1: mov al,[buffer+di] cmp al,61h ;将AL与’a’进行比较,若AL小于’a’,则程序转移到NE1 jb ne1 sub al,20h ;小写字母转换为大写字母 mov [buffer+di],al ;保存转换后的大写字母 ne1: inc di ;DI增1 loop top1 ;循环返回TOP1 pop di ;AX,CX,DI出栈 pop cx pop ax ret ;返回 aa endp 3.4大写转小写子程序设计 3.4.1流程图及其分析 大写转小写子程序的流程图如图3-4所示 图3-4 大写转小写子程序ba的流程图 首先,应该把断点地址及AX,CX,DI寄存器压入堆栈,保护现场。再将SI的值赋给CX,将0赋给DI。取出BUFFER单元中的字符,并判断该字符是否为小写的英文字母,如果是,则不必进行转换;如果不是,则将大写字母转化为小写字母并替代原来的大写字母。循环判断其他的字符,直至CX的值为0,结束循环,返回主程序。 3.4.2程序设计 程序如下: ba proc ;子程序ba push ax ;AX,CX,DI入栈 push cx push di mov cx,si ;CX=SI mov di,0 ;DI=0 top: mov al,[buffer+di] cmp al,5Ah ;将AL与’Z’进行比较,若AL大于’Z’,则程序转移到NE ja ne add al,20h ;大写字母转换为小写字母 mov [buffer+di],al ;保存转换后的小写字母 ne: inc di ;DI增1 loop top ;循环返回TOP pop di ;AX,CX,DI出栈 pop cx pop ax ret ;返回 ba endp 4总程序 总程序如下: data segment ms1 db 'please input the string:',10,13,'$' ms2 db 'the result is:',10,13,'$' ms3 db 'please choose the type to output(1or2):',10,13 db '1.Uppercase',9,'2.Lowercase$' buffer db 200 dup (0) data ends stack segment db 200 dup (?) stack ends code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax mov ah,9 lea dx,ms1 int 21h mov si,0 again: mov ah,8 int 21h cmp al,13 je change cmp al,41h jb sing cmp al,5bh jb chg cmp al,61h jb sing cmp al,7bh jb chg sing: mov ah,2 mov dl,07h int 21h jmp again chg: mov [buffer+si],al mov dl,al mov ah,2 int 21h inc si jmp again change: mov [buffer+si],'$' call chos mov ah,2 mov dl,10 int 21h mov dl,13 int 21h mov ah,9 lea dx,ms2 int 21h mov ah,9 lea dx,buffer int 21h mov ah,1 int 21h mov ah,4ch int 21h ;============================ chos proc push ax push dx mov ah,2 mov dl,10 int 21h mov dl,13 int 21h mov ah,9 lea dx,ms3 int 21h re: mov ah,8 int 21h cmp al,31H je up cmp al,32H je lo mov ah,2 mov dl,7 int 21h jmp re up: call aa jmp out1 lo: call ba out1: pop dx pop ax ret chos endp ;=========================== ba proc push ax push cx push di mov cx,si mov di,0 top: mov al,[buffer+di] cmp al,5Ah ja ne add al,20h mov [buffer+di],al ne: inc di loop top pop di pop cx pop ax ret ba endp ;================================== aa proc push ax push cx push di mov cx,si mov di,0 top1: mov al,[buffer+di] cmp al,61h jb ne1 sub al,20h mov [buffer+di],al ne1: inc di loop top1 pop di pop cx pop ax ret aa endp code ends end start 5 课程设计心得体会 经过这几天的微机原理课程设计,我觉得学习像微机原理与接口技术这样实用的知识,不仅要掌握书本上的基本,还要灵活思考,善于变换,这样才能找到最优设计,达到事半功倍的效果。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。回顾起此次微机原理课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一个星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 其次,以前对于编程工具的使用还处于一知半解的状态上,但是经过一段上机的实践,对于怎么去排错、查错,怎么去看每一步的运行结果,怎么去了解每个寄存器的内容以确保程序的正确性上都有了很大程度的提高。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 在设计中遇到了很多编程问题,但最后经过自己的努力完成了这次课设。这让我明白了只要有恒心,有耐心,就可以达到自己的目标,完成任务! 参考文献 [1] 王萍主编. 微机原理应用实践. 机械工业出版社,2001.5 [2] 钱晓捷主编. 新版汇编语言程序设计. 电子工业出版社,2007.1 [3] 朱定华主编. 微机原理与接口技术学习指导. 清华大学出版社,2004.7 [4] 姚燕南、薛钧义主编. 微型计算机原理与接口技术. 高等教育出版社,2004.11 [5] 何小海、严华主编. 微机原理与接口技术. 科学出版社,2006.9 [6] 徐建民、王东主编. 汇编语言程序设计. 电子工业出版社,2005.9 [7] 周佩玲、彭虎等主编. 微机原理与接口技术(基于16位机). 电子工业出版社,2007.6
/
本文档为【英文字母大小写转换程序设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索