英文字母大小寫轉(zhuǎn)換程序設(shè)計_第1頁
英文字母大小寫轉(zhuǎn)換程序設(shè)計_第2頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

11/11英文字母大小寫轉(zhuǎn)換程序設(shè)計課程設(shè)計任務(wù)書

學(xué)生姓名:劉小燕專業(yè)班級:電信0801班

指導(dǎo)教師:陳德軍工作單位:信息工程學(xué)院

題目:英文字母大小寫轉(zhuǎn)換程序設(shè)計

初始條件:

具備數(shù)字電路的理論知識;具備微機原理的理論知識和實踐能力;熟悉匯編語言編程技術(shù);熟悉80X86的CPU結(jié)構(gòu)和指令系統(tǒng);熟悉相關(guān)常用接口電路的設(shè)計使用方法。

要求完成的主要任務(wù):(包括課程設(shè)計工作量及其技術(shù)要求,以及說明書撰寫等具體要求)

1、輸入英文字母串,在回車后實現(xiàn)大小寫轉(zhuǎn)換

2、按命令要求將字符串轉(zhuǎn)換為全部大寫或全部小寫

3、非英文字母不允許輸入并聲響報警

4、程序采用匯編語言在PC機上完成

5、完成符合學(xué)校要求的設(shè)計說明書

時間安排:

一周,其中2天程序設(shè)計,2天程序調(diào)試,1天完成課程設(shè)計報告書及答辯

指導(dǎo)教師簽名:年月日系主任(或責任教師)簽名:年月日

目錄

1DOS功能調(diào)用

在進行設(shè)計之前,先要弄清楚INT21H軟中斷的DOS功能調(diào)用。

MSDOS操作系統(tǒng)為程序設(shè)計者提供了可以直接調(diào)用的軟中斷處理程序,每一個中斷處理程序完成一個特定的功能操作。依據(jù)編程需要選擇適當?shù)奶幚沓绦?,編程者不需再重新編寫程序,而是使用INTn軟中斷指令。每執(zhí)行一種不同類型碼n的軟中斷指令,就執(zhí)行一個中斷處理程序,其主要功能如下。

①磁盤的讀/寫控制。

②內(nèi)存管理、文件操作和目錄管理。

③基本輸入/輸出(對鍵盤、打印機和顯示器等)控制,另外還有日期、時間管理等。

當類型碼n=05H~1FH時,調(diào)用BIOS的中斷處理程序;類型碼n=20H~3FH時,調(diào)用DOS的中斷處理程序,這次課程設(shè)計使用的是DOS中斷處理程序。

INT21H軟中斷是一個具有幾十種功能的大型中斷服務(wù)程序,給這些子功能程序分別予以編號,稱為功能號。每個功能程序完成一種特定的操作和處理。對INT21H軟中斷指令對應(yīng)的功能子程序的調(diào)用稱為DOS系統(tǒng)功能調(diào)用。調(diào)用系統(tǒng)功能子程序時,不必了解所使用設(shè)備的物理特性、接口方式及內(nèi)存分配等,也不必編寫繁瑣的控制程序,這樣給應(yīng)用者帶來了很大的方便。

應(yīng)用INT21H系統(tǒng)功能調(diào)用的方法如下。

①入口參數(shù)送指定的寄存器或內(nèi)存。

②功能號送AH中。

③執(zhí)行INT21H軟中斷指令。

有的子功能程序不需要入口參數(shù),但大部分需要把參數(shù)送入指定位置。程序員只要給出這三方面的信息,不必關(guān)心程序具體如何執(zhí)行,在內(nèi)存中的存放地址如何,DOS就會根據(jù)所給的參數(shù)信息自動轉(zhuǎn)入相應(yīng)的子程序去執(zhí)行并產(chǎn)生相應(yīng)結(jié)果。下面介紹常用的功能調(diào)用。

(1)鍵盤輸入并顯示(1號功能調(diào)用)

