匯編語言課程設(shè)計(jì)報(bào)告---字母大小寫轉(zhuǎn)換_第1頁
已閱讀1頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  課程設(shè)計(jì)題目:字母大小寫轉(zhuǎn)換</p><p><b>  目錄</b></p><p><b>  一.概述1</b></p><p><b>  二.設(shè)計(jì)要求1</b></p><p>  三.設(shè)計(jì)思想與工作原理1</p><p

2、><b>  四.程序流程圖4</b></p><p><b>  五.流程圖說明4</b></p><p><b>  六.程序源代碼5</b></p><p>  七.運(yùn)行調(diào)試結(jié)果11</p><p>  八.設(shè)計(jì)過程中遇到的問題及解決辦法11</p&

3、gt;<p><b>  九.心德體會(huì)13</b></p><p><b>  字母大小寫轉(zhuǎn)換</b></p><p><b>  一.概述</b></p><p>  在計(jì)算機(jī)系統(tǒng)中有多種數(shù)制和編碼,常用的數(shù)制有二進(jìn)制、八進(jìn)制以及十六進(jìn)制,常用的代碼有BCD碼、ASCll碼和七段顯示

4、碼等。這些數(shù)制和編碼根據(jù)其作用的不同,在存儲(chǔ)形式上也有差異。在實(shí)際應(yīng)用中,它們也因使用的要求不同而有所差異。在配備操作系統(tǒng)管理程序的計(jì)算機(jī)中,有些代碼轉(zhuǎn)換程序已在系統(tǒng)管理軟件中編好。還有些代碼轉(zhuǎn)換需要根據(jù)使用要求通過編程完成。因此,代碼轉(zhuǎn)換是非數(shù)據(jù)處理中最常見的情況。</p><p><b>  二.設(shè)計(jì)要求</b></p><p>  完成一個(gè)字母或數(shù)制之間的轉(zhuǎn)化程

5、序,主程序分別具有可選擇的子功能,按相應(yīng)的字符,可分別進(jìn)入相應(yīng)的子功能并在屏幕上顯示結(jié)果。</p><p>  可選擇的子功能分別為:</p><p> ?。?)實(shí)現(xiàn)小寫字母向大寫字母的轉(zhuǎn)換</p><p> ?。?)實(shí)現(xiàn)大寫字母向小寫字母的轉(zhuǎn)換</p><p><b>  設(shè)計(jì)思想與工作原理</b></p>

6、<p>  小寫字母的ASC碼比大寫字母的ASC碼大20H,因此,大寫轉(zhuǎn)小寫就是將大寫字母的ASC碼加20H,反之,將小寫字母的ASC碼減20H。 大小寫字母轉(zhuǎn)換功能,是通過調(diào)用子函數(shù)input實(shí)現(xiàn)對(duì)字符串的輸入,然后調(diào)用宏gaixie來實(shí)現(xiàn)對(duì)大小寫的轉(zhuǎn)換,其中宏是通過參數(shù)的傳遞來確定是小寫轉(zhuǎn)換成大寫,還是大寫轉(zhuǎn)換成小寫的。從而決定是對(duì)操作數(shù)進(jìn)行加或減20H。</p><p>  80x86從功能上

7、分執(zhí)行單元EU(Execution Unit),和總線接口單元BIU(Bus Interface Unit),執(zhí)行單元由算術(shù)邏輯單元(ALU)、標(biāo)志寄存器、通用寄存器組和EU控制器等部件組成。 指令執(zhí)行部件EU由算術(shù)邏輯單元、標(biāo)志寄存器、通用寄存器和EU控制器等部件組成。 </p><p>  主要功能是執(zhí)行指令: </p><p>  一般順序執(zhí)行,EU不斷地從指令隊(duì)列中取指令連續(xù)執(zhí)行,

