匯編語言課程設(shè)計-- 計算比賽成績系統(tǒng)_第1頁
已閱讀1頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  匯編語言課程實習(xí)報告</p><p>  實習(xí)題目 計算比賽成績</p><p>  學(xué)生姓名 </p><p>  班級(學(xué)號) 計科1123班 201211621301</p><p>  院系 信息學(xué)院計算機系</p>&l

2、t;p>  指導(dǎo)老師 </p><p>  提交時間 2014年5月28 日</p><p><b>  成績</b></p><p><b>  目 錄 </b></p><p>  1 課程實習(xí)任務(wù)……………………………………………………

3、………………2</p><p>  2 基本知識…………………………………………………………………………2 </p><p>  2.1 匯編語言程序結(jié)構(gòu)………………………………………………………3 </p><p>  2.2 關(guān)鍵指令分析……………………………………………………………4 </p><p>  2.3 匯編語言

4、上機過程………………………………………………………4</p><p>  3 總體分析…………………………………………………………………………5 </p><p>  3.1 程序功能分析……………………………………………………………5 </p><p>  3.2 設(shè)計思路…………………………………………………………………5</p>&l

5、t;p>  3.3 程序框圖…………………………………………………………………6</p><p>  4 代碼實現(xiàn)………………………………………………………………………7</p><p>  5 調(diào)試過程及操作說明…………………………………………………………11</p><p>  6 總結(jié)……………………………………………………………………………12

6、</p><p>  7 參考文獻………………………………………………………………………12</p><p>  1 課程實習(xí)任務(wù) </p><p><b>  計算比賽成績系統(tǒng) </b></p><p><b>  基本功能: </b></p><p> ?。?)

7、有9名評委,每個評委給分范圍為0~10(整數(shù)):由鍵盤輸入; </p><p> ?。?) 9名評委給分中,去掉一個最高分和一個最低分,剩余7名評委的平均分即為參賽者的得分(精確到小數(shù)點后二位,不考慮四舍五入); (3) 將最后得分在光標(biāo)位置處顯示出來。 </p><p><b>  2 基本知識 </b></p><p>  2.1 匯編

8、語言程序結(jié)構(gòu) </p><p>  匯編語言是計算機能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計算機所有硬件特性并能控制硬件的唯一語言。也因此匯編語言的程序結(jié)構(gòu)也是多種多樣的,我們熟知的結(jié)構(gòu)有循環(huán)、分支程序、子程序和宏匯編。而循環(huán)程序又有簡單循環(huán)和多重循環(huán),最重要的是我們要控制好循環(huán)的次數(shù);分支程序則是由設(shè)定條件不同而跳轉(zhuǎn)到不用的分支,來實現(xiàn)不同的功能;子程序則是我們?yōu)榱税颜麄€程序模塊化,使得讀程序的

9、人容易理解你的程序功能;宏則是一種另類的子程序,是有些程序為了能在時間上達到嚴(yán)格的要求和一些功能代碼簡短的多參數(shù)傳遞的程序為了方便參數(shù)傳遞而使用的,而犧牲一點點空間來實現(xiàn),當(dāng)然宏和子程序的工作機制也是不同的。 </p><p>  2.2 關(guān)鍵指令分析 </p><p>  2.2.1 數(shù)據(jù)傳送指令 </p><p>  mov指令:mov指令可以在C

10、PU內(nèi)或CPU和存儲器之間傳送字或者字節(jié)。 </p><p>  PUSH和POP指令:這兩條分別是堆棧的進棧和出棧指令。 </p><p>  XCHG指令:它可以在寄存器之間或者在寄存器和儲存器之間交換信息。 2.2.2 地址傳送指令 </p><p>  LEA指令:將源操作數(shù)的有效地址送到指定的寄存器中。不能使用段寄存 器,源操作數(shù)可以使用除立即數(shù)和寄存器

