英文字母大小写转换程序设计_第1页
英文字母大小写转换程序设计_第2页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

11/11英文字母大小写转换程序设计课程设计任务书

学生姓名:刘小燕专业班级:电信0801班

指导教师:陈德军工作单位:信息工程学院

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

初始条件:

具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1、输入英文字母串,在回车后实现大小写转换

2、按命令要求将字符串转换为全部大写或全部小写

3、非英文字母不允许输入并声响报警

4、程序采用汇编语言在PC机上完成

5、完成符合学校要求的设计说明书

时间安排:

一周,其中2天程序设计,2天程序调试,1天完成课程设计报告书及答辩

指导教师签名:年月日系主任(或责任教师)签名:年月日

目录

1DOS功能调用

在进行设计之前,先要弄清楚INT21H软中断的DOS功能调用。

MSDOS操作系统为程序设计者提供了可以直接调用的软中断处理程序,每一个中断处理程序完成一个特定的功能操作。依据编程需要选择适当的处理程序,编程者不需再重新编写程序,而是使用INTn软中断指令。每执行一种不同类型码n的软中断指令,就执行一个中断处理程序,其主要功能如下。

①磁盘的读/写控制。

②内存管理、文件操作和目录管理。

③基本输入/输出(对键盘、打印机和显示器等)控制,另外还有日期、时间管理等。

当类型码n=05H~1FH时,调用BIOS的中断处理程序;类型码n=20H~3FH时,调用DOS的中断处理程序,这次课程设计使用的是DOS中断处理程序。

INT21H软中断是一个具有几十种功能的大型中断服务程序,给这些子功能程序分别予以编号,称为功能号。每个功能程序完成一种特定的操作和处理。对INT21H软中断指令对应的功能子程序的调用称为DOS系统功能调用。调用系统功能子程序时,不必了解所使用设备的物理特性、接口方式及内存分配等,也不必编写繁琐的控制程序,这样给应用者带来了很大的方便。

应用INT21H系统功能调用的方法如下。

①入口参数送指定的寄存器或内存。

②功能号送AH中。

③执行INT21H软中断指令。

有的子功能程序不需要入口参数,但大部分需要把参数送入指定位置。程序员只要给出这三方面的信息,不必关心程序具体如何执行,在内存中的存放地址如何,DOS就会根据所给的参数信息自动转入相应的子程序去执行并产生相应结果。下面介绍常用的功能调用。

(1)键盘输入并显示(1号功能调用)

格式:MOVAH,01H

INT21H

功能:按下任何键,将其对应字符的ASCII码送入AL中,并在屏幕上显示该字符。

如果按下的是Ctrl+Break组合键,则终止程序执行。1号功能调用无须入口参数,出口参数在AL中。

(2)键盘输入但不显示输入字符(8号功能调用)

格式:MOVAH,08H

INT21H

功能:同1号功能调用,但字符不在屏幕上显示。

(3)屏幕显示一个字符(2号功能调用)

格式:MOVDL,'字符'

MOVAH,02H

INT21H

功能:将置入DL寄存器中的字符在屏幕上显示输出。

(4)打印输出(5号功能调用)

格式:MOVDL,'字符'

MOVAH,05H

INT21H

功能:将置入DL寄存器中的字符送打印机接口,打印输出。

(5)屏幕显示字符串(9号功能调用)

格式:MOVDX,字符串的偏移地址

MOVAH,09H

INT21H

功能:在屏幕上显示字符串。

在使用9号功能调用时,应当注意以下问题。

①待显示的字符串必须先放在内存一数据区(DS段)中,且以…$?符号作为结束标志。

②应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。

(6)字符串输入功能调用(0AH号功能调用)

格式:MOVDX,已定义缓冲区的偏移地址

MOVAH,0AH

INT21H

功能:从键盘接收字符,并存放到内存缓冲区。

在使用0AH号功能调用时,应当注意以下问题。

①执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第二个字节保留,在执行程序完毕后存入输入的实际字符个数。从第三个字节开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义的最大字符个数,则缓冲区其他单元自动清0。若实际输入的字符个数大于定义的字符个数,其后输入的字符丢弃不用,且响铃示警,一直到输入回车键为止。整个缓冲区的长度等于最大字符个数再加2。

②应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。

(7)返回DOS操作系统(4CH号功能调用)

格式:MOVAH,4CH

INT21H

功能:终止当前程序的运行,并把控制权交给调用的程序,即返回DOS系统,屏幕出现DOS提示符,如“C:\>”,等待DOS命令。