8、而省去訪問存儲(chǔ)器取指令的時(shí)間。 </p><p>  需要訪問存儲(chǔ)器取操作數(shù)時(shí),EU將訪問地址送給BIU后,將要等待操作數(shù)到來后才能繼續(xù)操作; </p><p>  遇到轉(zhuǎn)移類指令時(shí),要將指令隊(duì)列中的后續(xù)指令作廢,等待BIU重新從存儲(chǔ)器取出目標(biāo)地址中的指令代碼進(jìn)入指令隊(duì)列后,EU才能繼續(xù)執(zhí)行指令。 </p><p>  總線接口單元由地址加法器、專用寄存器組、指令

9、隊(duì)列緩沖器和總線控制電路等部件組成; </p><p>  主要功能是形成訪問存儲(chǔ)器的物理地址,負(fù)責(zé)與外部(存儲(chǔ)器或I/O接口)打交道。 正常情況下,BIU通過地址加法器形成指令的物理地址,從給定存儲(chǔ)器地址中取出指令代碼送指令隊(duì)列緩沖器中等待執(zhí)行(指令隊(duì)列緩沖器中出現(xiàn)一個(gè)空字節(jié),BIU將自動(dòng)進(jìn)行讀指令的操作填滿隊(duì)列)。 </p><p>  收到EU送來的操作數(shù)地址,BIU將立即形成操作數(shù)

10、的物理地址,完成讀/寫操作數(shù)或運(yùn)算結(jié)果功能。遇到轉(zhuǎn)移類指令,BIU將指令隊(duì)列緩沖器中的尚存指令作廢,重新從存儲(chǔ)器目標(biāo)地址中取指令送指令緩沖器中。 </p><p>  指令隊(duì)列可存放6字節(jié)的指令代碼。一般情況下指令隊(duì)列中總是填滿指令,使EU可不斷地得到執(zhí)行的指令。 </p><p>  16位地址加法器專門用來完成由邏輯地址變換成物理地址的功能。實(shí)際上是進(jìn)行一次地址加法,將兩個(gè)16位的邏

11、輯地址轉(zhuǎn)換為20位的物理地址,以達(dá)到可尋址1M字節(jié)的存儲(chǔ)空間。 </p><p>  總線控制電路將8086CPU的內(nèi)部總線與外部總線相連,是8086CPU與外部交換數(shù)據(jù)的必經(jīng)之路。包括16條數(shù)據(jù)總線、20條地址總線和若干條控制總線。程序裝載到內(nèi)存中后通過16位數(shù)據(jù)線確定各個(gè)段地址,開始取出指令(內(nèi)存中讀字節(jié)),放到指令隊(duì)列,隊(duì)列出口通過EU控制器執(zhí)行指令并同時(shí)影響IP(指令指針移動(dòng)指令長度,或通過指令執(zhí)行后影響

12、IP。</p><p><b>  (1)匯編:</b></p><p>  計(jì)算機(jī)不能直接識(shí)別和執(zhí)行匯編語言程序,而要通過“翻譯”把源程序譯成機(jī)器語言程序(目標(biāo)程序)才能執(zhí)行,這一“翻譯”工作稱為匯編。匯編有人工匯編和計(jì)算機(jī)匯編兩種方法。</p><p>  匯編語言是面向機(jī)器的,每一類計(jì)算機(jī)分別有自己的匯編語言。匯編語言占用的內(nèi)存單元少,執(zhí)

13、行效率高,廣泛應(yīng)用于工業(yè)過程控制與檢測等場合。</p><p>  (2)匯編語言語句格式</p><p>  標(biāo)號(hào): 操作符 操作數(shù) 注釋</p><p>  Start: mov A:30H ;</p><p>  標(biāo)號(hào)用來標(biāo)明語句地址,它代表該語句指令機(jī)器碼的第一個(gè)字節(jié)的存儲(chǔ)單元地址。</p>

14、<p>  標(biāo)號(hào)一般規(guī)定由1~8個(gè)英文字母或數(shù)字組成,但第一個(gè)符號(hào)必須是英文字母。</p><p>  注釋只是對(duì)語句或程序段的含義進(jìn)行解釋說明,以方便程序的編寫、閱讀和交流,簡化軟件的維護(hù),一般只在關(guān)鍵處加注釋。</p><p><b>  (3)偽指令</b></p><p>  偽指令只用于匯編語言源程序中,對(duì)匯編過程起控制和

15、指導(dǎo)的作用,不生成機(jī)器碼。匯編結(jié)束,自動(dòng)消失。</p><p> ?。?)匯編語言程序設(shè)計(jì)步驟</p><p><b>  (1)分析問題</b></p><p><b> ?。?)確定算法</b></p><p><b>  (3)設(shè)計(jì)程序流程</b></p>