格式:MOVAH,01H

INT21H

功能:按下任何鍵,將其對應(yīng)字符的ASCII碼送入AL中,并在屏幕上顯示該字符。

如果按下的是Ctrl+Break組合鍵,則終止程序執(zhí)行。1號功能調(diào)用無須入口參數(shù),出口參數(shù)在AL中。

(2)鍵盤輸入但不顯示輸入字符(8號功能調(diào)用)

格式:MOVAH,08H

INT21H

功能:同1號功能調(diào)用,但字符不在屏幕上顯示。

(3)屏幕顯示一個字符(2號功能調(diào)用)

格式:MOVDL,'字符'

MOVAH,02H

INT21H

功能:將置入DL寄存器中的字符在屏幕上顯示輸出。

(4)打印輸出(5號功能調(diào)用)

格式:MOVDL,'字符'

MOVAH,05H

INT21H

功能:將置入DL寄存器中的字符送打印機接口,打印輸出。

(5)屏幕顯示字符串(9號功能調(diào)用)

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

MOVAH,09H

INT21H

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

在使用9號功能調(diào)用時,應(yīng)當注意以下問題。

①待顯示的字符串必須先放在內(nèi)存一數(shù)據(jù)區(qū)(DS段)中,且以…$?符號作為結(jié)束標志。

②應(yīng)當將字符串首地址的段基址和偏移地址分別存入DS和DX寄存器中。

(6)字符串輸入功能調(diào)用(0AH號功能調(diào)用)

格式:MOVDX,已定義緩沖區(qū)的偏移地址

MOVAH,0AH

INT21H

功能:從鍵盤接收字符,并存放到內(nèi)存緩沖區(qū)。

在使用0AH號功能調(diào)用時,應(yīng)當注意以下問題。

①執(zhí)行前先定義一個輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個字節(jié)定義為允許最多輸入的字符個數(shù),字符個數(shù)應(yīng)包括回車符0DH在內(nèi),不能為“0”值。第二個字節(jié)保留,在執(zhí)行程序完畢后存入輸入的實際字符個數(shù)。從第三個字節(jié)開始存入從鍵盤上接收字符的ASCII碼。若實際輸入的字符個數(shù)少于定義的最大字符個數(shù),則緩沖區(qū)其他單元自動清0。若實際輸入的字符個數(shù)大于定義的字符個數(shù),其后輸入的字符丟棄不用,且響鈴示警,一直到輸入回車鍵為止。整個緩沖區(qū)的長度等于最大字符個數(shù)再加2。

②應(yīng)當將緩沖區(qū)首地址的段基址和偏移地址分別存入DS和DX寄存器中。

(7)返回DOS操作系統(tǒng)(4CH號功能調(diào)用)

格式:MOVAH,4CH

INT21H

功能:終止當前程序的運行,并把控制權(quán)交給調(diào)用的程序,即返回DOS系統(tǒng),屏幕出現(xiàn)DOS提示符,如“C:\>”,等待DOS命令。

除了這幾種功能調(diào)用,還有其他的,這里就不再一一介紹了。

2總體方案論證

該課程設(shè)計的任務(wù)是做一個英文字母大小寫轉(zhuǎn)換程序,完成對輸入數(shù)據(jù)的大寫或者小寫轉(zhuǎn)換。

輸入部分:在輸入之前,先利用INT21H的9號功能調(diào)用輸出顯示輸入字符串提示符'pleaseinputthestring:'再利用INT21H的8號功能調(diào)用輸入字符串(在屏幕上并不顯示)。由于鍵盤輸入的并不一定是英文字母,所以要對輸入的每一個字符進行判別,如果輸入的字符串都是英文字符則進行大小寫轉(zhuǎn)換,并將字符串存儲到緩沖區(qū),且將字符輸出顯示到屏幕上;如果輸入的字符串中有非英文字符,則產(chǎn)生報警聲并返回重新輸入數(shù)據(jù),直至輸入的字符符合要求為止。