11、外的任一種寄存器尋址方式。 </p><p>  2.2.3 類型轉(zhuǎn)換指令 </p><p>  CBW指令:將AL的內(nèi)容符號擴展到AH,形成AX中的字 </p><p>  2.2.4 算數(shù)指令 </p><p>  ADD指令:進行加法操作 INC指令:自加1 SUB指令:進行減法操作 DEC 指令:自減1 </p>&

12、lt;p>  CMP指令:將兩個操作數(shù)進行減法操作,但不保存結(jié)果,只設(shè)置條件標(biāo)志位 MUL指令:進行無符號乘法操作 DIV指令:進行無符號除法操作 2.2.5 邏輯指令 </p><p>  AND指令:進行邏輯與操作,見0得0 OR指令:進行邏輯或操作,見1得1 </p><p>  XOR指令:進行異或操作,相同得0,不同得1 2.2.6 控制轉(zhuǎn)移指令 </p>

13、<p>  JMP指令:無條件跳轉(zhuǎn)到指定位置 </p><p>  條件轉(zhuǎn)移指令:根據(jù)上一條指令所設(shè)置的條件碼來判別測試條件,每一種轉(zhuǎn) 移指令有它的測試條件,滿足測試條件則轉(zhuǎn)移到指令指定的位置 LOOP指令: 當(dāng)測試條件碼CX不為0時,循環(huán)指定程序段 </p><p>  CALL指令:把子程序的返回地址存入棧中,以便子程序返回主程序時調(diào)用 RET指令:轉(zhuǎn)移到子程序的入口

14、地址去繼續(xù)執(zhí)行 </p><p>  2.3 匯編語言上機過程 </p><p>  上機過程是我們編寫好程序后驗證的最好手段,也是我們對我們寫得程序進行調(diào)試必不可少的一個過程。上機過程我們首先要把我們編寫的程序在編譯器里對它進行編譯看看是否有語法上的錯誤,然后編譯生成.obj文件,最后連接生成可執(zhí)行文件.exe,然后我們要對生成的

15、可執(zhí)行文件進行調(diào)試,看看是否有邏輯上的錯誤,如果有邏輯上的錯誤那么我們還要對程序進行修改,知道沒有邏輯上的錯誤時,我們就可以運行程序,并得到我們想要的結(jié)果了。上機過程大概課分為四部分:編輯、編譯、調(diào)試、運行。</p><p>  只有通過上機過程你才能發(fā)現(xiàn)你的程序是否有邏輯上或者語法上的錯誤,最</p><p>  重要的是檢測運行結(jié)果是不是你理論上的結(jié)果。我們只有在上機過程中才能發(fā)現(xiàn)問題

16、,然后解決問題,最終得到我們想要的結(jié)果。</p><p><b>  3.總體分析 </b></p><p><b>  3.1程序功能分析</b></p><p>  通過讀取依次從鍵盤輸入的9個兩位的十進制數(shù)得分,將得分保存在字符串中,然后用冒泡法將9個數(shù)的位置按大小重新排列并輸出,再將中間的7個數(shù)累加起來除以7,即得

17、到去掉最高分和最低分之后的平均分,最后設(shè)置光標(biāo)位置到平均分處。</p><p><b>  3.2設(shè)計思路</b></p><p>  通過記錄鍵盤,將ASCII碼轉(zhuǎn)化為二進制數(shù)寸入長度為9的字符串中,此部分使用用循環(huán)結(jié)構(gòu)。若輸入的兩位數(shù)的首位,即十位,非0或非1,則提示錯誤并要求重復(fù)輸入,若輸入的個位數(shù)非0~9中的數(shù),則提示錯誤并要求重復(fù)輸入。</p>

18、<p>  用冒泡法重排9個數(shù),使得第1和第9個數(shù)分別為最大數(shù)和最小數(shù),并在屏幕中依次顯示出來。然后用循環(huán)語句求出9個數(shù)中中間的7個數(shù)的和,即總得分,若總得分為70分,則直接輸出平均分:10.00分。若小于70分則將總得分除以得到的商作為平均分的個位數(shù),輸出一個小數(shù)點,將余數(shù)乘以10再除以7,如此循環(huán)3次,后兩次不輸出小數(shù)點,得到精確到小數(shù)點后兩位的平均的分?jǐn)?shù),再將平均分輸出。最后改變光標(biāo)位置為平均得分處。</p&g