16、<p> ?。?)分配內(nèi)存單元:分配內(nèi)存工作單元,確定程序和數(shù)據(jù)區(qū)的起始地址。</p><p>  (5)編寫匯編語言程序 </p><p><b> ?。?)調(diào)試程序 </b></p><p>  四.程序流程圖及其說明</p><p><b>  五.流程圖說明</b></p&g

17、t;<p>  該程序流程圖簡要地表現(xiàn)出了所要實(shí)現(xiàn)的功能以及一些功能的大概算法,同時(shí)也是我編寫的程序的一個(gè)總體的框架。 通過流程圖,可以看出程序開始運(yùn)行時(shí),首先輸出輸入界面,在界面中輸入字母(大小寫均可),按回車鍵輸出結(jié)果,大寫輸出小寫,小寫輸出大寫,或同時(shí)輸入大小寫,其結(jié)果也將以小大寫形式輸出,此時(shí)結(jié)束程序,若程序中輸入字母過多或頻繁則報(bào)警器報(bào)警。</p><p><b>  六.程序源

18、代碼</b></p><p>  code segment </p><p>  assume cs:code,ds:code</p><p>  org 100h </p><p>  start:jmp begin

19、 </p><p>  p1 db 100 </p><p><b>  p2 db 0</b></p><p>  array db 100h dup(?) </p><p><b>  begin:</b><

20、/p><p>  lea bx,array </p><p>  mov ax,cs </p><p><b>  mov ds,ax</b></p><p>  mov dx,offset p1 </p><p

21、>  mov ah,0ah </p><p>  int 21h ;調(diào)用dos中斷,等待用戶輸入字符串</p><p>  xor bx,bx </p><p>  mov bl,p2 </p><p>  mov arra

22、y[bx],'$' </p><p>  mov di,0ffffh </p><p>  next: inc di </p><p>  cmp array[di],'$' </p><p>

23、  je exit </p><p>  cmp array[di],41h ;41h表示A </p><p>  jl exit1 </p><p>  cmp array[di],5ah ; Z</p><p> 

24、 jg next1 </p><p>  add array[di],20h ;回車</p><p>  jmp next ;判斷是否為大寫字母</p><p><b>  next1:</b></p><p>  cmp a

25、rray[di],'$' </p><p>  je exit </p><p>  cmp array[di],61h ;a</p><p>  jl next </p><p>  cmp array

26、[di],7ah ;z</p><p>  jg exit1 </p><p>  sub array[di],20h ;回車</p><p>  jmp next ;判斷是否為小寫字母 </p><p><b&g

27、t;  disp:</b></p><p><b>  loop next</b></p><p>  exit: mov p1,0dh </p><p>  mov p2,0ah</p><p>  mov ah,09h</p><p><

28、b>  int 21h</b></p><p>  jmp begin code segment </p><p>  assume cs:code,ds:code</p><p>  org 100h </p><p>

29、;  start:jmp begin </p><p>  p1 db 100 </p><p><b>  p2 db 0</b></p><p>  array db 100h dup(?) </p><p>&l

30、t;b>  begin:</b></p><p>  lea bx,array </p><p>  mov ax,cs </p><p><b>  mov ds,ax</b></p><p>  mov dx,offset p1

31、 </p><p>  mov ah,0ah </p><p>  int 21h ;調(diào)用dos中斷,等待用戶輸入字符串</p><p>  xor bx,bx </p><p>  mov bl,p2 &l