轉(zhuǎn)換部分:由于要求要有兩種轉(zhuǎn)換方式,即大寫字母轉(zhuǎn)換為小寫字母或者由小寫字母轉(zhuǎn)換為大寫字母,所以要求用戶在進行轉(zhuǎn)換前輸入提示要轉(zhuǎn)換的方法。為解決這個問題,先利用INT21H的9號功能調(diào)用輸出顯示轉(zhuǎn)換方法選擇提示符…pleasechoosethetypeto

output(1or2):?,1為Uppercase,2為Lowercas。再利用INT21H的8號功能調(diào)用輸入1或者2(在屏幕上并不顯示)。如果此時輸入為1,則進行字符串小寫轉(zhuǎn)大寫的轉(zhuǎn)換,如果此時輸入為2,則進行字符串大寫轉(zhuǎn)小寫的轉(zhuǎn)換。

輸出部分:先利用INT21H的9號功能調(diào)用輸出顯示輸出提示符'theresultis:',再利用INT21H的9號功能調(diào)用輸出顯示轉(zhuǎn)換后的字符串。

3程序流程圖及程序設(shè)計分析

3.1主程序設(shè)計

3.1.1流程圖及其分析

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

圖3-1主程序流程圖

首先在屏幕上輸出顯示字符串輸入提示符,再進行字符串的輸入,然后對輸入的第一個字符進行判別。如果該字符不等于0DH,則繼續(xù)判斷該字符是否為英文字符。如果結(jié)果為否則產(chǎn)生報警聲并返回重新輸入數(shù)據(jù),直至輸入的字符符合要求為止;如果結(jié)果為是則將字符存儲到緩沖區(qū),并將字符輸出顯示到屏幕上。然后進行下一個字符的判別,直至出現(xiàn)一個字符等于0DH,此時字符串驗證完畢,調(diào)用子程序chos進行字符串的大小寫轉(zhuǎn)換,轉(zhuǎn)換完后結(jié)果輸出顯示到屏幕上,并結(jié)束程序。

3.1.2程序設(shè)計

程序如下:

start:

movax,data

movds,ax

movah,9;輸出顯示輸入提示符:…pleaseinputthestring:?

leadx,ms1

int21h

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

again:

movah,8;輸入字符串

int21h

cmpal,13;將AL與0DH進行比較,若相等,則轉(zhuǎn)移到CHANGE

jechange

cmpal,41h;將AL與?A?進行比較,若AL小于?A?,則轉(zhuǎn)移到SING

jbsing

cmpal,5bh;將AL與?Z?進行比較,若AL小于等于?Z?,則轉(zhuǎn)移到CHG

jbchg

cmpal,61h;將AL與?a?進行比較,若AL小于?a?,則轉(zhuǎn)移到SING

jbsing

cmpal,7bh;將AL與?z?進行比較,若AL小于等于?z?,則轉(zhuǎn)移到CHG

jbchg

sing:;輸入為非英文字母,發(fā)出警報,并重新輸入

movah,2

movdl,07h

int21h

jmpagain

chg:;將英文字母存入緩沖區(qū),并在屏幕中顯示mov[buffer+si],al

movdl,al

movah,2

int21h

incsi

jmpagain

change:;轉(zhuǎn)換過程

mov[buffer+si],'$'

callchos;調(diào)用chos子程序

movah,2

movdl,10;回車

int21h

movdl,13;換行

int21h

movah,9;輸出顯示輸出提示符

leadx,ms2

int21h

movah,9

leadx,buffer;屏幕顯示轉(zhuǎn)換結(jié)果

int21h

movah,1

int21h

movah,4ch;結(jié)束程序

int21h

3.2chos字符串轉(zhuǎn)換子程序設(shè)計

3.2.1流程圖及其分析

chos字符串轉(zhuǎn)換子程序的流程圖如圖3-2所示

圖3-2chos子程序流程圖