除了这几种功能调用,还有其他的,这里就不再一一介绍了。

2总体方案论证

该课程设计的任务是做一个英文字母大小写转换程序,完成对输入数据的大写或者小写转换。

输入部分:在输入之前,先利用INT21H的9号功能调用输出显示输入字符串提示符'pleaseinputthestring:'再利用INT21H的8号功能调用输入字符串(在屏幕上并不显示)。由于键盘输入的并不一定是英文字母,所以要对输入的每一个字符进行判别,如果输入的字符串都是英文字符则进行大小写转换,并将字符串存储到缓冲区,且将字符输出显示到屏幕上;如果输入的字符串中有非英文字符,则产生报警声并返回重新输入数据,直至输入的字符符合要求为止。

转换部分:由于要求要有两种转换方式,即大写字母转换为小写字母或者由小写字母转换为大写字母,所以要求用户在进行转换前输入提示要转换的方法。为解决这个问题,先利用INT21H的9号功能调用输出显示转换方法选择提示符…pleasechoosethetypeto

output(1or2):?,1为Uppercase,2为Lowercas。再利用INT21H的8号功能调用输入1或者2(在屏幕上并不显示)。如果此时输入为1,则进行字符串小写转大写的转换,如果此时输入为2,则进行字符串大写转小写的转换。

输出部分:先利用INT21H的9号功能调用输出显示输出提示符'theresultis:',再利用INT21H的9号功能调用输出显示转换后的字符串。

3程序流程图及程序设计分析

3.1主程序设计

3.1.1流程图及其分析

主程序的流程图如图3-1所示.

图3-1主程序流程图

首先在屏幕上输出显示字符串输入提示符,再进行字符串的输入,然后对输入的第一个字符进行判别。如果该字符不等于0DH,则继续判断该字符是否为英文字符。如果结果为否则产生报警声并返回重新输入数据,直至输入的字符符合要求为止;如果结果为是则将字符存储到缓冲区,并将字符输出显示到屏幕上。然后进行下一个字符的判别,直至出现一个字符等于0DH,此时字符串验证完毕,调用子程序chos进行字符串的大小写转换,转换完后结果输出显示到屏幕上,并结束程序。

3.1.2程序设计

程序如下:

start:

movax,data

movds,ax

movah,9;输出显示输入提示符:…pleaseinputthestring:?

leadx,ms1

int21h

movsi,0;源串偏移地址SI置0

again:

movah,8;输入字符串

int21h

cmpal,13;将AL与0DH进行比较,若相等,则转移到CHANGE

jechange

cmpal,41h;将AL与?A?进行比较,若AL小于?A?,则转移到SING

jbsing

cmpal,5bh;将AL与?Z?进行比较,若AL小于等于?Z?,则转移到CHG

jbchg

cmpal,61h;将AL与?a?进行比较,若AL小于?a?,则转移到SING

jbsing

cmpal,7bh;将AL与?z?进行比较,若AL小于等于?z?,则转移到CHG

jbchg

sing:;输入为非英文字母,发出警报,并重新输入

movah,2

movdl,07h

int21h

jmpagain

chg:;将英文字母存入缓冲区,并在屏幕中显示mov[buffer+si],al

movdl,al

movah,2

int21h

incsi

jmpagain

change:;转换过程

mov[buffer+si],'$'

callchos;调用chos子程序

movah,2

movdl,10;回车

int21h

movdl,13;换行

int21h

movah,9;输出显示输出提示符

leadx,ms2

int21h

movah,9

leadx,buffer;屏幕显示转换结果

int21h

movah,1

int21h

movah,4ch;结束程序

int21h

3.2chos字符串转换子程序设计

3.2.1流程图及其分析

chos字符串转换子程序的流程图如图3-2所示

图3-2chos子程序流程图

首先,应该把断点地址及一些寄存器的值压入堆栈,保护现场。在屏幕上输出转换方法选择提示符,用户根据需要输入数据1或者2。若输入的数据为1则调用子程序aa,完成字符串由小写转换为大写;若输入的数据是2则调用子程序ba,完成字符串由大写转换为小写。转换完了以后,把断点地址及一些寄存器的值弹出堆栈,最后返回主程序。

3.2.2程序设计

程序如下:

chosproc;chos子程序

pushax;AX,DX入栈

pushdx

movah,2

movdl,10;回车

int21h

movdl,13;换行

int21h

movah,9;屏幕显示转换方法选择提示符

leadx,ms3

int21h

re:

movah,8;输入数据1或者2,但不显示

int21h

cmpal,31H;输入为1,程序转移至UP