32、t;/p><p>  mov array[bx],'$' </p><p>  mov di,0ffffh </p><p>  next: inc di </p><p>  cmp array[di],'$'

33、 </p><p>  je exit </p><p>  cmp array[di],41h ;41h表示A </p><p>  jl exit1 </p><p>  cmp array[di],5ah

34、 ; Z</p><p>  jg next1 </p><p>  add array[di],20h ;回車</p><p>  jmp next ;判斷是否為大寫字母</p><p><b>  next1:</b>

35、;</p><p>  cmp array[di],'$' </p><p>  je exit </p><p>  cmp array[di],61h ;a</p><p>  jl next <

36、;/p><p>  cmp array[di],7ah ;z</p><p>  jg exit1 </p><p>  sub array[di],20h ;回車</p><p>  jmp next ;判斷是否為小寫字母

37、 </p><p><b>  disp:</b></p><p><b>  loop next</b></p><p>  exit: mov p1,0dh </p><p>  mov p2,0ah</p><p>  mov ah

38、,09h</p><p><b>  int 21h</b></p><p><b>  jmp begin</b></p><p>  exit1: mov p1, 0dh</p><p>  mov p2, 0ah </p><p>  call sound

39、 </p><p>  call sound</p><p>  call sound</p><p>  call sound ;調(diào)用sound子程序</p><p>  jmp begin code segment </p>&

40、lt;p>  assume cs:code,ds:code</p><p>  org 100h </p><p>  start:jmp begin </p><p>  p1 db 100 </p><p><

41、b>  p2 db 0</b></p><p>  array db 100h dup(?) </p><p><b>  begin:</b></p><p>  lea bx,array </p><p>  mov ax,cs

42、 </p><p><b>  mov ds,ax</b></p><p>  mov dx,offset p1 </p><p>  mov ah,0ah </p><p>  int 21h ;調(diào)用dos中斷,等待用戶輸入字符串

43、</p><p>  xor bx,bx </p><p>  mov bl,p2 </p><p>  mov array[bx],'$' </p><p>  mov di,0ffffh </

44、p><p>  next: inc di </p><p>  cmp array[di],'$' </p><p>  je exit </p><p>  cmp array[di],41h ;41h表

45、示A </p><p>  jl exit1 </p><p>  cmp array[di],5ah ; Z</p><p>  jg next1 </p><p>  add array[di],20h ;回

46、車</p><p>  jmp next ;判斷是否為大寫字母</p><p><b>  next1:</b></p><p>  cmp array[di],'$' </p><p>  je exit &

47、lt;/p><p>  cmp array[di],61h ;通過循環(huán)依次判斷每個(gè)字母是否為大寫還是小寫 61h表示小寫字母 a,</p><p>  jl next </p><p>  cmp array[di],7ah ;z</p><p>  jg

48、 exit1 </p><p>  sub array[di],20h ;回車</p><p>  jmp next ;判斷是否為小寫字母 </p><p><b>  disp:</b></p><p><b>

49、;  loop next</b></p><p>  exit: mov p1,0dh </p><p>  mov p2,0ah</p><p>  mov ah,09h</p><p><b>  int 21h</b></p><p><

50、;b>  jmp begin</b></p><p>  exit1: mov p1, 0dh</p><p>  mov p2, 0ah </p><p>  call sound </p><p>  call sound</p><p>  call s

51、ound</p><p>  call sound ;調(diào)用sound子程序</p><p>  jmp begin ;回到最初的狀態(tài),已達(dá)到循環(huán)輸入字符串的目的。</p><p>  mov ah,4ch </p><p>  int 21h ;程序結(jié)束</p>&l

52、t;p>  sound proc</p><p><b>  push ax</b></p><p><b>  push dx</b></p><p>  mov dx, cx</p><p><b>  in al,61h</b></p><p&g