19、t;<p>  3.3 程序設(shè)計框圖</p><p><b>  YES</b></p><p><b>  NO</b></p><p><b>  4.代碼實現(xiàn)</b></p><p>  DATAS SEGMENT</p><p>

20、  RESULT DB 10 DUP(?) </p><p>  STRING1 DB 'Please input integer(0-10) '</p><p>  NUMBER DB 31H,': ','$'</p><p>  STRING2 DB 0AH,'The ranged scores are:

21、','$'</p><p>  STRING3 DB 'After removing the highest and lowest score, the average score is: ','$'</p><p>  ERROR DB ' out of range',0AH,0DH,'$

22、9;</p><p>  ERROR1 DB ' is not an integer',0AH,0DH,'$'</p><p>  ERROR2 DB ' is not an number',0AH,0DH,'$'</p><p>  DATAS ENDS</p>

23、<p>  STACKS SEGMENT</p><p>  ;此處輸入堆棧段代碼</p><p>  STACKS ENDS</p><p>  CODES SEGMENT</p><p>  ASSUME CS:CODES,DS:DATAS,SS:STACKS</p><p>  CR PROC NEAR

24、 ;設(shè)置一個子程序</p><p><b>  PUSH AX</b></p><p><b>  PUSH BX</b></p><p>  MOV AH,02H</p><p>  MOV DL,0DH;回車</p><p><b>  INT 21

25、H</b></p><p>  MOV DL,0AH;換行</p><p><b>  INT 21H</b></p><p><b>  POP BX</b></p><p><b>  POP AX</b></p><p><b

26、>  RET</b></p><p><b>  CR ENDP</b></p><p><b>  START:</b></p><p>  MOV AX,DATAS</p><p><b>  MOV DS,AX</b></p><p&

27、gt;<b>  XOR SI,SI</b></p><p><b>  MOV CX,9</b></p><p>  MOV AH, 00H</p><p>  MOV AL, 10 ;選擇顯示方式10H(16色圖形)</p><p><b>  INT 10H</b><

28、;/p><p>  MOV AH, 10H</p><p>  MOV AL, 00H</p><p>  MOV BH, 10H ;背景設(shè)為綠色(02H也可以,是用DEBUG調(diào)試出來的)</p><p>  MOV BL, 0 ;選擇0號調(diào)色板</p><p><b>  INT 10H</b>&l

29、t;/p><p><b>  INPUT:</b></p><p>  LEA DX,STRING1</p><p>  MOV AH,9;9號功能,顯示字符串</p><p>  INT 21H;的邏輯地址 </p><p>  MOV AH,1;AL=輸入字符</p>&l

30、t;p><b>  INT 21H</b></p><p>  SUB AL,30H;把輸入的字符ASCII轉(zhuǎn)換成數(shù)值</p><p><b>  MOV DL,10</b></p><p>  MUL DL;十位數(shù)乘以10</p><p>  MOV DX,AX;把十位數(shù)存放在DL&

31、lt;/p><p><b>  MOV AH,1</b></p><p><b>  INT 21H</b></p><p>  MOV BL,'.'</p><p>  CMP AL,BL;判斷個位數(shù)是否是小數(shù)點,因為要輸入的數(shù)是整數(shù),用這種方法來提示輸入的數(shù)不能是小數(shù)</p

32、><p><b>  JE ER1</b></p><p>  SUB AL,30H</p><p>  ADD AL,DL;個位數(shù)和十位數(shù)相加</p><p>  CMP AL,0;跟0比較</p><p>  JB ER;小于0則調(diào)到ER</p><p>  CMP

