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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  課程設(shè)計(jì)題目:字母大小寫(xiě)轉(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>  五.流程圖說(shuō)明4</b></p><p><b>  六.程序源代碼5</b></p><p>  七.運(yùn)行調(diào)試結(jié)果11</p><p>  八.設(shè)計(jì)過(guò)程中遇到的問(wèn)題及解決辦法11</p&

3、gt;<p><b>  九.心德體會(huì)13</b></p><p><b>  字母大小寫(xiě)轉(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ù)使用要求通過(guò)編程完成。因此,代碼轉(zhuǎn)換是非數(shù)據(jù)處理中最常見(jiàn)的情況。</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)小寫(xiě)字母向大寫(xiě)字母的轉(zhuǎn)換</p><p> ?。?)實(shí)現(xiàn)大寫(xiě)字母向小寫(xiě)字母的轉(zhuǎn)換</p><p><b>  設(shè)計(jì)思想與工作原理</b></p>

6、<p>  小寫(xiě)字母的ASC碼比大寫(xiě)字母的ASC碼大20H,因此,大寫(xiě)轉(zhuǎn)小寫(xiě)就是將大寫(xiě)字母的ASC碼加20H,反之,將小寫(xiě)字母的ASC碼減20H。 大小寫(xiě)字母轉(zhuǎn)換功能,是通過(guò)調(diào)用子函數(shù)input實(shí)現(xiàn)對(duì)字符串的輸入,然后調(diào)用宏gaixie來(lái)實(shí)現(xiàn)對(duì)大小寫(xiě)的轉(zhuǎn)換,其中宏是通過(guò)參數(shù)的傳遞來(lái)確定是小寫(xiě)轉(zhuǎn)換成大寫(xiě),還是大寫(xiě)轉(zhuǎn)換成小寫(xiě)的。從而決定是對(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、而省去訪問(wèn)存儲(chǔ)器取指令的時(shí)間。 </p><p>  需要訪問(wèn)存儲(chǔ)器取操作數(shù)時(shí),EU將訪問(wèn)地址送給BIU后,將要等待操作數(shù)到來(lái)后才能繼續(xù)操作; </p><p>  遇到轉(zhuǎn)移類(lèi)指令時(shí),要將指令隊(duì)列中的后續(xù)指令作廢,等待BIU重新從存儲(chǔ)器取出目標(biāo)地址中的指令代碼進(jìn)入指令隊(duì)列后,EU才能繼續(xù)執(zhí)行指令。 </p><p>  總線接口單元由地址加法器、專(zhuān)用寄存器組、指令

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

10、的物理地址,完成讀/寫(xiě)操作數(shù)或運(yùn)算結(jié)果功能。遇到轉(zhuǎn)移類(lèi)指令,BIU將指令隊(duì)列緩沖器中的尚存指令作廢,重新從存儲(chǔ)器目標(biāo)地址中取指令送指令緩沖器中。 </p><p>  指令隊(duì)列可存放6字節(jié)的指令代碼。一般情況下指令隊(duì)列中總是填滿指令,使EU可不斷地得到執(zhí)行的指令。 </p><p>  16位地址加法器專(zhuān)門(mén)用來(lái)完成由邏輯地址變換成物理地址的功能。實(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)存中后通過(guò)16位數(shù)據(jù)線確定各個(gè)段地址,開(kāi)始取出指令(內(nèi)存中讀字節(jié)),放到指令隊(duì)列,隊(duì)列出口通過(guò)EU控制器執(zhí)行指令并同時(shí)影響IP(指令指針移動(dòng)指令長(zhǎng)度,或通過(guò)指令執(zhí)行后影響

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

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

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

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

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

17、t;<p>  該程序流程圖簡(jiǎn)要地表現(xiàn)出了所要實(shí)現(xiàn)的功能以及一些功能的大概算法,同時(shí)也是我編寫(xiě)的程序的一個(gè)總體的框架。 通過(guò)流程圖,可以看出程序開(kāi)始運(yùn)行時(shí),首先輸出輸入界面,在界面中輸入字母(大小寫(xiě)均可),按回車(chē)鍵輸出結(jié)果,大寫(xiě)輸出小寫(xiě),小寫(xiě)輸出大寫(xiě),或同時(shí)輸入大小寫(xiě),其結(jié)果也將以小大寫(xiě)形式輸出,此時(shí)結(jié)束程序,若程序中輸入字母過(guò)多或頻繁則報(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 ;回車(chē)</p><p>  jmp next ;判斷是否為大寫(xiě)字母</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 ;回車(chē)</p><p>  jmp next ;判斷是否為小寫(xiě)字母 </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 ;回車(chē)</p><p>  jmp next ;判斷是否為大寫(xiě)字母</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 ;回車(chē)</p><p>  jmp next ;判斷是否為小寫(xiě)字母

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、車(chē)</p><p>  jmp next ;判斷是否為大寫(xiě)字母</p><p><b>  next1:</b></p><p>  cmp array[di],'$' </p><p>  je exit &

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

48、 exit1 </p><p>  sub array[di],20h ;回車(chē)</p><p>  jmp next ;判斷是否為小寫(xiě)字母 </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ì)過(guò)程中遇到的問(wèn)題及解決辦法</p><p>  在這次課程設(shè)計(jì)中,我也遇到了一些困難,比如在分配內(nèi)存工作單元,不能出現(xiàn)OBJ文件等一些問(wèn)題,由于不熟悉掌握匯編語(yǔ)言的命令很容易出錯(cuò)。例如,程序編寫(xiě)錯(cuò)誤或者匯編出錯(cuò)的時(shí)

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論