53、t;  and al,11111100b </p><p>  trig: xor al,2 </p><p>  out 61h,al</p><p><b>  mov cx,bx</b></p><p>  delay:loo

54、p delay</p><p>  dec dx </p><p>  jne trig </p><p><b>  pop dx</b></p><p><b>  pop ax</b></p><p><b>  ret</b></

55、p><p>  sound endp</p><p><b>  code ends</b></p><p><b>  end begin</b></p><p>  mov ah,4ch </p><p>  int 21h ;

56、程序結(jié)束</p><p>  sound proc</p><p><b>  push ax</b></p><p><b>  push dx</b></p><p>  mov dx, cx</p><p><b>  in al,61h</b>&

57、lt;/p><p>  and al,11111100b </p><p>  trig: xor al,2 </p><p>  out 61h,al</p><p><b>  mov cx,bx</b></p>&l

58、t;p>  delay:loop delay</p><p>  dec dx </p><p>  jne trig </p><p><b>  pop dx</b></p><p><b>  pop ax</b></p><p><b>  

59、ret</b></p><p>  sound endp</p><p><b>  code ends</b></p><p><b>  end begin</b></p><p>  exit1: mov p1, 0dh</p><p>  mov p2,

60、 0ah </p><p>  call sound </p><p>  call sound</p><p>  call sound</p><p>  call sound ;調(diào)用sound子程序</p><p><b>  jmp begin<

61、/b></p><p>  mov ah,4ch </p><p>  int 21h ;程序結(jié)束</p><p>  sound proc</p><p><b>  push ax</b></p><p><b>  push d

62、x</b></p><p>  mov dx, cx</p><p><b>  in al,61h</b></p><p>  and al,11111100b </p><p>  trig: xor al,2 &l

63、t;/p><p>  out 61h,al</p><p><b>  mov cx,bx</b></p><p>  delay:loop delay</p><p>  dec dx </p><p>  jne trig </p><p><b>  

64、pop dx</b></p><p><b>  pop ax</b></p><p><b>  ret</b></p><p>  sound endp</p><p><b>  code ends</b></p><p><b&

65、gt;  end begin</b></p><p><b>  七.運(yùn)行調(diào)試結(jié)果</b></p><p>  八.設(shè)計(jì)過程中遇到的問題及解決辦法</p><p>  在這次課程設(shè)計(jì)中,我也遇到了一些困難,比如在分配內(nèi)存工作單元,不能出現(xiàn)OBJ文件等一些問題,由于不熟悉掌握匯編語言的命令很容易出錯(cuò)。例如,程序編寫錯(cuò)誤或者匯編出錯(cuò)的時(shí)

66、候很難發(fā)現(xiàn)錯(cuò)誤出現(xiàn)在哪里。所以我們要熟悉掌握匯編語言命令。在編程過程中必須熟練的掌握一些語句。比如,程序開始語句、結(jié)束語句等程序中規(guī)范語句。后經(jīng)請教同學(xué),查閱資料得以解決。</p><p><b>  九.心地體會(huì)</b></p><p>  通過這學(xué)期的微機(jī)課設(shè),我知道了自己的理論知識(shí)并不扎實(shí)。對(duì)于許多指令和一些基本的編程方法都掌握不清楚。通過我的認(rèn)真在復(fù)習(xí),我終于

67、能基本理解一些語句及程序的含義,才開始設(shè)定我的大小寫字母轉(zhuǎn)換程序,</p><p>  用匯編語言來實(shí)現(xiàn)大小寫字母的轉(zhuǎn)換,首先:大寫與小寫相差32ASC11值,其實(shí)字母大小寫的區(qū)別在于他們的ASCII碼范圍,它們之間的轉(zhuǎn)換其實(shí)就是加減相應(yīng)的ASCII碼值。在判斷輸入的字母是大寫的還是小寫的(即判斷輸入符號(hào)ASCII碼在41H~5AH還是在61H~7AH內(nèi))之后,決定判斷是加上還是減去ASCII碼值。在運(yùn)行過程中,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論