33、 AL,10;跟10比較</p><p>  JA ER;大于10則調(diào)到ER</p><p>  MOV RESULT[SI],AL;把AL的值存放在RESULT</p><p>  INC SI ;SI自加1</p><p>  INC NUMBER</p><p>  CALL CR;調(diào)用子

34、程序</p><p>  LOOP INPUT</p><p>  JMP RANGE_0;轉(zhuǎn)入排序</p><p><b>  ER:</b></p><p>  LEA DX,ERROR;取ERROR的偏移地址</p><p><b>  MOV AH,9</b>

35、;</p><p><b>  INT 21H</b></p><p><b>  JMP INPUT</b></p><p><b>  ER1:</b></p><p>  LEA DX,ERROR1</p><p><b>  MOV A

36、H,9</b></p><p><b>  INT 21H</b></p><p><b>  JMP INPUT</b></p><p><b>  RANGE_0:</b></p><p><b>  MOV BX,1</b></p&

37、gt;<p><b>  MOV CX,9</b></p><p><b>  XOR DI,DI</b></p><p><b>  RANGE:</b></p><p>  MOV AL,RESULT[DI];把RESULT(I)送到AL</p><p>

38、  CMP AL,RESULT[DI+1];進行比較</p><p>  JAE NEXT_1;大于或等于跳到NEXT_1</p><p>  XCHG RESULT[DI+1],AL;小于則進行交換</p><p>  MOV RESULT[DI],AL;保存較大的數(shù)</p><p><b>  MOV BX,0

39、</b></p><p><b>  NEXT_1:</b></p><p><b>  INC DI</b></p><p>  LOOP RANGE</p><p><b>  CMP BX,0</b></p><p>  JE RANG

40、E_0</p><p>  LEA DX,STRING2;取STRING2的偏移地址</p><p><b>  MOV AH,9</b></p><p><b>  INT 21H</b></p><p>  MOV CX,9;顯示輸出的次數(shù)</p><p>

41、  XOR SI,SI;SI;清零</p><p><b>  MOV AH,2</b></p><p>  RANGE_OUTPUT:;輸出排序后的得分</p><p>  MOV DL,RESULT[SI]</p><p>  ADD DL,30H;把DL的值轉(zhuǎn)換成ASCII</p>

42、<p>  CMP DL,39H;判斷是否是10分</p><p>  JA TENS_1;10分就跳到TEXT_1</p><p>  JBE TENS_0;不是就跳到TEXT_0</p><p><b>  TENS_1: </b></p><p><b>  MOV BX,

43、1</b></p><p>  MOV DL,'1';輸出字符1</p><p><b>  INT 21H</b></p><p>  MOV DL,'0';輸出字符0</p><p><b>  INT 21H</b></p>

44、<p><b>  INC SI</b></p><p>  MOV DL,',';輸出逗號</p><p><b>  INT 21H</b></p><p>  JMP NEXT_2</p><p>  TENS_0:;十位數(shù)位0,則按原分輸出<

45、;/p><p><b>  INT 21H</b></p><p><b>  INC SI</b></p><p>  MOV DL,','</p><p><b>  INT 21H</b></p><p><b>  NEXT

46、_2:</b></p><p>  LOOP RANGE_OUTPUT</p><p><b>  MOV AH,2</b></p><p>  MOV DL,0AH;換行</p><p><b>  INT 21H</b></p><p>  MOV DL

47、,0AH;換行</p><p><b>  INT 21H</b></p><p>  MOV DL,0DH;回車</p><p><b>  INT 21H</b></p><p>  LEA DX,STRING3;取STRING3的偏移地址</p><p>

48、;<b>  MOV AH,9H</b></p><p><b>  INT 21H</b></p><p>  MOV CX,7;累加中間7個數(shù)字</p><p>  XOR AX,AX;AX清零</p><p><b>  DEC SI</b></p>