jeup

cmpal,32H;输入为2,程序转移至LO

jelo

movah,2;输入不为1也不为2时,发出警报,并重新输入数据

movdl,7

int21h

jmpre

up:

callaa;调用子程序aa

jmpout1

lo:

callba;调用子程序baout1:

popdx;DX,AX出栈

popax

ret;返回主程序chosendp

3.3小写转大写子程序设计

3.3.1流程图及其分析

小写转大写子程序的流程图如图3-3所示

图3-3小写转大写子程序aa的流程图

首先,应该把断点地址及AX,CX,DI寄存器压入堆栈,保护现场。再将SI的值赋给CX,将0赋给DI。取出BUFFER单元中的字符,并判断该字符是否为大写的英文字母,如果是,则不必进行转换;如果不是,则将小写字母转化为大写字母并替代原来的小写字母。循环判断其他的字符,直至CX的值为0,结束循环,返回主程序。

3.3.2程序设计

程序如下:

aaproc;子程序aa

pushax;AX,CX,DI入栈

pushcx

pushdi

movcx,si;CX=SI

movdi,0;DI=0

top1:

moval,[buffer+di]

cmpal,61h;将AL与?a?进行比较,若AL小于?a?,则程序转移到NE1

jbne1

subal,20h;小写字母转换为大写字母

mov[buffer+di],al;保存转换后的大写字母

ne1:

incdi;DI增1

looptop1;循环返回TOP1

popdi;AX,CX,DI出栈

popcx

popax

ret;返回

aaendp

3.4大写转小写子程序设计

3.4.1流程图及其分析

大写转小写子程序的流程图如图3-4所示

图3-4大写转小写子程序ba的流程图

首先,应该把断点地址及AX,CX,DI寄存器压入堆栈,保护现场。再将SI的值赋给CX,将0赋给DI。取出BUFFER单元中的字符,并判断该字符是否为小写的英文字母,如果是,则不必进行转换;如果不是,则将大写字母转化为小写字母并替代原来的大写字母。循环判断其他的字符,直至CX的值为0,结束循环,返回主程序。

3.4.2程序设计

程序如下:

baproc;子程序ba

pushax;AX,CX,DI入栈

pushcx

pushdi

movcx,si;CX=SI

movdi,0;DI=0

top:

moval,[buffer+di]

cmpal,5Ah;将AL与?Z?进行比较,若AL大于?Z?,则程序转移到NE

jane

addal,20h;大写字母转换为小写字母

mov[buffer+di],al;保存转换后的小写字母

ne:

incdi;DI增1

looptop;循环返回TOP

popdi;AX,CX,DI出栈

popcx

popax

ret;返回

baendp

4总程序

总程序如下:

datasegment

ms1db'pleaseinputthestring:',10,13,'$'

ms2db'theresultis:',10,13,'$'

ms3db'pleasechoosethetypetooutput(1or2):',10,13db'1.Uppercase',9,'2.Lowercase$'

bufferdb200dup(0)

dataends

stacksegment

db200dup(?)

stackends

codesegment

assumecs:code,ds:data,ss:stack

start:

movax,data

movds,ax

movah,9

leadx,ms1

int21h

movsi,0

again:

movah,8

int21h

cmpal,13

jechange

cmpal,41h

jbsing

cmpal,5bh

jbchg

cmpal,61h

jbsing

cmpal,7bh

jbchg

sing:

movah,2

movdl,07h

int21h

jmpagain

chg:

mov[buffer+si],al

movdl,al

movah,2

int21h

incsi

jmpagainchange:

mov[buffer+si],'$'

callchos

movah,2

movdl,10

int21h

movdl,13

int21h

movah,9

leadx,ms2

int21h

movah,9

leadx,buffer

int21h

movah,1

int21h

movah,4ch

int21h

;============================chosproc

pushax

pushdx

movah,2

movdl,10

int21h

movdl,13

int21h

movah,9

leadx,ms3

int21h

re:

movah,8

int21h

cmpal,31H

jeup

cmpal,32H

jelo

movah,2

movdl,7

int21h

jmpre

up:

callaa

jmpout1

lo:

callba

out1:

popdx

popax

ret

chosendp

;===========================baproc

pushax

pushcx

pushdi

movcx,si

movdi,0

top:

moval,[buffer+di]

cmpal,5Ah

jane

addal,20h

mov[buffer+di],al

ne:

incdi

looptop

popdi

popcx

popax

ret

baendp

;==================================aaproc

pusha

温馨提示

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

评论

0/150

提交评论