首先,應(yīng)該把斷點地址及一些寄存器的值壓入堆棧,保護現(xiàn)場。在屏幕上輸出轉(zhuǎn)換方法選擇提示符,用戶根據(jù)需要輸入數(shù)據(jù)1或者2。若輸入的數(shù)據(jù)為1則調(diào)用子程序aa,完成字符串由小寫轉(zhuǎn)換為大寫;若輸入的數(shù)據(jù)是2則調(diào)用子程序ba,完成字符串由大寫轉(zhuǎn)換為小寫。轉(zhuǎn)換完了以后,把斷點地址及一些寄存器的值彈出堆棧,最后返回主程序。

3.2.2程序設(shè)計

程序如下:

chosproc;chos子程序

pushax;AX,DX入棧

pushdx

movah,2

movdl,10;回車

int21h

movdl,13;換行

int21h

movah,9;屏幕顯示轉(zhuǎn)換方法選擇提示符

leadx,ms3

int21h

re:

movah,8;輸入數(shù)據(jù)1或者2,但不顯示

int21h

cmpal,31H;輸入為1,程序轉(zhuǎn)移至UP

jeup

cmpal,32H;輸入為2,程序轉(zhuǎn)移至LO

jelo

movah,2;輸入不為1也不為2時,發(fā)出警報,并重新輸入數(shù)據(jù)

movdl,7

int21h

jmpre

up:

callaa;調(diào)用子程序aa

jmpout1

lo:

callba;調(diào)用子程序baout1:

popdx;DX,AX出棧

popax

ret;返回主程序chosendp

3.3小寫轉(zhuǎn)大寫子程序設(shè)計

3.3.1流程圖及其分析

小寫轉(zhuǎn)大寫子程序的流程圖如圖3-3所示

圖3-3小寫轉(zhuǎn)大寫子程序aa的流程圖

首先,應(yīng)該把斷點地址及AX,CX,DI寄存器壓入堆棧,保護現(xiàn)場。再將SI的值賦給CX,將0賦給DI。取出BUFFER單元中的字符,并判斷該字符是否為大寫的英文字母,如果是,則不必進行轉(zhuǎn)換;如果不是,則將小寫字母轉(zhuǎn)化為大寫字母并替代原來的小寫字母。循環(huán)判斷其他的字符,直至CX的值為0,結(jié)束循環(huán),返回主程序。

3.3.2程序設(shè)計

程序如下:

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?,則程序轉(zhuǎn)移到NE1

jbne1

subal,20h;小寫字母轉(zhuǎn)換為大寫字母

mov[buffer+di],al;保存轉(zhuǎn)換后的大寫字母

ne1:

incdi;DI增1

looptop1;循環(huán)返回TOP1

popdi;AX,CX,DI出棧

popcx

popax

ret;返回

aaendp

3.4大寫轉(zhuǎn)小寫子程序設(shè)計

3.4.1流程圖及其分析

大寫轉(zhuǎn)小寫子程序的流程圖如圖3-4所示

圖3-4大寫轉(zhuǎn)小寫子程序ba的流程圖

首先,應(yīng)該把斷點地址及AX,CX,DI寄存器壓入堆棧,保護現(xiàn)場。再將SI的值賦給CX,將0賦給DI。取出BUFFER單元中的字符,并判斷該字符是否為小寫的英文字母,如果是,則不必進行轉(zhuǎn)換;如果不是,則將大寫字母轉(zhuǎn)化為小寫字母并替代原來的大寫字母。循環(huán)判斷其他的字符,直至CX的值為0,結(jié)束循環(huán),返回主程序。

3.4.2程序設(shè)計

程序如下:

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?,則程序轉(zhuǎn)移到NE

jane

addal,20h;大寫字母轉(zhuǎn)換為小寫字母

mov[buffer+di],al;保存轉(zhuǎn)換后的小寫字母

ne:

incdi;DI增1

looptop;循環(huán)返回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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論