49、;<p><b>  SUM:</b></p><p><b>  ;求7個分?jǐn)?shù)的和</b></p><p><b>  DEC SI</b></p><p>  ADD AL,RESULT[SI]</p><p><b>  LOOP SUM</

50、b></p><p>  CMP AL,46H;與滿分70 比較</p><p>  JAE FULL_MARK;大于等于挑到FULL_MARK</p><p>  JMP N_FULL_MARK;否則跳到N_FULL_MARK</p><p>  FULL_MARK:</p><p><b&

51、gt;  ;滿分時</b></p><p><b>  MOV AH,2H</b></p><p>  MOV DL,'1';輸出字符1</p><p><b>  INT 21H</b></p><p>  MOV DL,'0';輸出字符0

52、</p><p><b>  INT 21H</b></p><p>  MOV DL,'.'</p><p>  INT 21H;輸出字符</p><p>  MOV DL,'0'</p><p><b>  INT 21H</b>&

53、lt;/p><p>  MOV DL,'0'</p><p><b>  INT 21H</b></p><p>  JMP ENDING</p><p>  N_FULL_MARK:</p><p><b>  ;非滿分時</b></p><

54、p>  MOV CX,3;設(shè)置循環(huán)3次,為下面的求兩位小數(shù)做準(zhǔn)備</p><p>  MOV BH,1;設(shè)置小數(shù)點出現(xiàn)一次</p><p><b>  DIVISION:</b></p><p><b>  MOV BL,7</b></p><p>  DIV BL;除以7

55、</p><p>  PUSH AX;把除完后的AX入棧,存起來</p><p>  ADD AL,30H</p><p>  MOV DL,AL </p><p><b>  MOV AH,2</b></p><p>  INT 21H;輸出商</p><p&

56、gt;  CMP BH,0;把BX置為0,使下次循環(huán)不會出現(xiàn)小數(shù)點</p><p>  JE DOT</p><p>  MOV DL,'.'</p><p><b>  INT 21H</b></p><p><b>  MOV BX,0</b></p>

57、<p><b>  DOT: </b></p><p>  POP AX;恢復(fù)之前入棧的余數(shù)</p><p>  MOV AL,AH;余數(shù)存入AL</p><p><b>  MOV DL,10</b></p><p>  MUL DL;余數(shù)乘以10,結(jié)果存入AX&

58、lt;/p><p>  LOOP DIVISION</p><p><b>  ENDING:</b></p><p>  MOV AH,02;調(diào)用2號功能,置光標(biāo)位置</p><p>  MOV BH,0;顯示頁</p><p>  MOV DX,0E48H;顯示行列,DH=0CH行

59、,DL=48H列</p><p>  INT 10H;設(shè)置光標(biāo)位置</p><p>  MOV AH,4CH</p><p><b>  INT 21H</b></p><p>  CODES ENDS</p><p><b>  END START</b></

60、p><p>  5調(diào)試過程及操作說明</p><p>  如上圖,當(dāng)我們輸入一個整數(shù)的時候會自動跳到下行輸入,輸入的數(shù)不對如負(fù)數(shù),小數(shù)點,大于10的都會顯示錯誤的信息然后自動提醒再重新輸入。當(dāng)我們輸完數(shù)據(jù)之后會自動排序和計算成績</p><p><b>  6.總結(jié)</b></p><p>  這次課程設(shè)計,代碼雖然不長,當(dāng)

61、卻可以從中了解很多的知識,比如哪幾號的功能是做什么的,之前都不是怎么了解,等到要做的時候,一個一個會去詳細(xì)查詢,然后通過實踐了解了這些指令的作用和用處。</p><p>  通過課程幾天的課程設(shè)計,學(xué)到了諸多上課學(xué)不到的知識,特別是體會到了匯編語言與高級程序語言編程的不同,起初非常不適宜匯編語言的編程,高級程序語言中的基本功能,入多重循環(huán)和套嵌,在匯編語言看來缺是相當(dāng)復(fù)雜的,還有數(shù)字的輸入和輸出都要經(jīng)過ASCII

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論